<?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>233522</bug_id>
          
          <creation_ts>2021-11-26 06:10:46 -0800</creation_ts>
          <short_desc>GraphicsContextGL should have ANGLE-specific subclass</short_desc>
          <delta_ts>2021-11-30 06:56:29 -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>Unspecified</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>
          
          <blocked>221664</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>annulen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1817959</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-26 06:10:46 -0800</bug_when>
    <thetext>GraphicsContextGL should have ANGLE-specific subclass

Currently ANGLE code is ifdefed in GraphicsContextGLOpenGL
Make class GraphicsContextGLANGLE  be about ANGLE.
Make class GraphicsContextGLOpenGL be about OpenGL, OpenGL ES.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817961</commentid>
    <comment_count>1</comment_count>
      <attachid>445198</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-26 06:27:42 -0800</bug_when>
    <thetext>Created attachment 445198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818149</commentid>
    <comment_count>2</comment_count>
      <attachid>445198</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-11-29 01:20:57 -0800</bug_when>
    <thetext>Comment on attachment 445198
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818183</commentid>
    <comment_count>3</comment_count>
      <attachid>445268</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-29 05:12:52 -0800</bug_when>
    <thetext>Created attachment 445268
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818186</commentid>
    <comment_count>4</comment_count>
      <attachid>445270</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-29 05:18:35 -0800</bug_when>
    <thetext>Created attachment 445270
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818191</commentid>
    <comment_count>5</comment_count>
      <attachid>445275</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-29 05:59:06 -0800</bug_when>
    <thetext>Created attachment 445275
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818257</commentid>
    <comment_count>6</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-11-29 09:52:47 -0800</bug_when>
    <thetext>It really feels like we should be trying to collapse into a single GraphicsContextGL not making more subclasses. Couldn&apos;t we just provide the same sort of namespaced gl:: functions but mapped to a system OpenGL ES and collapse things that way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818322</commentid>
    <comment_count>7</comment_count>
      <attachid>445300</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-29 11:06:52 -0800</bug_when>
    <thetext>Created attachment 445300
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818336</commentid>
    <comment_count>8</comment_count>
      <attachid>445306</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-29 11:20:21 -0800</bug_when>
    <thetext>Created attachment 445306
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818373</commentid>
    <comment_count>9</comment_count>
      <attachid>445317</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-29 11:56:41 -0800</bug_when>
    <thetext>Created attachment 445317
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818609</commentid>
    <comment_count>10</comment_count>
      <attachid>445382</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-29 23:00:13 -0800</bug_when>
    <thetext>Created attachment 445382
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818614</commentid>
    <comment_count>11</comment_count>
      <attachid>445385</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-29 23:21:31 -0800</bug_when>
    <thetext>Created attachment 445385
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818626</commentid>
    <comment_count>12</comment_count>
      <attachid>445388</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-29 23:53:15 -0800</bug_when>
    <thetext>Created attachment 445388
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818634</commentid>
    <comment_count>13</comment_count>
      <attachid>445391</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-30 00:41:54 -0800</bug_when>
    <thetext>Created attachment 445391
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818640</commentid>
    <comment_count>14</comment_count>
      <attachid>445393</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-30 01:04:57 -0800</bug_when>
    <thetext>Created attachment 445393
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818647</commentid>
    <comment_count>15</comment_count>
      <attachid>445395</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-30 01:33:31 -0800</bug_when>
    <thetext>Created attachment 445395
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818657</commentid>
    <comment_count>16</comment_count>
      <attachid>445399</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-30 02:12:27 -0800</bug_when>
    <thetext>Created attachment 445399
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818705</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-30 06:55:01 -0800</bug_when>
    <thetext>Committed r286293 (244652@main): &lt;https://commits.webkit.org/244652@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445399.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818706</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-30 06:56:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/85863502&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445198</attachid>
            <date>2021-11-26 06:27:42 -0800</date>
            <delta_ts>2021-11-29 05:12:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233522-20211126162739.patch</filename>
            <type>text/plain</type>
            <size>546262</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjUzNmExMDNmNmZiYjBm
N2JmNWE1OGE1YzEzMjQ4Mzc2N2ViNTA4MS4uZjlhYzk2NWJmMGQxYjcwNzI4NDMyNzZlYmNjYzBj
MjU2MzQ1NzdhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjYgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yNiAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNDgxNGJmM2Y0Y2UwMzBjZDA1MTUzMzUyMDczMDNlNDMyZjQyZDhlNS4uYTVm
ZTk5MWMwYTM3YWY0N2MyMjk4NjRhNzdjNjY0ODlhMTQ1ZmQzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yNiAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjYgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA3NzVjNzZmMTI1NzE4Mjc2OTg1
NzNiOGZmYTQxZDdkOGMzZGUwODM1Li45ZjQ0ZWJjNjQ1MDFmODkxOTY1MzE4YTgxNjZmODc1MzY4
OGUyMmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MDUsNiArMTQwNSw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0FOR0xFSGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGls
aXRpZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDZmZGIwMzMzMjA4ODE3MDI4ODdlN2ExYWEzZTllNGJkMzQ2
Yjg4NDAuLjI3ZmE1MDJjMDZiZjViZGRiMjc2NGI3NDhhZTk2Nzc0ZjAyMTMzMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
YjZlYzE0NDlhODQ5Y2RiNGY5YjE2NjcxNzg3NjJjNzg0OGJmMTI0Ni4uMDk1NGEyYzM1ZGM3ODky
MWI0ZDlkNTY4MjllYjU4MGU3NWM4MDM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzUsNyArMjEz
NSw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvaXNvL0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09WVFRDdWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZDJkMWI1NjVkMWQwOWI4ZGQxMmE5ZjUyMTlm
NjlmMjdlMDY2NGMwMS4uMzA1NjBmOWRlYmIwMjBiMWQ4YjNmOTI2MTdkNWMyNjlkODUxNjNhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVByZXdhcm1pbmdNZXRhbC5tbQogcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg3NTkwOGZlMDVmYjJm
MjE4ZWY1ZTM0MDEwOWNkNTVmZTkwNjA0ZGMuLjY2NGUwZDdkYWRmNmUzZGM2NmQzZDcyMTQ0ZjQz
ZTgxNDA5YmY1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTIzNjAsNyArMjM2MCw3IEBACiAJCTdBRjlCMjBEMThDRkI1RjQw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmgg
Ki87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRjlCMjBCMThD
RkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJN0IxMDMzOUUyNTQ5
NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlEMjU0OTcyMDEwMEM4QzFBQyAvKiBH
cmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCMTAz
MzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlDMjU0OTcyMDEw
MEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYwOTRERDI3MEM0NEJEMDA2NDgzNUMg
LyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCNkRDODE5
MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I2REM4MTcy
NTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0I3MzEx
RkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCNzMxMUZBMjVD
MDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzNjksNyArMjM2
OSw5IEBACiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4
dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0NoZWNrc01hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCNjgwQjgyNUJBMUJF
NDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAyMTAwMzg2NTlFIC8qIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRH
TENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJN0JEREEzMzIyNzUwRkNDRDAwMzg2NTlFIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRH
TC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JEREEz
MzAyNzUwRkNDQzAwMzg2NTlFIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCRERBMzI3Mjc1
MEUwNjgwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkREQTMyNTI3NTBFMDY3MDAzODY1OUUg
LyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTdCRERBMzJBMjc1MEVBMEYwMDM4NjU5RSAvKiBXZWJQcm9j
ZXNzR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdCRERBMzI4Mjc1MEVBMEUwMDM4NjU5RSAvKiBXZWJQcm9jZXNzR3JhcGhp
Y3NDb250ZXh0R0wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3QkREQTMyQjI3NTBFQTBGMDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JEREEz
MjkyNzUwRUEwRTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkU3NDI3MzgxRkE5MDZG
QkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NW
R0dyYXBoaWNzRWxlbWVudC5oICovOyB9OwogCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyog
Q29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzE4NDNGRTFDOEI3MjgzMDAy
RUI5NzMgLyogQXV0b2ZpbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDMTg0M0ZDMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTA3MSw4ICsxMTA3
Myw4IEBACiAJCTdBRjlCMjA5MThDRkI1RjIwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QUY5QjIwQTE4Q0ZCNUYzMDBDNjRCRUYgLyogSlNWVFRSZWdpb25M
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVlRUUmVnaW9u
TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBCMThDRkI1RjMw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNWVFRSZWdpb25MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdC
MTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBoaWNz
Q29udGV4dEdMQ1ZBTkdMRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QjEwMzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250
ZXh0R0xDVi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTENWLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTYxOTEwMjcxOTg4MEUwMEM0MEVBQyAvKiBXZWJQcm9j
ZXNzR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBy
b2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QjZEQzgxNTI1NzEyRTkxMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZh
Y2VTd2FwQ2hhaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3Jh
cGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTEwOTEsNyArMTEwOTMsOSBAQAogCQk3QkNENDJEQzI3MDVDOTQ5MDBFQjIx
MjcgLyogQU5HTEVVdGlsaXRpZXNDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGll
c0NvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCRERBMzFDMjc0RjlEQTQw
MDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRHTENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0JEREEzMUQyNzRGOURBNTAwMzg2NTlFIC8qIEdyYXBoaWNz
Q29udGV4dEdMQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QkREQTMz
MDI3NTBGQ0NDMDAzODY1OUUgLyogV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTC5o
OyBwYXRoID0gcGxhdGZvcm0vZ3JhcGhpY3MvV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMLmg7
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJN0JEREEzMjUyNzUwRTA2NzAwMzg2NTlF
IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QkREQTMyODI3NTBFQTBFMDAzODY1OUUgLyogV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4
dEdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NHcmFwaGlj
c0NvbnRleHRHTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkREQTMyOTI3NTBF
QTBFMDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdCRTcyNjVCMjU3NjNCOEQwMEU4NUQ5OCAvKiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
MDExRjNEMjRGQUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5ncy5jcHAuZXJiICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNldHRpbmdz
LmNwcC5lcmI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDExRjNFMjRGQUQzNjAw
MDVCRUYxMCAvKiBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcC5lcmIgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5jcHAuZXJiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjM1MTEsNiArMjM1MTUsNyBAQAogCQkJCTI3RTNDODA2MjU3RjVFNkUwMEM5ODZBQiAvKiBB
TkdMRUhlYWRlcnMuaCAqLywKIAkJCQk3QkNENDJEODI3MDU5OUVGMDBFQjIxMjcgLyogQU5HTEVV
dGlsaXRpZXMuY3BwICovLAogCQkJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0
aWxpdGllcy5oICovLAorCQkJCTdCRERBMzI1Mjc1MEUwNjcwMDM4NjU5RSAvKiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmggKi8sCiAJCQkJNkUyN0YyNDMyMjlDOUY4NDAwRjFGNjMyIC8qIEV4dGVu
c2lvbnNHTEFOR0xFLmNwcCAqLywKIAkJCQk2RTI3RjI0NDIyOUM5RjhEMDBGMUY2MzIgLyogRXh0
ZW5zaW9uc0dMQU5HTEUuaCAqLywKIAkJCQk2RTI3RjI0MjIyOThDRTRCMDBGMUY2MzIgLyogR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgKi8sCkBAIC0yNzg5Miw2ICsyNzg5Nyw4IEBACiAJCUIy
QTAxNTkxMEFGNkNENTMwMDZCQ0UwRSAvKiBncmFwaGljcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0JEREEzMjkyNzUwRUEwRTAwMzg2NTlFIC8qIEdy
YXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKKwkJCQk3QkREQTMyODI3NTBFQTBFMDAzODY1OUUg
LyogV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMLmggKi8sCiAJCQkJNkUyN0YyNDEyMjk4Q0Uy
RTAwRjFGNjMyIC8qIGFuZ2xlICovLAogCQkJCTA3NkYwRDA4MTJCODE5MjcwMEMyNkFBNCAvKiBh
dmZvdW5kYXRpb24gKi8sCiAJCQkJNDk5QjNFQzAxMjhDQ0MxODAwRTcyNkMyIC8qIGNhICovLApA
QCAtMjk0NjAsOCArMjk0NjcsOCBAQAogCQkJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBD
VlV0aWxpdGllcy5oICovLAogCQkJCTdCOEVENUVGMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxp
dGllcy5tbSAqLywKIAkJCQk3QjEwMzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250
ZXh0R0xDVi5oICovLAotCQkJCTdCMTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEUuY3BwICovLAotCQkJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBH
cmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCAqLywKKwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMx
QUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3
MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FF
NEUyMkE5ODY4NzAwOTQ3RkY5IC8qIEltYWdlUm90YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlD
RDI3QUU0RjIyQTk4Njg3MDA5NDdGRjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywK
IAkJCQkwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5o
ICovLApAQCAtMzI3MDEsNiArMzI3MDgsNyBAQAogCQkJCTJFREVGMUY1MTIxQjBFRkMwMDcyNkRC
MiAvKiBCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFREVGMUY3MTIxQjBFRkMw
MDcyNkRCMiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRUI0QkNE
MzEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3QkREQTMyQTI3NTBFQTBGMDAzODY1OUUgLyogV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4
dEdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM3RjEyMkI4QTNEMDAxRkQxRjcgLyogQmxv
YlVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE1Q0ZBNkUyMDhBRkFCNzAwMUU2OTkxIC8qIEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ3ODYzNTY1MjY1MDdB
MzgwMEM1RTJFMCAvKiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMjg3OSw2ICszMjg4Nyw3IEBACiAJCQkJMjZFOTQ0RDkxQUM0QjJERDAwN0I4NUI1IC8qIENv
bWJpbmVkVVJMRmlsdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NEZFMzUxODY0RDVBRjAw
ODQzQjEwIC8qIENvbW1hbmRMaW5lQVBJSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NEZF
MkMxODYzODcwRjAwODQzQjEwIC8qIENvbW1hbmRMaW5lQVBJTW9kdWxlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3QkREQTMyNzI3NTBFMDY4MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdM
RS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NEZFMjYxODYzN0RBQjAwODQzQjEwIC8qIENvbW1h
bmRMaW5lQVBJTW9kdWxlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBMjA5OURG
MDI3MDA5MEQ3ODEgLyogQ29tbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTdFNjY0RkMxRTcz
NzAzMzAwNzY1NTM2IC8qIENvbW1vbkNyeXB0b0RFUlV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMzcwOSw3ICszMzcxOCw3IEBACiAJCQkJN0MzMzBBMDIxREY4RkFDNjAwRDMzOTVDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0JEREEz
MUYyNzRGQTAyMTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdCMTAzMzlFMjU0OTcyMTcwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENW
LmggaW4gSGVhZGVycyAqLywKLQkJCQk3QjEwMzM5RjI1NDk3MjFFMDBDOEMxQUMgLyogR3JhcGhp
Y3NDb250ZXh0R0xDVkFOR0xFLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QjEwMzM5RjI1NDk3MjFF
MDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3QkIzNEE0ODI1Mzc3NkNBMDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0I2REM4MTkyNTcxMkU5MjAwMzgwQzcwIC8qIEdy
YXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OUM3QjlGQzEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzcwNDQsNiArMzcwNTMsNyBAQAogCQkJCUUxRUU4Qjk2MjQxMzE5NTAw
MEU3OTRENiAvKiBXZWJYUlZpZXdwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RFMDEy
NTFGMTJEMDAzRUYyNjkgLyogV2Vla0lucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUw
MzFCNTEwQTQ0RUZDNzAwRjk5MkUwIC8qIFdoZWVsRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdCRERBMzJCMjc1MEVBMEYwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRUJCQzNEODFCNjU5ODgzMDBGNTI1M0QgLyogV2hlZWxFdmVudERl
bHRhRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTlCNUQ4RjFCNjZBOTRFMDA4QzZBMjQg
LyogV2hlZWxFdmVudERlbHRhRmlsdGVyTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUUzMzVG
MjFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9yLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEdMLmNwcAppbmRleCA3ZjJhMWZkMjhiMzEyOGYwZGU3YTcxMjVlM2RjYzZjOWNiYzhk
Y2E0Li5kNjBjMzdhOWZmZTVjMmNiZTAzNjZlMjc2ZDg0ODg2NjViZDZlMjBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wu
Y3BwCkBAIC0zNTEsMTYgKzM1MSw2IEBAIEdyYXBoaWNzQ29udGV4dEdMOjpDbGllbnQ6OkNsaWVu
dCgpID0gZGVmYXVsdDsKIAogR3JhcGhpY3NDb250ZXh0R0w6OkNsaWVudDo6fkNsaWVudCgpID0g
ZGVmYXVsdDsKIAotUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMPiBHcmFwaGljc0NvbnRleHRHTDo6
Y3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cmlidXRlcywgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdykKLXsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0w+IHJl
c3VsdDsKLSAgICBpZiAoaG9zdFdpbmRvdykKLSAgICAgICAgcmVzdWx0ID0gaG9zdFdpbmRvdy0+
Y3JlYXRlR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcyk7Ci0gICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUoYXR0cmlidXRl
cywgaG9zdFdpbmRvdyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogR3JhcGhpY3NDb250ZXh0
R0w6OkdyYXBoaWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRycykK
ICAgICA6IG1fYXR0cnMoYXR0cnMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAppbmRleCA2NDFiN2I2YWMzZWIwNTU0Nzkx
N2Q2YTNmYmVhMDkyYWI3Y2RjN2MwLi4yOGY1YmNhMDljY2ZlMmZmNTJiMzgxN2EwNGQyYjhmZWQ1
YTI2MDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMLmgKQEAgLTkxMSwxMCArOTExLDYgQEAgcHVibGljOgogICAgICAgICBH
Q0dMaW50IHNpemU7CiAgICAgfTsKIAotICAgIC8vIENyZWF0ZXMgYSBHcmFwaGljc0NvbnRleHRH
TCBpbnN0YW5jZSB0byByZW5kZXIgaW50byBvZmZzY3JlZW4gZGVzdGluYXRpb24gaW4gY29udGV4
dCBvZiBIb3N0V2luZG93LgotICAgIC8vIEhvc3RXaW5kb3cgbWlnaHQgYWZmZWN0IHRoZSBkZWNp
c2lvbiB3aGljaCBiYWNrZW5kIGlzIHRvIGJlIHVzZWQuCi0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTD4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYsIEhvc3RXaW5kb3cqKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBo
aWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0woKTsKIApAQCAtMTM1NSw2ICsxMzUxLDcg
QEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MuCiAgICAgc3RhdGlj
IGJvb2wgcGFja0ltYWdlRGF0YShJbWFnZSosIGNvbnN0IHZvaWQqIHBpeGVscywgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBBbHBoYU9wLCBEYXRhRm9ybWF0IHNv
dXJjZUZvcm1hdCwgdW5zaWduZWQgc291cmNlSW1hZ2VXaWR0aCwgdW5zaWduZWQgc291cmNlSW1h
Z2VIZWlnaHQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLCBpbnQgZGVw
dGgsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgaW50IHVucGFja0ltYWdlSGVpZ2h0
LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZv
aWQgcGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmLCBQaXhl
bEJ1ZmZlciYmLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmKTsK
IHByb3RlY3RlZDoKICAgICBpbnQgbV9jdXJyZW50V2lkdGggeyAwIH07CiAgICAgaW50IG1fY3Vy
cmVudEhlaWdodCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDVlOGE1ZGU3
YjJmNGEwNTYyZDFjNmI4NDgzYjRkN2U5Y2VlMWRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oCkBAIC0w
LDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0cnVjdCBHcmFwaGljc0NvbnRleHRHTFN0YXRlIHsKKyAgICBHQ0dMdWludCBib3VuZFJl
YWRGQk8geyAwIH07CisgICAgR0NHTHVpbnQgYm91bmREcmF3RkJPIHsgMCB9OworICAgIEdDR0xl
bnVtIGFjdGl2ZVRleHR1cmVVbml0IHsgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUwIH07CisK
KyAgICB1c2luZyBCb3VuZFRleHR1cmVNYXAgPSBIYXNoTWFwPEdDR0xlbnVtLAorICAgICAgICBz
dGQ6OnBhaXI8R0NHTHVpbnQsIEdDR0xlbnVtPiwKKyAgICAgICAgSW50SGFzaDxHQ0dMZW51bT4s
CisgICAgICAgIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LAor
ICAgICAgICBQYWlySGFzaFRyYWl0czxXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4+
CisgICAgPjsKKyAgICBCb3VuZFRleHR1cmVNYXAgYm91bmRUZXh0dXJlTWFwOworICAgIEdDR0x1
aW50IGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBib3VuZFRleHR1cmUoYWN0
aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTHVpbnQgYm91bmRUZXh0dXJlKEdDR0xlbnVtIHRl
eHR1cmVVbml0KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4
dHVyZU1hcC5maW5kKHRleHR1cmVVbml0KTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5k
VGV4dHVyZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuZmly
c3Q7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEdDR0x1aW50IGN1cnJlbnRCb3Vu
ZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGFyZ2V0KGFjdGl2ZVRleHR1cmVVbml0KTsg
fQorICAgIEdDR0xlbnVtIGJvdW5kVGFyZ2V0KEdDR0xlbnVtIHRleHR1cmVVbml0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1
cmVVbml0KTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4dHVyZU1hcC5lbmQoKSkK
KyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuc2Vjb25kOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICB2b2lkIHNldEJvdW5kVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJl
VW5pdCwgR0NHTHVpbnQgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0KQorICAgIHsKKyAgICAgICAg
Ym91bmRUZXh0dXJlTWFwLnNldCh0ZXh0dXJlVW5pdCwgc3RkOjptYWtlX3BhaXIodGV4dHVyZSwg
dGFyZ2V0KSk7CisgICAgfQorCisgICAgdXNpbmcgVGV4dHVyZVNlZWRDb3VudCA9IEhhc2hDb3Vu
dGVkU2V0PEdDR0x1aW50LCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czxHQ0dMdWludD4+OworICAgIFRleHR1cmVTZWVkQ291bnQgdGV4dHVyZVNl
ZWRDb3VudDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKaW5kZXgg
Nzg5ZmU2YjUwNjg0Yjg2ZTZmMGZiNWVlMWFjMzk4OTk1NTc5MTFjNi4uNGQ0NTMyMDI5MThkMzc1
NmY4Yzc1YTNhMDM3MzQ2ODM5NjQwZmQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcApAQCAt
MjksMTEgKzI5LDExIEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMQU5HTEUuaCIKIAogI2luY2x1
ZGUgIkFOR0xFSGVhZGVycy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25zR0xBTkdMRShHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogY29udGV4dCkKK0V4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25zR0xBTkdM
RShHcmFwaGljc0NvbnRleHRHTEFOR0xFKiBjb250ZXh0KQogICAgIDogbV9pbml0aWFsaXplZEF2
YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lv
bnNHTEFOR0xFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRl
bnNpb25zR0xBTkdMRS5oCmluZGV4IDBhNjFlZmMwOTZjMWNmZWNhOTk5M2Y5ZWNhZjFhYzc3MmI4
NWE2NmUuLmM5NzhlMmY5ZjY0YjlmNjE1YzNiM2E4NWM0M2EzY2EwNTRlZDc1Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5z
aW9uc0dMQU5HTEUuaApAQCAtMzIsMTMgKzMyLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CitjbGFzcyBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOwogCiBjbGFzcyBFeHRlbnNpb25zR0xBTkdMRSA6IHB1YmxpYyBFeHRlbnNpb25zR0wg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIC8vIFRoaXMgY2xh
c3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wgaW1wbGVtZW50YXRpb25zLgotICAgIGV4cGxpY2l0IEV4dGVuc2lvbnNHTEFOR0xFKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKik7CisgICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHRHTEFOR0xFIGltcGxlbWVudGF0aW9ucy4K
KyAgICBleHBsaWNpdCBFeHRlbnNpb25zR0xBTkdMRShHcmFwaGljc0NvbnRleHRHTEFOR0xFKik7
CiAgICAgdmlydHVhbCB+RXh0ZW5zaW9uc0dMQU5HTEUoKTsKIAogICAgIC8vIEV4dGVuc2lvbnNH
TCBtZXRob2RzLgpAQCAtNjQsOCArNjQsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8U3RyaW5n
PiBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9uczsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9lbmFibGVk
RXh0ZW5zaW9uczsKIAotICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLgotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBtX2NvbnRleHQ7CisgICAg
Ly8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS4KKyAgICBHcmFw
aGljc0NvbnRleHRHTEFOR0xFKiBtX2NvbnRleHQ7CiAKICAgICAvLyBXaGV0aGVyIHRoZSBXZWJH
TCAxLjAtcmVsYXRlZCBmbG9hdGluZy1wb2ludCByZW5kZXJhYmlsaXR5IGV4dGVuc2lvbnMgaGF2
ZSBiZWVuIGVuYWJsZWQuCiAgICAgYm9vbCBtX3dlYmdsQ29sb3JCdWZmZXJGbG9hdFJHQiB7IGZh
bHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4IGZhNjA1NGNmOTVk
MTJjOTU3N2QxNDhiY2Q0MDQwZGZhMmI3YTUwOWMuLjY1MjNmZmMwYTk4MmMwZTk5OWQ3YmVmNDI5
NzUxOWFkNGQ5ZmI3YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC0y
NywxMiArMjcsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVOQUJMRShXRUJHTCkg
JiYgVVNFKEFOR0xFKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCiAj
aW5jbHVkZSAiQU5HTEVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNDAsMTkgKzQwLDE0
IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5o
IgogI2luY2x1ZGUgIlRlbXBvcmFyeUFOR0xFU2V0dGluZy5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWlu
dDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y3N0cmlu
Zz4KLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4K
LSNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0KICNpZiBFTkFC
TEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmgiCiAjZW5k
aWYKIAogLy8gVGhpcyBvbmUgZGVmaW5pdGlvbiBzaG9ydC1jaXJjdWl0cyB0aGUgbmVlZCBmb3Ig
Z2wyZXh0LmgsIHdoaWNoCkBAIC03Niw4ICs3MSw3IEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBoYUNo
YW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4
CiB9CiAjZW5kaWYKIAotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2lu
Z0J1ZmZlclRleHR1cmVUYXJnZXQoKQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKQogewogICAgIGlmIChtX2RyYXdpbmdCdWZmZXJU
ZXh0dXJlVGFyZ2V0ID09IC0xKQogICAgICAgICBFR0xfR2V0Q29uZmlnQXR0cmliKHBsYXRmb3Jt
RGlzcGxheSgpLCBwbGF0Zm9ybUNvbmZpZygpLCBFR0xfQklORF9UT19URVhUVVJFX1RBUkdFVF9B
TkdMRSwgJm1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQpOwpAQCAtOTMsNyArODcsNyBAQCBH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQoKQogICAgIHJldHVybiAwOwogfQogCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVu
dW0gZHJhd2luZ1RhcmdldCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdp
bmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdp
bmdUYXJnZXQpCiB7CiAgICAgc3dpdGNoIChkcmF3aW5nVGFyZ2V0KSB7CiAgICAgY2FzZSBURVhU
VVJFXzJEOgpAQCAtMTA1LDcgKzk5LDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2UKICAgICBy
ZXR1cm4gLTE7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkVHTERyYXdp
bmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFy
Z2V0KQorR0NHTGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpFR0xEcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldEZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAg
ICBzd2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMTcs
NyArMTExLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1
ZmZlclRleHR1cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KEcKICAgICByZXR1cm4gMDsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFzZVRocmVhZFJlc291cmNlcyhSZWxl
YXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNlQmVoYXZpb3IpCitib29sIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFzZVRocmVhZFJlc291
cmNlQmVoYXZpb3IgcmVsZWFzZUJlaGF2aW9yKQogewogICAgIHBsYXRmb3JtUmVsZWFzZVRocmVh
ZFJlc291cmNlcygpOwogCkBAIC0xNjEsNyArMTU1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVsZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhh
dmkKICAgICByZXR1cm4gRUdMX1JlbGVhc2VUaHJlYWQoKTsKIH0KIAotc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJl
c3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCiB7CiAgICAgUGl4ZWxCdWZmZXJGb3JtYXQg
Zm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07CiAgICAgYXV0byBw
aXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBnZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpKTsKQEAgLTE4NywxNCArMTgxLDE0IEBAIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1
bHRzKCkKICAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZhbGlkYXRlQXR0cmlidXRlcygpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnZhbGlkYXRlQXR0cmlidXRlcygpCiB7CiAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0g
Y29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSA/IEdMX1JHQkE4IDogR0xfUkdCODsKIAogICAgIHZh
bGlkYXRlRGVwdGhTdGVuY2lsKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbk5hbWUpOwogfQog
Ci1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXpl
JiBzaXplKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRkJPcyhjb25zdCBJ
bnRTaXplJiBzaXplKQogewogICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwog
ICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKQEAgLTI3NCw3ICsyNjgsNyBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBz
aXplKQogICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGlu
dGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVk
KEdMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQogewogICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogCkBAIC0zMDAsNyAr
Mjk0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoRGVwdGhBbmRTdGVu
Y2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmEKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzb2x2ZU11bHRp
c2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIFRlbXBvcmFy
eUFOR0xFU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwog
ICAgIFRlbXBvcmFyeUFOR0xFU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxT
RSk7CkBAIC0zMzEsNyArMzI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
b2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWMKICAgICAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgYm91bmRGcmFtZUJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZW5kZXJidWZm
ZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMzksMTQgKzMzMywxNCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gaW50ZQogICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXJ2KEdDR0xlbnVtIHBuYW1l
LCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVnZXJ2Um9idXN0QU5HTEUocG5h
bWUsIHZhbHVlLmJ1ZlNpemUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0NHTGVudW0gc2hh
ZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48R0NHTGludCwgMj4gcmFu
Z2UsIEdDR0xpbnQqIHByZWNpc2lvbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0xlbnVtIHByZWNp
c2lvblR5cGUsIEdDR0xTcGFuPEdDR0xpbnQsIDI+IHJhbmdlLCBHQ0dMaW50KiBwcmVjaXNpb24p
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MzU0LDcgKzM0OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMCiAgICAgZ2w6OkdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZS5kYXRhLCBw
cmVjaXNpb24pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVs
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYg
KCFtX2lzRm9yV2ViR0wyKQogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IHN0YXRpY19jYXN0PEV4
dGVuc2lvbnNHTEFOR0xFJj4oZ2V0RXh0ZW5zaW9ucygpKS5hZGp1c3RXZWJHTDFUZXh0dXJlSW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSk7CkBAIC0zNjQsMTIgKzM1
OCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudQogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogICAgIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAg
ICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGludCB4b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2ZmLCBHQ0dMaW50IHlvZmYs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM3OSwxMiArMzczLDEy
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQpLCAwKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGlu
dCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBk
YXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTM5MywxMiArMzg3LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBy
ZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHCiAgICAgbV9zdGF0
ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29t
cHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGNvbXBy
ZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgR0NHTHZvaWQqPihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVs
LCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBp
bnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRh
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTQwNywxMiArNDAxLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsCiAgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0
KQogewogICAgIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBH
Q0dMY2xhbXBmIHpGYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2Uo
R0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQyMCw3ICs0MTQsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xj
bGFtcGYgekZhcikKICAgICBnbDo6RGVwdGhSYW5nZWYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpOZWFy
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpGYXIpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJEZXB0aChHQ0dMY2xhbXBmIGRlcHRoKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDI4LDI0ICs0MjIsMjQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChHQ0dMY2xhbXBmIGRlcHRo
KQogICAgIGdsOjpDbGVhckRlcHRoZihzdGF0aWNfY2FzdDxmbG9hdD4oZGVwdGgpKTsKIH0KIAot
RXh0ZW5zaW9uc0dMJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCitF
eHRlbnNpb25zR0wmIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEV4dGVuc2lvbnMoKQogewog
ICAgIGlmICghbV9leHRlbnNpb25zKQogICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVl
PEV4dGVuc2lvbnNHTEFOR0xFPih0aGlzKTsKICAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKIHsKICAgICByZWFkblBpeGVsc0ltcGwoeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmJ1ZlNpemUsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIsIGRhdGEuZGF0YSwgZmFsc2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkblBp
eGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQog
ewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IDAsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0NHTHZvaWQq
PihvZmZzZXQpLCB0cnVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMsIEdDR0xzaXplaSog
cm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZmZXJPYmplY3QpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkqIGxlbmd0aCwg
R0NHTHNpemVpKiBjb2x1bW5zLCBHQ0dMc2l6ZWkqIHJvd3MsIEdDR0x2b2lkKiBkYXRhLCBib29s
IHJlYWRpbmdUb1BpeGVsQnVmZmVyT2JqZWN0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4Miw5ICs0NzYsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGludCB4LCBHQ0dMaW50IHksIEdD
R0xzaXplaSB3aQogI2VuZGlmCiB9CiAKLS8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvbW1vbiBmb2xsb3csIHBvcnRlZCB0byB1c2UgQU5HTEUuCisvLyBUaGUgY29u
dGVudHMgb2YgR3JhcGhpY3NDb250ZXh0R0xBTkdMRUNvbW1vbiBmb2xsb3csIHBvcnRlZCB0byB1
c2UgQU5HTEUuCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhT
dGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQogewogICAgIEV4dGVuc2lvbnNHTCYgZXh0ZW5zaW9u
cyA9IGdldEV4dGVuc2lvbnMoKTsKICAgICAvLyBGSVhNRTogU2luY2UgdGhlIGNvbnN0cnVjdG9y
cyBvZiB2YXJpb3VzIHBsYXRmb3JtcyBhcmUgbm90IHNoYXJlZCwgd2UgaW5pdGlhbGl6ZSB0aGlz
IGhlcmUuCkBAIC01MjIsNyArNTE2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2kKICAgICB9
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZVRleHR1cmUoKQogewogICAgIGlmICht
X2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTMzLDcgKzUyNyw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKCkKICAgICBwcmVwYXJl
VGV4dHVyZUltcGwoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFy
ZVRleHR1cmVJbXBsKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZVRleHR1
cmVJbXBsKCkKIHsKICAgICBBU1NFUlQoIW1fbGF5ZXJDb21wb3NpdGVkKTsKIApAQCAtNTc2LDcg
KzU3MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1w
bCgpCiAjZW5kaWYKIH0KIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKIHsK
ICAgICBTY29wZWRSZXN0b3JlUmVhZEZyYW1lYnVmZmVyQmluZGluZyBmYm9CaW5kaW5nKG1faXNG
b3JXZWJHTDIsIG1fc3RhdGUuYm91bmRSZWFkRkJPKTsKICAgICBpZiAoY29udGV4dEF0dHJpYnV0
ZXMoKS5hbnRpYWxpYXMpIHsKQEAgLTU4Nyw3ICs1ODEsNyBAQCBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQog
ICAgIHJldHVybiByZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsK
ICAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhl
aWdodCkKICAgICAgICAgcmV0dXJuOwpAQCAtNjczLDcgKzY2Nyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGdsOjpG
bHVzaCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJl
KEdDR0xlbnVtIHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmFjdGl2ZVRl
eHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC02ODIsNyArNjc2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogICAgIGdsOjpBY3Rp
dmVUZXh0dXJlKHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjph
dHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YXR0YWNoU2hhZGVyKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJU
KHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwpAQCAtNjkyLDcgKzY4Niw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIFBsYXRmb3JtR0xPCiAgICAgZ2w6OkF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBu
YW1lKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1l
KQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtNzAxLDcgKzY5NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1CiAgICAgZ2w6OkJp
bmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzA5
LDcgKzcwMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlCiAgICAgZ2w6OkJpbmRCdWZmZXIo
dGFyZ2V0LCBidWZmZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
RnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzMwLDcgKzcyNCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZl
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTczOSw3ICs3MzMsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRh
cmdldCwgUGxhdGZvcm1HTE9iamVjdAogfQogCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03NDgsNyArNzQyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHQKICAgICBnbDo6QmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwg
R0NHTGNsYW1wZiBncmVlbiwgR0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dM
Y2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzU2LDcgKzc1
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1w
ZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjCiAgICAgZ2w6OkJsZW5kQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03NjQsNyArNzU4LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQogICAgIGdsOjpC
bGVuZEVxdWF0aW9uKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhh
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NH
TGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc3Myw3ICs3NjcsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9k
ZVJHQiwgR0NHTGVudW0gbQogfQogCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVudW0gZGZh
Y3RvcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC03ODEsNyArNzc1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRG
dW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCiAgICAgZ2w6OkJsZW5kRnVu
YyhzZmFjdG9yLCBkZmFjdG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xl
bnVtIHNyY0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6YmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0Is
IEdDR0xlbnVtIHNyY0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03ODksNyArNzgzLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVudW0gc3Jj
UkdCLCBHQ0dMZW51bSBkc3RSR0IKICAgICBnbDo6QmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBk
c3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NH
TGVudW0gdXNhZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlckRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzk3LDcgKzc5
MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHCiAgICAgZ2w6OkJ1ZmZlckRhdGEodGFyZ2V0
LCBzaXplLCAwLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1
ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSwg
R0NHTGVudW0gdXNhZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlckRhdGEo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSwgR0NHTGVudW0g
dXNhZ2UpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtODA1LDcgKzc5OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZl
ckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pCiAgICAgZ2w6OkJ1
ZmZlckRhdGEodGFyZ2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSwgdXNhZ2UpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTgxMyw3ICs4
MDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsCiAgICAgZ2w6OkJ1ZmZlclN1YkRhdGEodGFy
Z2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnRwdHIgb2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MjUsNyArODE5LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnRwdHIgb2Zmc2UKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVU
YXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NH
THNpemVpcHRyIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlCdWZmZXJT
dWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50
cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXpl
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTgzMywxNCArODI3LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyCiAgICAgZ2w6OkNvcHlC
dWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9m
ZnNldCwgc2l6ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVy
bmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
TGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IGRhdGEpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGds
OjpHZXRJbnRlcm5hbGZvcm1hdGl2Um9idXN0QU5HTEUodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
cG5hbWUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTg0OCw3ICs4NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBH
QwogICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZl
bHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN0b3JhZ2UyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODU3LDcgKzg1MSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXpl
aSBsZXZlbHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTg2Niw3
ICs4NjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQwogICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxl
dmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6
ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NH
TFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04NzQsMTIgKzg2OCwxMiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVs
LCBpbnQgaW50ZXJuYQogICAgIGdsOjpUZXhJbWFnZTNEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzLmJ1ZlNpemUsIHBpeGVscy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAg
ICB0ZXhJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9j
YXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBp
bnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBp
bnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTg4NywxMiArODgxLDEyIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwsIGludCB4b2ZmCiAgICAgZ2w6OlRleFN1YkltYWdlM0RSb2J1c3RBTkdM
RSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6ZSwgcGl4ZWxzLmRhdGEpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRh
cmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgdGV4U3ViSW1hZ2UzRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0
aCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNz
ZWRUZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVw
dGgsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTkwMCwxMiArODk0LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHCiAgICAg
Z2w6OkNvbXByZXNzZWRUZXhJbWFnZTNEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNp
emVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9m
ZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRl
ciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJl
c3NlZFRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50
IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZz
ZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTkxMywxMiArOTA3LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsCiAgICAg
Z2w6OkNvbXByZXNzZWRUZXhTdWJJbWFnZTNEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgaW1h
Z2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50
IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBp
bnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgbWFrZUdDR0xTcGFu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQpLCAwKSk7CiB9CiAKLVZl
Y3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3Jt
SW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCitWZWN0b3I8R0NHTGludD4gR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25z
dCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCiB7CiAg
ICAgVmVjdG9yPEdDR0xpbnQ+IHJlc3VsdCh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOwogICAg
IEFTU0VSVChwcm9ncmFtKTsKQEAgLTkyOSw3ICs5MjMsNyBAQCBWZWN0b3I8R0NHTGludD4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKK0dDR0xlbnVt
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0g
dGFyZ2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBHTF9JTlZBTElEX09QRVJBVElPTjsKQEAgLTkzNyw3ICs5MzEsNyBAQCBHQ0dMZW51bSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJn
ZXQpCiAgICAgcmV0dXJuIGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBH
Q0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjbGVhckNvbG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dM
Y2xhbXBmIGIsIEdDR0xjbGFtcGYgYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC05NDUsNyArOTM5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNs
YW1wZgogICAgIGdsOjpDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTU0LDcgKzk0OCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQogICAg
IGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyU3RlbmNpbChHQ0dMaW50IHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFy
U3RlbmNpbChHQ0dMaW50IHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtOTYyLDcgKzk1Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyU3RlbmNpbChHQ0dMaW50IHMpCiAgICAgZ2w6OkNsZWFyU3RlbmNpbChzKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFu
IHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29sZWFuIGFs
cGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb2xvck1hc2soR0NHTGJvb2xlYW4g
cmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxw
aGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtOTcwLDcgKzk2NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFz
ayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMCiAgICAgZ2w6OkNvbG9y
TWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTk4OCw3ICs5ODIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
aWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogI2VuZGlmCiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXBpbGVTaGFkZXJEaXJl
Y3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTk5Nyw3ICs5OTEsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyKQogICAgIGdsOjpDb21waWxlU2hhZGVyKHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50
IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTAwNSw3ICs5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFn
ZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgRwogICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleEltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTAyMiw3ICsxMDE2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0cKICAgICAg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlclRhcmdldCwgbV9tdWx0aXNhbXBsZUZC
Tyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTAzOSw3ICsxMDMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLAogICAgICAg
ICBnbDo6QmluZEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJP
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0g
bW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3VsbEZhY2UoR0NHTGVudW0gbW9k
ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0xMDQ3LDcgKzEwNDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFj
ZShHQ0dMZW51bSBtb2RlKQogICAgIGdsOjpDdWxsRmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoRnVuYyhHQ0dMZW51bSBmdW5jKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNTUsNyArMTA0OSw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBmdW5j
KQogICAgIGdsOjpEZXB0aEZ1bmMoZnVuYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDYzLDcgKzEwNTcsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKICAg
ICBnbDo6RGVwdGhNYXNrKGZsYWcpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGV0YWNoU2hhZGVyKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNT
RVJUKHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwpAQCAtMTA3Myw3ICsxMDY3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KICAgICBnbDo6RGV0YWNoU2hhZGVyKHByb2dyYW0sIHNo
YWRlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVu
dW0gY2FwKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNhYmxlKEdDR0xlbnVtIGNh
cCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0xMDgxLDcgKzEwNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxl
KEdDR0xlbnVtIGNhcCkKICAgICBnbDo6RGlzYWJsZShjYXApOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShH
Q0dMdWludCBpbmRleCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xMDg5LDcgKzEwODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiAgICAgZ2w6OkRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNp
emVpIGNvdW50KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKEdDR0xl
bnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDk4LDcgKzEwOTIsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUs
IEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaQogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNp
emVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTA3LDcgKzExMDEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZQogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJsZShHQ0dMZW51bSBjYXApCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTExNSw3ICsxMTA5
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkK
ICAgICBnbDo6RW5hYmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTIz
LDcgKzExMTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoaW5kZXgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmaW5pc2goKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMzEsNyArMTEyNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCiAgICAgZ2w6OkZpbmlzaCgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmbHVzaCgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmZsdXNoKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xMTM5LDcgKzExMzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmbHVzaCgpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBH
Q0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNDcs
NyArMTE0MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0KICAgICBnbDo6RnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZl
cik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1Niw3ICsxMTUwLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBhdHQKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJv
bnRGYWNlKEdDR0xlbnVtIG1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250
RmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTExNjQsNyArMTE1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQogICAgIGdsOjpGcm9udEZhY2UobW9k
ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdD
R0xlbnVtIHRhcmdldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2VuZXJhdGVNaXBt
YXAoR0NHTGVudW0gdGFyZ2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTExNzIsNyArMTE2Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKICAgICBnbDo6R2VuZXJh
dGVNaXBtYXAodGFyZ2V0KTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4
LCBBY3RpdmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3Rp
dmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKElOVkFMSURfVkFMVUUpOwpAQCAtMTE5NywxMiArMTE5MSwxMiBAQCBib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAgcmV0dXJuIGdldEFjdGl2ZUF0dHJpYklt
cGwocHJvZ3JhbSwgaW5kZXgsIGluZm8pOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKQEAgLTEyMjgsMTIgKzEyMjIsMTIg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0cKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAgcmV0dXJuIGdldEFj
dGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTHNpemVpIG1heENvdW50LCBHQ0dMc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybUdMT2Jq
ZWN0KiBzaGFkZXJzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRhY2hlZFNo
YWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xz
aXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCiB7CiAgICAgaWYgKCFwcm9n
cmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwpAQCAtMTI0
NSw3ICsxMjM5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHMKICAgICBnbDo6R2V0QXR0YWNo
ZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7CiB9CiAKLWludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJp
bmcmIG5hbWUpCiB7CiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0x
MjU3LDEyICsxMjUxLDEyIEBAIGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmli
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTCiAgICAgcmV0dXJuIGds
OjpHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1p
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoraW50IEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIHJldHVybiBnZXRBdHRyaWJMb2NhdGlv
bihwcm9ncmFtLCBuYW1lKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92
ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjgzLDcgKzEyNzcsNyBA
QCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKQogICAgIHJldHVybiBtb3ZlZEFuRXJyb3I7CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRFcnJvcigpCiB7CiAgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3lu
dGhldGljIGVycm9yIGxpc3QgaW4gY2FzZQpAQCAtMTI5OSw3ICsxMjkzLDcgQEAgR0NHTGVudW0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKICAgICByZXR1cm4gZ2w6OkdldEVy
cm9yKCk7CiB9CiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdD
R0xlbnVtIG5hbWUpCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3RyaW5nKEdD
R0xlbnVtIG5hbWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwpAQCAtMTMwNyw3ICsxMzAxLDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKICAgICByZXR1cm4gU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmcobmFtZSkpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIG1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzMTUsNyArMTMwOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKQogICAgIGds
OjpIaW50KHRhcmdldCwgbW9kZSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK0dDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQog
ewogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xMzI2LDcg
KzEzMjAsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIo
UGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJc0J1ZmZlcihidWZmZXIp
OwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVkKEdD
R0xlbnVtIGNhcCkKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRW5hYmxl
ZChHQ0dMZW51bSBjYXApCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTMzNCw3ICsxMzI4LDcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCiAgICAgcmV0dXJu
IGdsOjpJc0VuYWJsZWQoY2FwKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKK0dDR0xi
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCBmcmFtZWJ1ZmZlcikKIHsKICAgICBpZiAoIWZyYW1lYnVmZmVyKQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CkBAIC0xMzQ1LDcgKzEzMzksNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVy
KQogICAgIHJldHVybiBnbDo6SXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CiB9CiAKLUdDR0xi
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKQEAgLTEzNTYsNyArMTM1MCw3IEBAIEdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQog
ICAgIHJldHVybiBnbDo6SXNQcm9ncmFtKHByb2dyYW0pOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5k
ZXJidWZmZXIpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1JlbmRlcmJ1
ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKICAgICBpZiAoIXJlbmRlcmJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTM2Nyw3ICsxMzYxLDcgQEAgR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3Jt
R0xPYmplY3QgcmVuZGVyYnVmZmUKICAgICByZXR1cm4gZ2w6OklzUmVuZGVyYnVmZmVyKHJlbmRl
cmJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1No
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIGlmICgh
c2hhZGVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xMzc4LDcgKzEzNzIsNyBAQCBH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCiAgICAgcmV0dXJuIGdsOjpJc1NoYWRlcihzaGFkZXIpOwogfQogCi1HQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmpl
Y3QgdGV4dHVyZSkKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVy
ZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xMzg5LDcgKzEzODMsNyBAQCBHQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
ICAgICByZXR1cm4gZ2w6OklzVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0aCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0aCkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzk3LDcgKzEzOTEsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0IHdpZHRo
KQogICAgIGdsOjpMaW5lV2lkdGgod2lkdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkK
IHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
QEAgLTE0MDYsNyArMTQwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQ
cm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6TGlua1Byb2dyYW0ocHJv
Z3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdD
R0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDE0LDcgKzE0MDgs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBw
bmFtZSwgR0NHTGludCBwYXJhbSkKICAgICBnbDo6UGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxv
YXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NHTGZsb2F0IHVuaXRzKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MjIsNyAr
MTQxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NH
TGZsb2F0IGZhY3RvciwgR0NHTGZsb2F0IHVuaXRzKQogICAgIGdsOjpQb2x5Z29uT2Zmc2V0KGZh
Y3RvciwgdW5pdHMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVD
b3ZlcmFnZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xi
b29sZWFuIGludmVydCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNDMwLDcgKzE0MjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcgog
ICAgIGdsOjpTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpz
Y2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQzOCw3ICsxNDMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Np
c3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0cKICAgICBnbDo6
U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJp
bmcmIHN0cmluZykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2hhZGVyU291cmNlKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBBU1NF
UlQoc2hhZGVyKTsKIApAQCAtMTQ1MSw3ICsxNDQ1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJp
bmcKICAgICBnbDo6U2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNo
YWRlclNvdXJjZUxlbmd0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dM
aW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNDU5LDcgKzE0NTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NH
THVpbnQgbQogICAgIGdsOjpTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZh
Y2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NjcsNyArMTQ2MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTGVudW0gZnVuYywKICAgICBnbDo6U3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNl
LCBmdW5jLCByZWYsIG1hc2spOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpz
dGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NzUsNyArMTQ2OSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCiAgICAgZ2w6OlN0ZW5j
aWxNYXNrKG1hc2spOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
TWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVp
bnQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0xNDgzLDcgKzE0NzcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1hc2spCiAgICAgZ2w6
OlN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NH
TGVudW0genBhc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxPcChHQ0dM
ZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ5MSw3ICsxNDg1LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWws
IEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bQogICAgIGdsOjpTdGVuY2lsT3AoZmFpbCwgemZhaWws
IHpwYXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2Vw
YXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xl
bnVtIHpwYXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsT3BTZXBhcmF0
ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0g
enBhc3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQ5OSw3ICsxNDkzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZmFpbCwgR0MKICAgICBnbDo6
U3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZs
b2F0IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE1MDcsNyArMTUwMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHCiAgICAg
Z2w6OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1
ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0xNTE1LDcgKzE1MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJh
bWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDRwogICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB2MCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNTIzLDcgKzE1MTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogICAgIGdsOjpVbmlm
b3JtMWYobG9jYXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFy
cmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUzMSw3ICsxNTI1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmwKICAgICBnbDo6VW5pZm9ybTFmdihsb2NhdGlvbiwgYXJy
YXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MzksNyArMTUzMyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hCiAgICAgZ2w6OlVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gYXJyYXkpCiB7CiAgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTU0OCw3ICsxNTQyLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmwKICAgICBnbDo6VW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuYnVm
U2l6ZSAvIDIsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEs
IEdDR0xmbG9hdCB2MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNmKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTU1Niw3ICsxNTUwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNm
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9y
bTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2Z2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAgICAgQVNT
RVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTU2NSw3ICsxNTU5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmwKICAgICBnbDo6
VW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYz
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYz
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE1NzMsNyArMTU2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hCiAgICAgZ2w6OlVuaWZv
cm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00ZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAg
ICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCkBAIC0xNTgyLDcgKzE1NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAg
IGdsOjpVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
MWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTkwLDcgKzE1ODQsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCkKICAgICBnbDo6VW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48
Y29uc3QgR0NHTGludD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZv
cm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU5
OCw3ICsxNTkyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW4KICAgICBnbDo6VW5pZm9ybTFp
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYw
LCBHQ0dMaW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjA2LDcgKzE2MDAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGludCB2MCwgR0NHTGludCB2MQogICAgIGdsOjpVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2
MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGludD4gYXJyYXkpCiB7CiAgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTYxNSw3ICsxNjA5LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW4KICAgICBnbDo6VW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXku
YnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwg
R0NHTGludCB2MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYyMyw3ICsx
NjE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEKICAgICBnbDo6VW5pZm9ybTNpKGxvY2F0
aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5i
dWZTaXplICUgMykpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNjMyLDcg
KzE2MjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtM2l2KGxv
Y2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYw
LCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYzKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGlu
dCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjQwLDcgKzE2MzQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCwgR0NHTGludCB2MQogICAgIGdsOjpVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYz
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNjQ5LDcgKzE2NDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjU3LDcgKzE2NTEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYQogICAgIGdsOjpVbmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
YXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA5KSk7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE2NjYsNyArMTY2MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGJvb2xlYW4gdHJhCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGFycmF5
LmJ1ZlNpemUgLyA5LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkp
CiB7CiAgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDE2KSk7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKQEAgLTE2NzUsNyArMTY2OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAx
NiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2ODMs
NyArMTY3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGdsOjpVc2VQcm9ncmFtKHByb2dyYW0pOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZVBy
b2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsK
IApAQCAtMTY5Myw3ICsxNjg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFs
aWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6VmFsaWRhdGVQ
cm9ncmFtKHByb2dyYW0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE3MDEsNyArMTY5NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlZlcnRleEF0dHJp
YjFmKGluZGV4LCB2MCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAxPiBh
cnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliMWZ2KEdDR0x1
aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3MDksNyArMTcw
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQ0dM
dWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRleEF0dHJpYjFmdihp
bmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3MTcsNyArMTcxMSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dM
ZmxvYXQgdjAsIEdDR0xmCiAgICAgZ2w6OlZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMj4gYXJyYXkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNzI1LDcgKzE3MTksNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDRwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dM
dWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgs
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTczMyw3ICsxNzI3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQg
aW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBnbDo6VmVydGV4QXR0cmliM2YoaW5kZXgs
IHYwLCB2MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gYXJy
YXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWlu
dCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNzQxLDcgKzE3MzUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDRwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZnYoaW5k
ZXgsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdD
R0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWI0ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEs
IEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NDksNyArMTc0Myw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmCiAgICAgZ2w6OlZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2
Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NTcsNyArMTc1MSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWludCBpbmRleCwg
R0NHTFNwYW48Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXku
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBv
aW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJv
b2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQg
aW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXpl
ZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc2NSw3ICsxNzU5LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWlu
dCBpbmRleCwgR0NHTGludCBzaXplLAogICAgIGdsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4
LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYklQb2ludGVyKEdD
R0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJp
ZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTE3NzMsNyArMTc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsCiAgICAgZ2w6OlZlcnRleEF0dHJpYklQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBz
dHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9m
ZnNldCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNzgxLDcgKzE3NzUsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQwogICAgIGdsOjpWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
VmVydGV4QXJyYXkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpj
cmVhdGVWZXJ0ZXhBcnJheSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC0xNzk0LDcgKzE3ODgsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCiAgICAgcmV0dXJuIGFy
cmF5OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJh
eShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpk
ZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJy
YXkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4MDYsNyArMTgwMCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkp
CiAgICAgICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKIH0KIAotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1H
TE9iamVjdCBhcnJheSkKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVmVy
dGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKICAgICBpZiAoIWFycmF5KQogICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xODE4LDcgKzE4MTIsNyBAQCBHQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFy
cmF5KQogICAgIHJldHVybiBnbDo6SXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0
IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVmVydGV4QXJyYXkoUGxh
dGZvcm1HTE9iamVjdCBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xODI4LDcgKzE4MjIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAg
ICAgZ2w6OkJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9v
bGVhbj4gdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJvb2xlYW52KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgzNiw3ICsxODMwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5h
bWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPgogICAgIGdsOjpHZXRCb29sZWFudlJvYnVzdEFOR0xF
KHBuYW1lLCB2YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KIAotR0NHTGlu
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCiB7CiAg
ICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAg
LTE4NDUsNyArMTgzOSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwCiAgICAgcmV0dXJuIHZh
bHVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYoR0NHTGVu
dW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2
YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xODUzLDcgKzE4NDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRG
bG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdQogICAgIGdsOjpH
ZXRGbG9hdHZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUu
ZGF0YSk7CiB9CiAgICAgCi1HQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldElu
dGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgR0NHTGludDY0IHZhbHVlID0g
MDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg2Miw3ICsxODU2LDcgQEAg
R0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjQoR0NHTGVudW0g
cG5hbWUpCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1HQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4KQor
R0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NGkoR0NHTGVudW0g
cG5hbWUsIEdDR0x1aW50IGluZGV4KQogewogICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE4NzEsNyArMTg2NSw3IEBAIEdDR0xpbnQ2
NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwg
R0NHTHVpbnQgaW5kZXgpCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1HQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTg4Miw3ICsxODc2LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXIKICAgICByZXR1
cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dy
YW1pKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE4OTEsNyArMTg4NSw3IEBAIEdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
R0NHTGVudW0KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0s
IEdDR0xzaXplaSBjb3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCitTdHJpbmcgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNb
Ml0sIEdDR0xzaXplaSBjb3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHNoYWRlcnMpOwogICAgIFVOVVNFRF9QQVJBTShjb3VudCk7CkBAIC0xOTExLDcgKzE5MDUs
NyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZEluZm9Mb2co
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLAogICAgIHJldHVybiBwcm9jZXNzZWRMb2cudG9T
dHJpbmcoKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewog
ICAgIEFTU0VSVChwcm9ncmFtKTsKIApAQCAtMTkzNCw3ICsxOTI4LDcgQEAgU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0pCiAgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgY291bnQsIFN0
cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dM
aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTk0Myw3
ICsxOTM3LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0wKICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcmkoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFt
ZSkKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKQEAgLTE5
NTMsNyArMTk0Nyw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRl
cmkoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuCiAgICAgcmV0dXJuIHZhbHVl
OwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2co
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKIApAQCAtMTk3MywxMiArMTk2NywxMiBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAg
cmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgp
LCBzaXplKSk7CiB9CiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
U291cmNlKFBsYXRmb3JtR0xPYmplY3QpCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpCiB7CiAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiB9CiAKLUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFy
YW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGZsb2F0IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMZmxvYXQgdmFsdWUgPSAwLmY7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTE5ODcsNyArMTk4MSw3IEBAIEdDR0xmbG9hdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUp
CitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTk5Niw3ICsxOTkwLDcgQEAgR0NHTGlu
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW0KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAwNSw3ICsxOTk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2MKICAgICBnbDo6R2V0VW5pZm9ybWZ2Um9idXN0QU5H
TEUocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAx
NCw3ICsyMDA4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2MKICAgICBnbDo6R2V0VW5pZm9y
bWl2Um9idXN0QU5HTEUocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIG51bGxwdHIsIHZhbHVl
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
THVpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtdWl2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
THVpbnQ+IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIwMjMsNyArMjAxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvCiAg
ICAgZ2w6OkdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6
ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFN0cmluZyYgbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9y
bUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQog
ewogICAgIEFTU0VSVChwcm9ncmFtKTsKIApAQCAtMjAzMyw3ICsyMDI3LDcgQEAgR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY28KICAgICByZXR1cm4gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1HQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0g
cG5hbWUpCitHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VmVydGV4QXR0
cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNDMsNyArMjAzNyw3
IEBAIEdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmli
T2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xz
aXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOwogfQogCi1QbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQorUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIoKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA1
Myw3ICsyMDQ3LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlQnVmZmVyKCkKICAgICByZXR1cm4gbzsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQorUGxhdGZvcm1HTE9iamVj
dCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDYzLDcgKzIw
NTcsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCiAgICAgcmV0dXJuIG87CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQorUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVQcm9ncmFtKCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNzEsNyArMjA2NSw3IEBAIFBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQog
ICAgIHJldHVybiBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQorUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA4MSw3
ICsyMDc1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKCkKICAgICByZXR1cm4gbzsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVNoYWRlcihHQ0dMZW51
bSB0eXBlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjA4OSw3ICsyMDgzLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiAgICAgcmV0dXJuIGdsOjpD
cmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURF
UiA6IEdMX1ZFUlRFWF9TSEFERVIpOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Y3JlYXRlVGV4dHVyZSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMTAwLDcgKzIwOTQsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKICAgICBy
ZXR1cm4gbzsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVy
KFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpk
ZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjEwOCw3ICsyMTAyLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
YnVmZmVyKQogICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IGZyYW1lYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVGcmFtZWJ1
ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIxMjUsNyArMjExOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCiAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZm
ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVs
ZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjEzMyw3ICsyMTI3LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0pCiAgICAgZ2w6OkRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IHJlbmRlcmJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVy
YnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIxNDEsNyArMjEzNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVu
ZGVyYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hh
ZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE0OSw3ICsyMTQzLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQogICAgIGdsOjpEZWxldGVTaGFkZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1
cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1H
TE9iamVjdCB0ZXh0dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTIxNjEsNyArMjE1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4dHVyZSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJv
cikKIHsKICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50
aGV0aWMgZXJyb3IgbGlzdCB0bwogICAgIC8vIHByZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJvcnMs
IHNvIGEgY2FsbGVyIHRvIGdldEVycm9yIHdpbGwgZ2V0CkBAIC0yMTcwLDI1ICsyMTY0LDI1IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVt
IGVycm9yKQogICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmZvcmNlQ29udGV4dExvc3QoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpmb3JjZUNvbnRleHRMb3N0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4
dExvc3QoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRl
eHQoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWN5Y2xlQ29udGV4dCgpCiB7CiAg
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKICAgICAgICAg
Y2xpZW50LT5yZWN5Y2xlQ29udGV4dCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCiB7CiAg
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKICAgICAgICAg
Y2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9k
ZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVt
IG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3Vu
dCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yMjAwLDcgKzIxOTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJy
YXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsCiAgICAgY2hlY2tHUFVT
dGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRz
SW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6
ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJp
bWNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTIyMTIsNyArMjIwNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291CiAgICAgY2hl
Y2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwg
R0NHTHVpbnQgZGl2aXNvcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMjIzLDcgKzIyMTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
cwogICAgICAgICBnbDo6VmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsK
IH0KIAotR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0lu
ZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tO
YW1lKQorR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUJsb2NrSW5k
ZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05h
bWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCkBAIC0yMjMyLDcgKzIyMjYsNyBAQCBHQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLAogICAgIHJl
dHVybiBnbDo6R2V0VW5pZm9ybUJsb2NrSW5kZXgocHJvZ3JhbSwgdW5pZm9ybUJsb2NrTmFtZS51
dGY4KCkuZGF0YSgpKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
Y3RpdmVVbmlmb3JtQmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
dW5pZm9ybUJsb2NrSW5kZXgpCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0
aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0luZGV4KQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjI1Miw3ICsyMjQ2LDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3IKICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5p
Zm9ybUJsb2NrQmluZGluZykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybUJs
b2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjI2Myw3ICsyMjU3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0wKIAogLy8gUXVlcnkgRnVuY3Rpb25zCiAKLVBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKK1BsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUXVlcnkoKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjI3Myw3
ICsyMjY3LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlUXVlcnkoKQogICAgIHJldHVybiBuYW1lOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVy
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5RdWVyeShHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI4MSw3ICsyMjc1LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkKICAgICBnbDo6QmVnaW5RdWVyeSh0YXJnZXQsIHF1ZXJ5KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI4OSw3
ICsyMjgzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVu
dW0gdGFyZ2V0KQogICAgIGdsOjpFbmRRdWVyeSh0YXJnZXQpOwogfQogCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aShHQ0dMdWludCBpZCwgR0NHTGVu
dW0gcG5hbWUpCitHQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRRdWVyeU9iamVj
dHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMdWludCB2YWx1ZSA9
IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIzMDAsNyArMjI5NCw3IEBA
IEdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKEdDR0x1
aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKIAogLy8gVHJhbnNmb3JtIEZlZWRiYWNrIEZ1bmN0aW9u
cwogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFu
c2Zvcm1GZWVkYmFjaygpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIzMTAsNyArMjMwNCw3IEBAIFBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkK
ICAgICByZXR1cm4gbmFtZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxh
dGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMzE4LDcgKzIzMTIsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdM
T2JqZWN0IHRyYW5zZm9ybQogICAgIGdsOjpEZWxldGVUcmFuc2Zvcm1GZWVkYmFja3MoMSwgJnRy
YW5zZm9ybUZlZWRiYWNrKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFj
aykKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVHJhbnNmb3JtRmVlZGJh
Y2soUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0yMzI2LDcgKzIz
MjAsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZgogICAgIHJldHVybiBnbDo6SXNUcmFuc2Zv
cm1GZWVkYmFjayh0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3Qg
dHJhbnNmb3JtRmVlZGJhY2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjMzNCw3ICsyMzI4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE8KICAgICBnbDo6QmluZFRyYW5zZm9ybUZlZWRiYWNrKHRhcmdldCwgdHJhbnNmb3JtRmVlZGJh
Y2spOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZl
ZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9kZSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMzQyLDcg
KzIzMzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZl
ZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCiAgICAgZ2w6OkJlZ2luVHJhbnNmb3JtRmVl
ZGJhY2socHJpbWl0aXZlTW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZW5k
VHJhbnNmb3JtRmVlZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzNTAsNyArMjM0NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKICAgICBnbDo6RW5kVHJhbnNmb3JtRmVl
ZGJhY2soKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB2YXJ5aW5ncywgR0NHTGVudW0gYnVmZmVyTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywgR0NHTGVudW0gYnVmZmVyTW9kZSkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MzY1LDEzICsyMzU5LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtCiAgICAgZ2w6OlRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MocHJvZ3JhbSwgcG9pbnRlcnNUb1ZhcnlpbmdzLnNpemUoKSwg
cG9pbnRlcnNUb1ZhcnlpbmdzLmRhdGEoKSwgYnVmZmVyTW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBH
Q0dMc2l6ZWkgYnVmU2l6ZSA9IDA7Ci0gICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6VFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdU
SCwgJmJ1ZlNpemUpOworICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6VFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdUSCwgJmJ1ZlNp
emUpOwogICAgIGlmICghYnVmU2l6ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzg3LDcgKzIz
ODEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIGluZm8udHlwZSA9IHR5cGU7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVt
IHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdD
R0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMzk1LDcgKzIzODksNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0x1aW50IGluZGV4LCBQbAogICAgIGdsOjpCaW5kQnVmZmVyQmFzZSh0YXJnZXQsIGlu
ZGV4LCBidWZmZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJh
bWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwgR0NH
TGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RYMSwg
R0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdD
R0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAs
IEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVs
ZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQwMyw3ICsyMzk3LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3Jj
WTAsIEdDR0wKICAgICBnbDo6QmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNy
Y1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IGxheWVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI0MTEsNyArMjQwNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0KICAgICBnbDo6
RnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0dXJlLCBsZXZl
bCwgbGF5ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRl
RnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0
YWNobWVudHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmludmFsaWRhdGVGcmFtZWJ1
ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50
cykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yNDE5LDcgKzI0MTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlk
YXRlRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3BhbjxjbwogICAgIGdsOjpJbnZh
bGlkYXRlRnJhbWVidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50
cy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1
YkZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0
dGFjaG1lbnRzLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppbnZhbGlkYXRlU3ViRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNo
bWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjQyNyw3ICsyNDIxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52
YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW4KICAgICBnbDo6
SW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudHMuYnVmU2l6ZSwgYXR0
YWNobWVudHMuZGF0YSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDM1LDcgKzI0MjksNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKICAg
ICBnbDo6UmVhZEJ1ZmZlcihzcmMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xp
bnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9m
ZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNDUyLDcgKzI0NDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5
VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGds
OjpCaW5kRnJhbWVidWZmZXIoZnJhbWVidWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwog
fQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI0NjAsNyArMjQ1NCw3IEBAIEdDR0xp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjCiAgICAgcmV0dXJuIGdsOjpHZXRGcmFnRGF0YUxvY2F0aW9uKHBy
b2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVp
bnQgdjApCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjQ2OCw3ICsyNDYyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKICAgICBnbDo6VW5pZm9ybTF1
aShsb2NhdGlvbiwgdjApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
dWludCB2MCwgR0NHTHVpbnQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjQ3Niw3ICsyNDcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NH
THVpbnQKICAgICBnbDo6VW5pZm9ybTJ1aShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
dWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWlu
dCB2MSwgR0NHTHVpbnQgdjIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjQ4NCw3ICsyNDc4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVp
bnQKICAgICBnbDo6VW5pZm9ybTN1aShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NH
THVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVp
bnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5Miw3ICsyNDg2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQKICAgICBnbDo6VW5pZm9ybTR1aShsb2NhdGlv
biwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0
YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aXYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjUwMCw3ICsyNDk0LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9ybTF1aXYobG9jYXRpb24sIGRhdGEu
YnVmU2l6ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRh
dGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0ydWl2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRh
dGEuYnVmU2l6ZSAlIDIpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjUw
OSw3ICsyNTAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9ybTJ1
aXYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDIsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0
YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSAzKSk7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKQEAgLTI1MTgsNyArMjUxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0x1CiAgICAgZ2w6OlVuaWZvcm0zdWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyAzLCBkYXRh
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUg
NCkpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTI3LDcgKzI1MjEsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtNHVpdihsb2NhdGlvbiwg
ZGF0YS5idWZTaXplIC8gNCwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCiB7CiAg
ICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgNikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCkBAIC0yNTM2LDcgKzI1MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAg
IGdsOjpVbmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDYsIHRyYW5z
cG9zZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybU1hdHJpeDN4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJh
bnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEo
ZGF0YS5idWZTaXplICUgNikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0y
NTQ1LDcgKzI1MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlmb3Jt
TWF0cml4M3gyZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDYsIHRyYW5zcG9zZSwgZGF0YS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4
NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
TWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXpl
ICUgOCkpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTU0LDcgKzI1NDgs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlmb3JtTWF0cml4Mng0ZnYo
bG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDgsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4NHgyZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgOCkpOwogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTYzLDcgKzI1NTcsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24sIGRh
dGEuYnVmU2l6ZSAvIDgsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMTIpKTsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjU3Miw3ICsyNTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHQKICAgICBnbDo6VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUg
LyAxMiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAg
ICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCkBAIC0yNTgxLDcgKzI1NzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAg
IGdsOjpVbmlmb3JtTWF0cml4NHgzZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFu
c3Bvc2UsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xp
bnQgeiwgR0NHTGludCB3KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRy
aWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdD
R0xpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yNTg5LDcgKzI1ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludAogICAgIGds
OjpWZXJ0ZXhBdHRyaWJJNGkoaW5kZXgsIHgsIHksIHosIHcpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQs
IDQ+IHZhbHVlcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yNTk3LDcgKzI1OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQwogICAg
IGdsOjpWZXJ0ZXhBdHRyaWJJNGl2KGluZGV4LCB2YWx1ZXMuZGF0YSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdD
R0x1aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50IHosIEdDR0x1aW50IHcpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1
aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50IHosIEdDR0x1aW50IHcpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYwNSw3ICsyNTk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWlu
dCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHUKICAgICBnbDo6VmVydGV4QXR0cmliSTR1aShpbmRl
eCwgeCwgeSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4g
dmFsdWVzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjEzLDcg
KzI2MDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgRwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJ
NHVpdihpbmRleCwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwgR0NH
THVpbnQgZW5kLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3UmFuZ2VFbGVtZW50cyhHQ0dM
ZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwgR0NHTHVpbnQgZW5kLCBHQ0dMc2l6ZWkgY291bnQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MjEsNyArMjYxNSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUs
IEdDR0x1aW50IHN0YXJ0LCBHCiAgICAgZ2w6OkRyYXdSYW5nZUVsZW1lbnRzKG1vZGUsIHN0YXJ0
LCBlbmQsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PHZvaWQqPihvZmZzZXQpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29u
c3QgR0NHTGVudW0+IGJ1ZnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZm
ZXJzKEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBidWZzKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MjksNyArMjYyMyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdDR0xl
bnVtPiBidWZzKQogICAgIGdsOjpEcmF3QnVmZmVycyhidWZzLmJ1ZlNpemUsIGJ1ZnMuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyaXYoR0NHTGVu
dW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHZh
bHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51
bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFs
dWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTI2MzcsNyArMjYzMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
QnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsCiAgICAgZ2w6OkNs
ZWFyQnVmZmVyaXYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZXMuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZmZXIs
IEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjQ1
LDcgKzI2MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVp
dihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlcgogICAgIGdsOjpDbGVhckJ1ZmZl
cnVpdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50
IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NTMsNyArMjY0
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVu
dW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsCiAgICAgZ2w6OkNsZWFyQnVmZmVyZnYoYnVm
ZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjbGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVm
ZmVyLCBHQ0dMZmxvYXQgZGVwdGgsIEdDR0xpbnQgc3RlbmNpbCkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjYxLDcgKzI2NTUsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZl
ciwgR0NHTGludCBkcmF3YnVmZmVyLAogICAgIGdsOjpDbGVhckJ1ZmZlcmZpKGJ1ZmZlciwgZHJh
d2J1ZmZlciwgZGVwdGgsIHN0ZW5jaWwpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NjksNyAr
MjY2Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRm
b3JtR0xPYmplY3QgcXVlcnkpCiAgICAgZ2w6OkRlbGV0ZVF1ZXJpZXMoMSwgJnF1ZXJ5KTsKIH0K
IAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZvcm1H
TE9iamVjdCBxdWVyeSkKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0yNjc3LDcgKzI2NzEsNyBAQCBHQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KQogICAgIHJldHVybiBnbDo6SXNRdWVyeShxdWVyeSk7CiB9CiAKLVBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNjg3LDcgKzI2ODEs
NyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0
Zm9ybUdMT2JqZWN0Pih2YWx1ZSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjcmVhdGVTYW1wbGVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTI2OTcsNyArMjY5MSw3IEBAIFBsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQogICAgIHJl
dHVybiBuYW1lOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1w
bGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjcwNSw3ICsyNjk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiAgICAgZ2w6OkRlbGV0ZVNhbXBsZXJzKDEsICZzYW1wbGVyKTsKIH0K
IAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpp
c1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTI3MTMsNyArMjcwNyw3
IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZv
cm1HTE9iamVjdCBzYW1wbGVyKQogICAgIHJldHVybiBnbDo6SXNTYW1wbGVyKHNhbXBsZXIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kU2FtcGxlcihHQ0dMdWludCB1
bml0LCBQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
NzIxLDcgKzI3MTUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kU2FtcGxl
cihHQ0dMdWludCB1bml0LCBQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZQogICAgIGdsOjpCaW5kU2Ft
cGxlcih1bml0LCBzYW1wbGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTGludCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2FtcGxlclBh
cmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGlu
dCBwYXJhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yNzI5LDcgKzI3MjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
YW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbgogICAgIGds
OjpTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgcGFyYW0pCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
ciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNzM3LDcgKzI3MzEsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2Jq
ZWN0IHNhbXBsZXIsIEdDR0xlbgogICAgIGdsOjpTYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBw
bmFtZSwgcGFyYW0pOwogfQogCi1HQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dM
ZmxvYXQgdmFsdWUgPSAwLmY7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI3
NDcsNyArMjc0MSw3IEBAIEdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyCiAgICAgcmV0dXJuIHZhbHVl
OwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1l
dGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2Jq
ZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNzU3LDcgKzI3NTEsNyBAQCBHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIsCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1HQ0dMc3luYyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJp
dGZpZWxkIGZsYWdzKQorR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmVuY2VTeW5j
KEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjc2NSw3ICsyNzU5LDcg
QEAgR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZlbmNlU3luYyhHQ0dMZW51bSBj
b25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkZlbmNlU3luYyhjb25k
aXRpb24sIGZsYWdzKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzU3luYyhHQ0dMc3luYyBzeW5jKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjc3Myw3ICsyNzY3LDcgQEAgR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyhHQ0dMc3luYyBzeW5jKQogICAg
IHJldHVybiBnbDo6SXNTeW5jKHN5bmMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTeW5jKEdDR0xzeW5jIHN5bmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNzgxLDcgKzI3NzUsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgZ2w6OkRl
bGV0ZVN5bmMoc3luYyk7CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGllbnRXYWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0x1aW50
NjQgdGltZW91dCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsaWVudFdhaXRT
eW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBHTF9X
QUlUX0ZBSUxFRDsKQEAgLTI3ODksNyArMjc4Myw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGllbnRXYWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxh
CiAgICAgcmV0dXJuIGdsOjpDbGllbnRXYWl0U3luYyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdDR0xzeW5jIHN5bmMs
IEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OndhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywg
R0NHTGludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjc5Nyw3ICsyNzkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dM
aW4KICAgICBnbDo6V2FpdFN5bmMoc3luYywgZmxhZ3MsIHRpbWVvdXQpOwogfQogCi1HQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51
bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3luY2koR0NHTHN5
bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI4MDcsNyArMjgwMSw3IEBAIEdDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVt
IHBuYW1lKQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI4MTUsNyArMjgwOSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIGdsOjpQYXVz
ZVRyYW5zZm9ybUZlZWRiYWNrKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI4MjMsNyArMjgxNyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCkKICAgICBnbDo6UmVzdW1l
VHJhbnNmb3JtRmVlZGJhY2soKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBv
ZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI4MzEsNyArMjgyNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50
IGluZGV4LCBQCiAgICAgZ2w6OkJpbmRCdWZmZXJSYW5nZSh0YXJnZXQsIGluZGV4LCBidWZmZXIs
IG9mZnNldCwgc2l6ZSk7CiB9CiAKLVZlY3RvcjxHQ0dMdWludD4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHVuaWZvcm1OYW1lcykKK1ZlY3RvcjxHQ0dMdWludD4gR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjg0NCwxNCArMjgzOCwx
NCBAQCBWZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3Jt
SW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHBybwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1
aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6
OkdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2Um9idXN0QU5HTEUocHJvZ3JhbSwgdW5pZm9ybUJsb2Nr
SW5kZXgsIHBuYW1lLCBwYXJhbXMuYnVmU2l6ZSwgbnVsbHB0ciwgcGFyYW1zLmRhdGEpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjptdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRz
LCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTI4NTksNyArMjg1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0CiAgICAgZ2w6Ok11bHRpRHJhd0FycmF5c0FOR0xFKG1vZGUsIGZpcnN0cy5kYXRhLCBj
b3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGludD4gZmlyc3RzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywg
R0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBpbnN0YW5jZUNvdW50cywgR0NHTHNpemVpIGRyYXdj
b3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFu
Y2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gZmlyc3RzLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBpbnN0YW5jZUNvdW50cywgR0NHTHNpemVpIGRyYXdjb3VudCkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yODY3LDcgKzI4NjEsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdM
RShHQ0dMZW51bSBtb2RlLCBHQ0dMUwogICAgIGdsOjpNdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRShtb2RlLCBmaXJzdHMuZGF0YSwgY291bnRzLmRhdGEsIGluc3RhbmNlQ291bnRzLmRhdGEs
IGRyYXdjb3VudCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJh
d0VsZW1lbnRzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBj
b3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdD
R0xzaXplaSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJh
d0VsZW1lbnRzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBj
b3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdD
R0xzaXplaSBkcmF3Y291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjg4MCw3ICsyODc0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxj
b24KICAgICBnbDo6TXVsdGlEcmF3RWxlbWVudHNBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlw
ZSwgcG9pbnRlcnMuZGF0YSgpLCBkcmF3Y291bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3Rh
bmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xT
cGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291
bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI4OTMsNyArMjg4Nyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0g
bW9kZSwgR0NHCiAgICAgZ2w6Ok11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwg
Y291bnRzLmRhdGEsIHR5cGUsIHBvaW50ZXJzLmRhdGEoKSwgaW5zdGFuY2VDb3VudHMuZGF0YSwg
ZHJhd2NvdW50KTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6d2FpdEFuZFVw
ZGF0ZU9sZGVzdEZyYW1lKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdEFuZFVw
ZGF0ZU9sZGVzdEZyYW1lKCkKIHsKICAgICBzaXplX3Qgb2xkZXN0RnJhbWVDb21wbGV0aW9uRmVu
Y2UgPSBtX29sZGVzdEZyYW1lQ29tcGxldGlvbkZlbmNlKysgJSBtYXhQZW5kaW5nRnJhbWVzOwog
ICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CkBAIC0yOTE0LDYgKzI5MDgsODggQEAgYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6d2FpdEFuZFVwZGF0ZU9sZGVzdEZyYW1lKCkKICAgICByZXR1
cm4gc3VjY2VzczsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzaW11bGF0ZUV2
ZW50Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCit7CisgICAgaWYg
KGV2ZW50ID09IFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6Q29udGV4dENoYW5nZSkgeworICAg
ICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5kaXNw
bGF5V2FzUmVjb25maWd1cmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGV2
ZW50ID09IFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVyZSkgeworICAg
ICAgICBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAg
fQorfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzR0xFUzJDb21wbGlhbnQoKSBj
b25zdAoreworICAgIHJldHVybiBtX2lzRm9yV2ViR0wyOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlYWRSZW5kZXJpbmdSZXN1
bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIHBhaW50
VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFn
ZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0KCkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJ
bWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgp
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFk
Q29tcG9zaXRlZFJlc3VsdHMoKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1
cm47CisgICAgcGFpbnRUb0NhbnZhcyhjb250ZXh0QXR0cmlidXRlcygpLCBXVEZNb3ZlKCpwaXhl
bEJ1ZmZlciksIGltYWdlQnVmZmVyLmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQo
KSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKQoreworICAgIC8vIFJlYWRp
bmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcsIHdo
aWNoIGlzIGxvc3N5LgorICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRB
bHBoYSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBhdXRvIHJlc3VsdHMgPSBy
ZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCk7CisgICAgaWYgKHJlc3VsdHMgJiYgIXJl
c3VsdHMtPnNpemUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdHMtPmZvcm1h
dCgpLnBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCB8fCByZXN1bHRzLT5mb3JtYXQo
KS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgICAgICAvLyBGSVhNRTog
TWFrZSBQaXhlbEJ1ZmZlckNvbnZlcnNpb25zIHN1cHBvcnQgbmVnYXRpdmUgcm93Qnl0ZXMgYW5k
IGluLXBsYWNlIGNvbnZlcnNpb25zLgorICAgICAgICBjb25zdCBhdXRvIHNpemUgPSByZXN1bHRz
LT5zaXplKCk7CisgICAgICAgIGNvbnN0IHNpemVfdCByb3dTdHJpZGUgPSBzaXplLndpZHRoKCkg
KiA0OworICAgICAgICB1aW50OF90KiB0b3AgPSByZXN1bHRzLT5kYXRhKCkuZGF0YSgpOworICAg
ICAgICB1aW50OF90KiBib3R0b20gPSB0b3AgKyAoc2l6ZS5oZWlnaHQoKSAtIDEpICogcm93U3Ry
aWRlOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiB0ZW1wKG5ldyB1aW50OF90
W3Jvd1N0cmlkZV0pOworICAgICAgICBmb3IgKDsgdG9wIDwgYm90dG9tOyB0b3AgKz0gcm93U3Ry
aWRlLCBib3R0b20gLT0gcm93U3RyaWRlKSB7CisgICAgICAgICAgICBtZW1jcHkodGVtcC5nZXQo
KSwgYm90dG9tLCByb3dTdHJpZGUpOworICAgICAgICAgICAgbWVtY3B5KGJvdHRvbSwgdG9wLCBy
b3dTdHJpZGUpOworICAgICAgICAgICAgbWVtY3B5KHRvcCwgdGVtcC5nZXQoKSwgcm93U3RyaWRl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHNGb3JQYWludGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50
aW5nKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVhZENvbXBv
c2l0ZWRSZXN1bHRzKCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgVVNF
KEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3MmNkZDE0
MzliZTZmMjllOTU0M2FhZDMyYzBmMTE1ZWU5ZTAyOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xF
LmgKQEAgLTAsMCArMSw0NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdMKSAm
JiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oIgor
I2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKworI2lmIFBM
QVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENo
YWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1B
QykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0LmgiCisjZW5kaWYK
KworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29zaWEgeworY2xhc3MgR0NHTExheWVy
OworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uc0dM
OworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1h
Z2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
OworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRz
IHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERp
c3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0OworICAgIEdDR0xlbnVtIGRyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGljIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJU
ZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQp
OworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJh
d2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKKyAgICBlbnVtIGNsYXNzIFJlbGVh
c2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAgICAgLy8gUmVsZWFzZXMgY3VycmVudCBj
b250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhy
ZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCisgICAgICAgIC8vIFJlbGVhc2Vz
IGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgY2FsbHMg
ZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlVGhyZWFkUmVzb3VyY2VzLAorICAg
ICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQgYmUgdXNlZCBvbmx5IGFm
dGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisgICAgICAgIC8vIGJlZW4gcmVsZWFzZWQu
CisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMKKyAgICB9OworICAg
IHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFzZVRocmVhZFJlc291cmNl
QmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0IGZyb20gbXVs
dGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwor
CisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlvbiB3aXRob3V0IGNoZWNraW5nIHRoZSBu
YW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAgaW50IGdldEF0dHJpYkxvY2F0aW9uRGly
ZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAg
IC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2luZyB0aHJvdWdoIEFOR0xFLgorICAgIHZv
aWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0KTsKKworICAgIC8vIEVxdWl2
YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9j
YXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMIG92ZXJy
aWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkgZmluYWw7CisgICAgdm9pZCBhdHRhY2hT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikg
ZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwgR0NH
THVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBi
aW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBH
Q0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpIGZpbmFs
OworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKSBmaW5hbDsKKyAgICB2b2lk
IGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxw
aGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVt
IGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVudW0gc3Jj
UkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBHQ0dMZW51bSBkc3RBbHBo
YSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
cHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVt
IHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKSBm
aW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRy
IG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIEdDR0xl
bnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KSBmaW5hbDsKKyAgICB2
b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29sb3Io
R0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNs
YW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgp
IGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDR0xpbnQgcykgZmluYWw7CisgICAgdm9p
ZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xl
YW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFsOworICAgIHZvaWQgY29tcGlsZVNoYWRl
cihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZp
bmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBk
ZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7CisgICAgdm9pZCBkZXB0aE1hc2soR0NHTGJv
b2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIs
IEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9pZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxlKEdDR0xl
bnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVp
bnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dM
aW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsZW1lbnRz
KEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0
ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7Cisg
ICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkgZmluYWw7Cisg
ICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lkIGZsdXNoKCkgZmluYWw7CisgICAgdm9p
ZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFj
aG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmlu
YWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCwgR0NH
TGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkgZmlu
YWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpIGZpbmFsOworICAg
IGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBib29sIGdldEFjdGl2ZUF0dHJpYkltcGwo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOwor
ICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7CisgICAgYm9vbCBnZXRBY3RpdmVVbmlmb3Jt
SW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZv
Jik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3Qq
IHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGdldEJvb2xlYW52KEdDR0xl
bnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xp
bnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBm
aW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZpbmFsOworICAgIHZvaWQgZ2V0RmxvYXR2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKSBmaW5hbDsKKyAgICBH
Q0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgdm9pZCBn
ZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpIGZpbmFs
OworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAg
IEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkg
ZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxh
dGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5nIGdldFVubWFuZ2xlZEluZm9Mb2coUGxh
dGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25zdCBTdHJpbmcmKTsKKyAgICBHQ0dMaW50
IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFt
ZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmplY3QsIEdDR0xl
bnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51
bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25UeXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAy
PiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVy
U291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIFN0cmluZyBnZXRTdHJpbmcoR0NH
TGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0IGdldFRleFBhcmFtZXRlcmYoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRUZXhQYXJh
bWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIHZvaWQg
Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRVbmlmb3JtaXYo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dM
aW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRVbmlmb3JtdWl2KFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTHVpbnQ+IHZhbHVlKSBm
aW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdDR0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICB2b2lk
IGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKSBmaW5hbDsKKyAgICBHQ0dMYm9v
bGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBp
c0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0ZyYW1lYnVm
ZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm1HTE9i
amVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgoR0NHTGZsb2F0KSBmaW5hbDsKKyAgICB2
b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgcGl4ZWxT
dG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgcG9s
eWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpIGZpbmFsOworICAg
IHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bh
bjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCByZWFkblBpeGVscyhHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lk
IHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkgZmlu
YWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgc2hhZGVyU291cmNlKFBsYXRm
b3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmMo
R0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spIGZpbmFsOworICAgIHZv
aWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dM
aW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBzdGVuY2lsTWFzayhHQ0dM
dWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0g
ZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBzdGVuY2lsT3AoR0NHTGVudW0g
ZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKSBmaW5hbDsKKyAgICB2b2lkIHN0
ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpm
YWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7
CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0
ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhT
dWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0
LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7Cisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6
ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
eG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQg
eW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2
b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZs
b2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3Jt
MWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCkgZmluYWw7
CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmZ2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdikgZmluYWw7CisgICAgdm9p
ZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB4LCBHQ0dMaW50IHkpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6KSBmaW5hbDsKKyAgICB2b2lkIHVu
aWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiB2KSBm
aW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaXYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikgZmluYWw7CisgICAgdm9pZCB1bmlm
b3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxv
YXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHos
IEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJp
eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBm
aW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmlu
YWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHkpIGZpbmFsOworICAgIHZv
aWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBp
bmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeikgZmluYWw7CisgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQg
dykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwg
R0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAgdm9pZCByZXNoYXBlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2Vk
KEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVp
IHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZp
c29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKSBmaW5hbDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1ZlcnRl
eEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgYmluZFZlcnRleEFycmF5
KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgY29weUJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9m
ZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyKSBmaW5hbDsKKyAgICB2
b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVy
KEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3Jj
WTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQg
ZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpIGZpbmFsOworICAgIHZv
aWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
bGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRh
cmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKSBmaW5hbDsKKyAgICB2
b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNv
bnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAgdm9pZCByZWFkQnVmZmVyKEdD
R0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3Bh
bjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAg
ICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
IGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
IGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5hbDsKKyAgICB2b2lkIHRleEltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGludGVybmFsZm9ybWF0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTNEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsK
KyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKSBmaW5h
bDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9p
ZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xp
bnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAg
IHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXpl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCBjb21wcmVz
c2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
c2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQs
IEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgR0NHTGludCBnZXRGcmFn
RGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQg
djApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWlu
dCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTN1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyKSBmaW5hbDsKKyAg
ICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50
IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTF1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAg
ICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1
aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTR1aXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3Jt
TWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJp
eDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M3g0ZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRleCwg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KSBmaW5hbDsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50
IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KSBm
aW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdD
R0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdS
YW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQs
IEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFs
OworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpIGZp
bmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJh
d2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVy
ZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZmkoR0NHTGVudW0g
YnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVu
Y2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVF1ZXJ5KCkgZmluYWw7Cisg
ICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KSBmaW5hbDsKKyAgICBH
Q0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZv
aWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpIGZp
bmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KSBmaW5hbDsKKyAgICBQbGF0
Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZp
bmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVy
eSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlU2Ft
cGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxh
dGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJp
KFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0p
IGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1w
bGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICBHQ0dMZmxv
YXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51
bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMc3luYyBm
ZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpIGZpbmFsOwor
ICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykgZmluYWw7CisgICAgdm9pZCBkZWxldGVT
eW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBjbGllbnRXYWl0U3luYyhHQ0dMc3lu
YywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIHZv
aWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVv
dXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2koR0NHTHN5bmMsIEdDR0xlbnVtIHBuYW1l
KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkg
ZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0
IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3Jt
R0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkgZmluYWw7CisgICAgdm9pZCBiZWdpblRy
YW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpIGZpbmFsOworICAgIHZvaWQg
ZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
dmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZpbmFsOworICAgIHZvaWQgZ2V0VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lkIHBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAg
dm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyUmFuZ2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZpbmFsOworICAgIFZlY3RvcjxHQ0dMdWlu
dD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsKKyAgICBWZWN0b3I8R0NHTGludD4gZ2V0
QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NH
THVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1
aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1C
bG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5p
Zm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tp
dihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykgZmluYWw7CisgICAgdm9pZCBtdWx0aURy
YXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJz
dHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50
KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xl
bnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3Qg
R0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3Vu
dHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworICAgIHZvaWQgbXVsdGlEcmF3RWxl
bWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50
cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNp
emVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRz
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBv
dmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZUJ1ZmZlcigpIGZpbmFsOworICAg
IFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKSBmaW5hbDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlU2hh
ZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVRleHR1cmUo
KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAg
IHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRl
bGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0
ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVRleHR1cmUo
UGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQ0dM
ZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdldEV4dGVuc2lvbnMoKSBmaW5hbDsKKyAg
ICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZykg
b3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRl
ZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHZvaWQgc2V0Q29udGV4
dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBS
ZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkg
ZmluYWw7CisjZW5kaWYKKyAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGZvcmNlQ29udGV4dExvc3QoKTsKKyAgICB2b2lkIHJlY3ljbGVDb250ZXh0KCk7
CisgICAgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7CisgICAgc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygp
OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0Zv
clBhaW50aW5nKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIGRpc3BsYXlXYXNS
ZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgIHVuc2lnbmVkIHRleHR1cmVTZWVkKEdDR0x1aW50
IHRleHR1cmUpIHsgcmV0dXJuIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5jb3VudCh0ZXh0dXJl
KTsgfQorCisgICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkZWZhdWx0
RGlzcGxheSA9IEVHTF9ERUZBVUxUX0RJU1BMQVk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
Y29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBsb3dQb3dlckRpc3BsYXkgPSBF
R0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTEpOworICAgIGNvbnN0ZXhwciBzdGF0aWMg
RUdMTmF0aXZlRGlzcGxheVR5cGUgaGlnaFBlcmZvcm1hbmNlRGlzcGxheSA9IEVHTF9DQVNUKEVH
TE5hdGl2ZURpc3BsYXlUeXBlLCAtMik7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKKyAgICAvLyBD
YWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgdGhhdCBldmVudHVhbGx5
IGNhbGwgT3BlbkdMLgorICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5
IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAg
IGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8g
VGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBh
dHRyaWJ1dGVzLAorICAgIC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBh
bmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCisgICAgLy8gY291bGQgbm90IGJlIGhvbm9yZWQg
YmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMCisgICAgLy8gaW1wbGVtZW50
YXRpb24uCisgICAgdm9pZCB2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb24pOworICAgIHZvaWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisK
KyAgICB2b2lkIHJlYWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkqIGxlbmd0aCwgR0NHTHNpemVpKiBjb2x1bW5z
LCBHQ0dMc2l6ZWkqIHJvd3MsIEdDR0x2b2lkKiBkYXRhLCBib29sIHJlYWRpbmdUb1BpeGVsQnVm
ZmVyT2JqZWN0KTsKKworICAgIC8vIERpZCB0aGUgbW9zdCByZWNlbnQgZHJhd2luZyBvcGVyYXRp
b24gbGVhdmUgdGhlIEdQVSBpbiBhbiBhY2NlcHRhYmxlIHN0YXRlPworICAgIHZvaWQgY2hlY2tH
UFVTdGF0dXMoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5kZXJp
bmdSZXN1bHRzKCk7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZENvbXBvc2l0
ZWRSZXN1bHRzKCk7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFBpeGVsc0Zv
clBhaW50UmVzdWx0cygpOworCisgICAgYm9vbCByZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJik7
CisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZUltcGwoKTsKKyAgICB2b2lkIHJlc29sdmVNdWx0aXNh
bXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgPSBJbnRSZWN0KCkpOworICAgIHZvaWQg
YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0NHTHVpbnQgaW50ZXJuYWxEZXB0
aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICBib29sIHJlc2hh
cGVEaXNwbGF5QnVmZmVyQmFja2luZygpOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGJvb2wg
YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKKyAgICBib29sIGJpbmREaXNw
bGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lk
KiBwYnVmZmVyKTsKKyAgICBzdGF0aWMgYm9vbCBtYWtlQ3VycmVudChQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMRGlzcGxheSwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCk7CisjZW5kaWYKKyAg
ICAvLyBSZXR1cm5zIGZhbHNlIGlmIGNvbnRleHQgc2hvdWxkIGJlIGxvc3QgZHVlIHRvIHRpbWVv
dXQuCisgICAgYm9vbCB3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisKKyAgICAvLyBQbGF0Zm9ybSBzcGVjaWZpYyBiZWhhdmlvciBmb3IgcmVsZWFzZVJlc291
cmNlcygpOworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygp
OworCisgICAgR0NHTHVpbnQgbV90ZXh0dXJlIHsgMCB9OworICAgIEdDR0x1aW50IG1fZmJvIHsg
MCB9OworICAgIEdDR0x1aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9OworICAgIEdDR0x1
aW50IG1faW50ZXJuYWxDb2xvckZvcm1hdCB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFs
RGVwdGhTdGVuY2lsRm9ybWF0IHsgMCB9OworICAgIEdDR0x1aW50IG1fbXVsdGlzYW1wbGVGQk8g
eyAwIH07CisgICAgR0NHTHVpbnQgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlciB7IDAg
fTsKKyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgeyAwIH07CisgICAgLy8g
Rm9yIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjp0cnVlIHdpdGhvdXQgbXVsdGlzYW1wbGluZy4KKyAg
ICBHQ0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlclRleHR1cmUgeyAwIH07CisgICAgLy8g
QXR0YWNoZXMgbV90ZXh0dXJlIHdoZW4gbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIGlz
IG5vbi16ZXJvLgorICAgIEdDR0x1aW50IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPIHsgMCB9
OworICAgIC8vIFF1ZXJpZWQgYXQgZGlzcGxheSBzdGFydHVwLgorICAgIEVHTGludCBtX2RyYXdp
bmdCdWZmZXJUZXh0dXJlVGFyZ2V0IHsgLTEgfTsKKyAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5
bnRoZXNpemVHTEVycm9yKCkuCisgICAgTGlzdEhhc2hTZXQ8R0NHTGVudW0+IG1fc3ludGhldGlj
RXJyb3JzOworICAgIGJvb2wgbV9pc0ZvcldlYkdMMiB7IGZhbHNlIH07CisgICAgdW5zaWduZWQg
bV9zdGF0dXNDaGVja0NvdW50IHsgMCB9OworICAgIGJvb2wgbV9mYWlsTmV4dFN0YXR1c0NoZWNr
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fdXNlRmVuY2VTeW5jRm9yRGlzcGxheVJhdGVMaW1pdCA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heFBlbmRpbmdGcmFtZXMgPSAz
OworICAgIHNpemVfdCBtX29sZGVzdEZyYW1lQ29tcGxldGlvbkZlbmNlIHsgMCB9OworICAgIFNj
b3BlZEdMRmVuY2UgbV9mcmFtZUNvbXBsZXRpb25GZW5jZXNbbWF4UGVuZGluZ0ZyYW1lc107Cisg
ICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBtX3N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxF
eHRlbnNpb25zR0xBTkdMRT4gbV9leHRlbnNpb25zOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47CisgICAg
RUdMRGlzcGxheSBtX2Rpc3BsYXlPYmogeyBudWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCBtX2NvbnRleHRPYmogeyBudWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTENvbmZpZyBtX2NvbmZpZ09iaiB7IG51bGxwdHIgfTsKKyAgICAvLyBCYWNraW5n
IHN0b3JlIGZvciB0aGUgdGhlIGJ1ZmZlciB3aGljaCBpcyBldmVudHVhbGx5IHVzZWQgZm9yIGRp
c3BsYXkuCisgICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gZmFsc2UsIHRoaXMg
aXMgdGhlIGRyYXdpbmcgYnVmZmVyIGJhY2tpbmcgc3RvcmUuCisgICAgLy8gV2hlbiBwcmVzZXJ2
ZURyYXdpbmdCdWZmZXIgPT0gdHJ1ZSwgdGhpcyBpcyBibGl0dGVkIHRvIGR1cmluZyBkaXNwbGF5
IHByZXBhcmUuCisgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9kaXNwbGF5QnVmZmVy
QmFja2luZzsKKyAgICB2b2lkKiBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyIHsgbnVsbHB0ciB9Owor
I2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGJvb2wgbV9zd2l0Y2hlc0dQVU9uRGlzcGxh
eVJlY29uZmlndXJhdGlvbiB7IGZhbHNlIH07CisgICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BV
UmVxdWVzdCBtX2hpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3Q7CisjZW5kaWYKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisgICAgR0NHTHVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZSB7IDAg
fTsKKyAgICBHQ0dMdWludCBtX2ludGVybWVkaWF0ZVRleHR1cmUgeyAwIH07CisjZW5kaWYKKyNp
ZiBVU0UoTklDT1NJQSkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3NpYTo6R0NHTExheWVyPiBt
X25pY29zaWFMYXllcjsKKyNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPiBtX3RleG1hcExheWVyOworI2Vu
ZGlmCisKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CisjaWYgVVNFKE5JQ09T
SUEpCisgICAgZnJpZW5kIGNsYXNzIE5pY29zaWE6OkdDR0xMYXllcjsKKyNlbGlmIFVTRShURVhU
VVJFX01BUFBFUikKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxh
eWVyOworI2VuZGlmCit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENh
aXJvLmNwcAppbmRleCBjY2NiNTcyNGE0Y2Q5MmZmMGJmOGU3MzgzYzVkOWZlNjg5ZDc3Yjg2Li40
ZDU5Y2IxMmM1ZTQ0NzUzN2RlMGFlZTIxMGRlMDAyY2JkNzlmZTI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRHTENhaXJvLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3Vy
Y2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50
U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBj
b25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAg
ICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFz
U2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCmluZGV4IGY3OWYyMmUzMTNlYTEx
NzM4OWM1ZjQwOWRkMGY0OTRhZTE1YWViOTMuLmFmNGMxN2Q1MWZhNTlmNDY4OGRmNDM5NjUzNTE4
ZjVjYTBkYWFmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCkBAIC01MDYsNyArNTA2LDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBib29sIGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVs
QnVmZmVyLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFBpeGVsQnVmZmVy
JiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQoIXBpeGVsQnVmZmVyLnNpemUoKS5pc0VtcHR5KCkp
OwogICAgIGlmIChjYW52YXNTaXplLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EuaAppbmRleCAyNTU1ZmYwODMyOGUzNDY5Y2Q3YTRhMjk3ZGJlZjc5MGY2MzA1Mjg4Li45MDg4
MjgyZGYwNWI4NTgwMTFiMTY3NDQ0NjdmYjJjMWEzM2E4MTk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5oCkBAIC0yNywxNSArMjcsMjMgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oIgogI2luY2x1ZGUgIklPU3VyZmFjZS5oIgogCisjaWYgRU5BQkxFKFZJ
REVPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
OworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTENvY29hIDogcHVibGlj
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0R0xDb2NvYT4gY3JlYXRlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyYmKTsKICAgICB+R3JhcGhpY3NDb250ZXh0R0xDb2NvYSgpOworICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcGxheU9iajsgfQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgcGxh
dGZvcm1Db25maWcoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ09iajsgfQogICAgIElPU3VyZmFj
ZSogZGlzcGxheUJ1ZmZlcigpOwogICAgIHZvaWQgbWFya0Rpc3BsYXlCdWZmZXJJblVzZSgpOwog
CkBAIC00OSwxNCArNTcsMjQgQEAgcHVibGljOgogICAgIHZvaWQgZGV0YWNoSU9TdXJmYWNlRnJv
bVNoYXJlZFRleHR1cmUodm9pZCogaGFuZGxlKTsKICNlbmRpZgogCi0gICAgLy8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wgb3ZlcnJpZGVzLgorICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
b3ZlcnJpZGVzLgogI2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGNvcHlUZXh0dXJlRnJvbU1l
ZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgZmlu
YWw7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pICYmIFBMQVRGT1JNKENPQ09BKQorICAgIEdy
YXBoaWNzQ29udGV4dEdMQ1YqIGFzQ1YoKSBmaW5hbDsKKyNlbmRpZgogCiBwcm90ZWN0ZWQ6CiAg
ICAgR3JhcGhpY3NDb250ZXh0R0xDb2NvYShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMmJik7CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisKKyNpZiBFTkFCTEUoVklERU8p
ICYmIFBMQVRGT1JNKENPQ09BKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRH
TENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOworI2VuZGlmCiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRl
eHRHTENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0R0xDb2NvYS5tbQppbmRleCAxMWJhMTIyYjdhMzdmYTcxNzZkYzUzNzU0MDcy
Yzc3ZWNiMjE5ZTM5Li5kNmZlYzVhNTM3NjFmNmRkMjU3YzJhNjEzNDMzNzQ1NDQyMTEzZDVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGlj
c0NvbnRleHRHTENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0KQEAgLTQ4LDcgKzQ4LDcgQEAKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oIgogI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZS5oIgogI2VuZGlmCiAKQEAgLTcwLDcgKzcwLDcgQEAgYm9vbCBwbGF0
Zm9ybUlzQU5HTEVBdmFpbGFibGUoKQogLy8gSW4gaXNDdXJyZW50Q29udGV4dFByZWRpY3RhYmxl
KCkgPT0gdHJ1ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgaW4gc2luZ2xlLXRocmVh
ZGVkIG1hbm5lci4KIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpID09IGZhbHNl
IGNhc2UgdGhpcyB2YXJpYWJsZSBpcyBhY2Nlc3NlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYnV0
IGFsd2F5cyBzZXF1ZW50aWFsbHkKIC8vIGFuZCBpdCBhbHdheXMgY29udGFpbnMgbnVsbHB0ciBh
bmQgbnVsbHB0ciBpcyBhbHdheXMgd3JpdHRlbiB0byBpdC4KLXN0YXRpYyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogY3VycmVudENvbnRleHQ7CitzdGF0aWMgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RSogY3VycmVudENvbnRleHQ7CiAKIHN0YXRpYyBib29sIGlzQ3VycmVudENvbnRleHRQcmVkaWN0
YWJsZSgpCiB7CkBAIC0xNDcsNyArMTQ3LDcgQEAgc3RhdGljIEVHTERpc3BsYXkgaW5pdGlhbGl6
ZUVHTERpc3BsYXkoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBhdHRycykKICAg
ICB9CiAKICAgICBMT0coV2ViR0wsICJBdHRlbXB0aW5nIHRvIHVzZSBBTkdMRSdzICVzIGJhY2tl
bmQuIiwgYXR0cnMudXNlTWV0YWwgPyAiTWV0YWwiIDogIk9wZW5HTCIpOwotICAgIEVHTE5hdGl2
ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVm
YXVsdERpc3BsYXk7CisgICAgRUdMTmF0aXZlRGlzcGxheVR5cGUgbmF0aXZlRGlzcGxheSA9IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlZmF1bHREaXNwbGF5OwogICAgIGlmIChhdHRycy51c2VN
ZXRhbCkgewogICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BMQVRGT1JNX0FO
R0xFX1RZUEVfQU5HTEUpOwogICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BM
QVRGT1JNX0FOR0xFX1RZUEVfTUVUQUxfQU5HTEUpOwpAQCAtMTU3LDExICsxNTcsMTEgQEAgc3Rh
dGljIEVHTERpc3BsYXkgaW5pdGlhbGl6ZUVHTERpc3BsYXkoY29uc3QgR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzJiBhdHRycykKICAgICAgICAgaWYgKHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJlZmVyZW5jZTo6TG93UG93ZXIpIHsKICAg
ICAgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUE9XRVJfUFJFRkVSRU5DRV9B
TkdMRSk7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX0xPV19QT1dF
Ul9BTkdMRSk7Ci0gICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Omxvd1Bvd2VyRGlzcGxheTsKKyAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpsb3dQb3dlckRpc3BsYXk7CiAgICAgICAgIH0gZWxzZSBpZiAo
cG93ZXJQcmVmZXJlbmNlID09IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlczo6UG93ZXJQcmVm
ZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2UpIHsKICAgICAgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVz
LmFwcGVuZChFR0xfUE9XRVJfUFJFRkVSRU5DRV9BTkdMRSk7CiAgICAgICAgICAgICBkaXNwbGF5
QXR0cmlidXRlcy5hcHBlbmQoRUdMX0hJR0hfUE9XRVJfQU5HTEUpOwotICAgICAgICAgICAgbmF0
aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaWdoUGVyZm9ybWFuY2VEaXNw
bGF5OworICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmhpZ2hQZXJmb3JtYW5jZURpc3BsYXk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZGlzcGxheUF0
dHJpYnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKQEAgLTIxNSwxMyArMjE1LDEzIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xDb2NvYTo6bWFya0Rpc3BsYXlCdWZmZXJJblVzZSgpCiB9CiAKIEdyYXBo
aWNzQ29udGV4dEdMQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKLSAgICA6IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKFdURk1vdmUoYXR0cmlidXRlcykpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFKFdURk1vdmUoYXR0cmlidXRlcykpCiB7CiB9CiAKIC8vIEZJWE1FOiBCZWxvdyBpcyBmdW5j
dGlvbmFsaXR5IHRoYXQgc2hvdWxkIGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQ29jb2Eg
dG8gc2ltcGxpZnkgdGhlIGJhc2UgY2xhc3MuCiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMp
CitHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyBhdHRycykKICAgICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJz
KQogewogICAgIG1faXNGb3JXZWJHTDIgPSBhdHRycy53ZWJHTFZlcnNpb24gPT0gR3JhcGhpY3ND
b250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsKQEAgLTM1Niw3ICszNTYsNyBAQCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzIGF0dAogICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoZXh0ZW5z
aW9uKTsKICAgICB9CiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkudXNlTWV0YWwpIHsKLSAg
ICAgICAgLy8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgdXNlcyBzeW5jIG9iamVjdHMgdG8gdGhy
b3R0bGUgZGlzcGxheSBvbiBNZXRhbCBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgIC8vIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUgdXNlcyBzeW5jIG9iamVjdHMgdG8gdGhyb3R0bGUgZGlzcGxheSBv
biBNZXRhbCBpbXBsZW1lbnRhdGlvbnMuCiAgICAgICAgIC8vIE9wZW5HTCBzeW5jIG9iamVjdHMg
YXJlIG5vdCBzaWduYWxpbmcgdXBvbiBjb21wbGV0aW9uIG9uIENhdGFsaW5hLWVyYSBkcml2ZXJz
LCBzbwogICAgICAgICAvLyBPcGVuR0wgY2Fubm90IHVzZSB0aGlzIG1ldGhvZCBvZiB0aHJvdHRs
aW5nLiBPcGVuR0wgZHJpdmVycyB0eXBpY2FsbHkgaW1wbGVtZW50CiAgICAgICAgIC8vIHNvbWUg
c29ydCBvZiBpbnRlcm5hbCB0aHJvdHRsaW5nLgpAQCAtNDEwLDEwICs0MTAsMTAgQEAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHQKIAogICAgIGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwogCi0g
ICAgTE9HKFdlYkdMLCAiQ3JlYXRlZCBhIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMICglcCkuIiwg
dGhpcyk7CisgICAgTE9HKFdlYkdMLCAiQ3JlYXRlZCBhIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
KCVwKS4iLCB0aGlzKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCgpCitHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp+R3JhcGhpY3NDb250ZXh0
R0xBTkdMRSgpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRN
YW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKICAgICBpZiAobWFrZUNvbnRleHRDdXJyZW50
KCkpIHsKQEAgLTQ1NCw3ICs0NTQsNyBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKCkKICAgICB9CiAgICAgQVNTRVJUKGN1cnJlbnRDb250ZXh0ICE9
IHRoaXMpOwogICAgIG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPSAtMTsKLSAgICBMT0co
V2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRoaXMp
OworICAgIExPRyhXZWJHTCwgIkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgKCVw
KS4iLCB0aGlzKTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHRHTENvY29hOjppc1ZhbGlkKCkg
Y29uc3QKQEAgLTQ2MiwxMiArNDYyLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6
aXNWYWxpZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdGV4dHVyZTsKIH0KIAotUGxhdGZvcm1MYXll
ciogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorUGxhdGZv
cm1MYXllciogR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1ha2VDb250ZXh0Q3VycmVudCgpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VD
b250ZXh0Q3VycmVudCgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHRPYmopCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTQ4NSw3ICs0ODUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYWtlQ29udGV4dEN1cnJlbnQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNoZWNrR1BVU3RhdHVzKCkKIHsKICAgICBpZiAobV9mYWlsTmV4dFN0YXR1c0No
ZWNrKSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlByZXRlbmRpbmcgdGhlIEdQVSBoYXMgcmVzZXQg
KCVwKS4gTG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsKQEAgLTUwNiw3ICs1MDYsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCiAgICAgcmVzdGFydFN0
YXR1cyA9IDA7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRW
aXNpYmlsaXR5KGJvb2wgaXNWaXNpYmxlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpz
ZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKIHsKICNpZiBQTEFURk9STShNQUMp
CiAgICAgaWYgKCFtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTIw
LDcgKzUyMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNp
YmlsaXR5KGJvb2wgaXNWaXNpYmxlKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKIHsKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgaWYgKG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24pCkBAIC01MjksNyAr
NTI5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmln
dXJlZCgpCiAgICAgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmco
KQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tp
bmcoKQogewogICAgIEFTU0VSVCghZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5
KCkpOwogICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IGJhY2tidWZmZXIgbm93IGJlZm9yZSBhbGxv
Y2F0aW5nIGEgbmV3IG9uZSBpbiBvcmRlciB0byBzbGlnaHRseSByZWR1Y2UgbWVtb3J5IHByZXNz
dXJlLgpAQCAtNTQ3LDcgKzU0Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCiAgICAgcmV0dXJuIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogewogICAg
IEFTU0VSVCghZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpOwogICAgIGF1
dG8gYmFja2luZyA9IElPU3VyZmFjZTo6Y3JlYXRlKGdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKQEAgLTU3Niw3ICs1NzYsNyBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVy
QmFja2luZygpCiAgICAgcmV0dXJuIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhXVEZNb3ZlKGJh
Y2tpbmcpLCBwYnVmZmVyKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZERpc3BsYXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGJhY2tpbmcs
IHZvaWQqIHBidWZmZXIpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmREaXNwbGF5
QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBw
YnVmZmVyKQogewogICAgIEdDR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldCgpOwogICAgIFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0b3JlQmlu
ZGluZyhkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCh0ZXh0
dXJlVGFyZ2V0KSwgdGV4dHVyZVRhcmdldCwgdGV4dHVyZVRhcmdldCAhPSBURVhUVVJFX1JFQ1RB
TkdMRV9BUkIpOwpAQCAtNTkwLDcgKzU5MCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VD
dXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgZGlzcGxheSwgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCBjb250ZXh0KQogewogICAgIGN1cnJlbnRDb250ZXh0ID0g
bnVsbHB0cjsKICAgICByZXR1cm4gRUdMX01ha2VDdXJyZW50KGRpc3BsYXksIEVHTF9OT19TVVJG
QUNFLCBFR0xfTk9fU1VSRkFDRSwgY29udGV4dCk7CkBAIC01OTgsNyArNTk4LDcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHRHTERpc3BsYXkgZGlzcGwKIAogdm9pZCogR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6Y3JlYXRl
UGJ1ZmZlckFuZEF0dGFjaElPU3VyZmFjZShHQ0dMZW51bSB0YXJnZXQsIFBidWZmZXJBdHRhY2ht
ZW50VXNhZ2UgdXNhZ2UsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiBzdXJmYWNlLCBH
Q0dMdWludCBwbGFuZSkKIHsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpKSB7CisgICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpKSB7CiAg
ICAgICAgIExPRyhXZWJHTCwgIlVua25vd24gdGV4dHVyZSB0YXJnZXQgJWQuIiwgc3RhdGljX2Nh
c3Q8aW50Pih0YXJnZXQpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNjY3
LDI0ICs2NjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmRldGFjaElPU3VyZmFj
ZUZyb21TaGFyZWRUZXh0dXJlKHZvaWQqIGhhbmRsZSkKIH0KICNlbmRpZgogCi1ib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9pc0ZvcldlYkdMMjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2lt
dWxhdGVFdmVudEZvclRlc3RpbmcoU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nIGV2ZW50KQotewot
ICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkNvbnRleHRDaGFuZ2Up
IHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2Vy
KCkuZGlzcGxheVdhc1JlY29uZmlndXJlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1cmUp
IHsKLSAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRp
c3BsYXkoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlRm9yRGlzcGxheSgp
CiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQogICAgICAgICByZXR1cm47CkBAIC03MjQs
MTUgKzcwNywxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlRm9yRGlz
cGxheSgpCiAKIAogI2lmIEVOQUJMRShWSURFTykKLUdyYXBoaWNzQ29udGV4dEdMQ1YqIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKCkKK0dyYXBoaWNzQ29udGV4dEdMQ1YqIEdyYXBoaWNz
Q29udGV4dEdMQ29jb2E6OmFzQ1YoKQogewogICAgIGlmICghbV9jdikKLSAgICAgICAgbV9jdiA9
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgbV9jdiA9
IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6Y3JlYXRlKCp0aGlzKTsKICAgICByZXR1cm4gbV9j
di5nZXQoKTsKIH0KICNlbmRpZgogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRzKCkKK3N0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRDb21wb3NpdGVkUmVzdWx0
cygpCiB7CiAgICAgYXV0byYgZGlzcGxheUJ1ZmZlciA9IG1fc3dhcENoYWluLmRpc3BsYXlCdWZm
ZXIoKTsKICAgICBpZiAoIWRpc3BsYXlCdWZmZXIuc3VyZmFjZSB8fCAhZGlzcGxheUJ1ZmZlci5o
YW5kbGUpCkBAIC03NjQsNyArNzQ3LDcgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCiB9CiAKICNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQotUmVmUHRyPE1lZGlhU2FtcGxlPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUoKQorUmVmUHRyPE1l
ZGlhU2FtcGxlPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9NZWRpYVNhbXBsZSgpCiB7CiAgICAgYXV0byAmZGlzcGxheUJ1ZmZlciA9IG1fc3dhcENoYWlu
LmRpc3BsYXlCdWZmZXIoKTsKICAgICBpZiAoIWRpc3BsYXlCdWZmZXIuc3VyZmFjZSB8fCAhZGlz
cGxheUJ1ZmZlci5oYW5kbGUpCkBAIC03NzksNyArNzYyLDcgQEAgUmVmUHRyPE1lZGlhU2FtcGxl
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFT
YW1wbGUKIH0KICNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9y
bVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpw
bGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKQogewogICAgIGN1cnJlbnRDb250ZXh0ID0g
bnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4YmM2MGYyYTdjZmM1MTM4MGIxNzk4ZThiNjZjYTA2ZmU3ZDRhODY0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw2ODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmgiCi0KLSNpZiBF
TkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLQotI2lu
Y2x1ZGUgIkFOR0xFVXRpbGl0aWVzQ29jb2EuaCIKLSNpbmNsdWRlICJGb3VyQ0MuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNp
bmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29j
b2EvSU9TdXJmYWNlU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi9jZi9UeXBlQ2FzdHNDRi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
LQotI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIHsKLSAg
ICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0
dXJlU2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAgICJ1bmlm
b3JtIGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRl
OyIKLSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZvaWQg
bWFpbigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24s
IDAsIDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9u
ICogLjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAgICAgICBu
b3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKLSAgICAi
ICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIKLSAgICAiICAg
IHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIn0iX3MK
LX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmVSZWN0
YW5nbGUgewotICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKLSAgICAidW5pZm9ybSB2
ZWMyIHVfeVRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0dXJlU2l6ZTsi
Ci0gICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVy
ZUNvb3JkaW5hdGU7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIK
LSAgICAidm9pZCBtYWluKCkiCi0gICAgInsiCi0gICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQo
YV9wb3NpdGlvbiwgMCwgMS4wKTsiCi0gICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQb3NpdGlvbiA9
IGFfcG9zaXRpb24gKiAuNSArIC41OyIKLSAgICAiICAgIGlmICh1X2ZsaXBZID09IDEpIgotICAg
ICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXplZFBvc2l0aW9u
Lnk7IgotICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb24g
KiB1X3lUZXh0dXJlU2l6ZTsiCi0gICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5hdGUgPSBub3Jt
YWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgotICAgICJ9Il9zCi19OwotCi1jb25z
dGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKLSAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgotICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0dXJlOyIKLSAg
ICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9j
b2xvck1hdHJpeDsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4o
KSIKLSAgICAieyIKLSAgICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVy
ZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKLSAgICAiICAgIHl1di5n
YiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRlKS5yZzsiCi0g
ICAgIiAgICB5dXYuYSA9IDEuMDsiCi0gICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5dXYgKiB1X2Nv
bG9yTWF0cml4OyIKLSAgICAifSJfcwotfTsKLQotc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKLSAgICAicHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7IgotICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsiCi0gICAgInVu
aWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCi0gICAgInVuaWZvcm0gbWF0NCB1X2Nv
bG9yTWF0cml4OyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIKLSAg
ICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZvaWQgbWFpbigp
IgotICAgICJ7IgotICAgICIgICAgdmVjNCB5dXY7IgotICAgICIgICAgeXV2LnIgPSB0ZXh0dXJl
MkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKLSAgICAiICAgIHl1
di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSku
cmc7IgotICAgICIgICAgeXV2LmEgPSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2
ICogdV9jb2xvck1hdHJpeDsiCi0gICAgIn0iX3MKLX07Ci0KLWVudW0gY2xhc3MgUGl4ZWxSYW5n
ZSB7Ci0gICAgVW5rbm93biwKLSAgICBWaWRlbywKLSAgICBGdWxsLAotfTsKLQotZW51bSBjbGFz
cyBUcmFuc2ZlckZ1bmN0aW9uQ1YgewotICAgIFVua25vd24sCi0gICAga0lUVV9SXzcwOV8yLAot
ICAgIGtJVFVfUl82MDFfNCwKLSAgICBrU01QVEVfMjQwTV8xOTk1LAotICAgIGtEQ0lfUDMsCi0g
ICAga1AzX0Q2NSwKLSAgICBrSVRVX1JfMjAyMCwKLX07Ci0KLXN0YXRpYyBQaXhlbFJhbmdlIHBp
eGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQotewotICAgIHN3aXRj
aCAocGl4ZWxGb3JtYXQpIHsKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80NDQ0QVlwQ2JD
cjg6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoKLSAgICBjYXNl
IGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Ci0gICAgY2FzZSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6Ci0gICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6Ci0gICAg
Y2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6Ci0j
aWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Ci0j
ZW5kaWYKLSAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOwotICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6Ci0gICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
XzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5
cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKLSNpZiBIQVZFKENPUkVWSURFT19DT01Q
UkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV9B
R1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgotI2VuZGlmCi0gICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpGdWxsOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQaXhlbFJhbmdl
OjpVbmtub3duOwotICAgIH0KLX0KLQotc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2Zl
ckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCi17Ci0gICAgaWYgKCFzdHJp
bmcpCi0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247Ci0gICAgaWYg
KENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzcwOV8yKSkK
LSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yOwotICAgIGlm
IChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl82MDFfNCkp
Ci0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFfNDsKLSAgICBp
ZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8x
OTk1KSkKLSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRFXzI0ME1fMTk5
NTsKLSAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9E
Q0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9EQ0lf
UDMpKQotICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1AzOwotICAgIGlm
IChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSgpICYm
IENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSkpCi0gICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7Ci0gICAgaWYgKGNhbkxvYWRf
Q29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgpICYmIENGRXF1
YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjApKQotICAgICAg
ICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKLSAgICByZXR1cm4gVHJh
bnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotfQotCi1zdHJ1Y3QgR0xmbG9hdENvbG9yIHsKLSAg
ICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBHTGZsb2F0IHI7Ci0gICAg
ICAgICAgICBHTGZsb2F0IGc7Ci0gICAgICAgICAgICBHTGZsb2F0IGI7Ci0gICAgICAgIH0gcmdi
OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCB5OwotICAgICAgICAgICAg
R0xmbG9hdCBjYjsKLSAgICAgICAgICAgIEdMZmxvYXQgY3I7Ci0gICAgICAgIH0geWNiY3I7Ci0g
ICAgfTsKLQotICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBHTGZsb2F0IGcs
IEdMZmxvYXQgYikKLSAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KLSAgICB7Ci0gICAgfQotCi0g
ICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBHTGZsb2F0IHNj
YWxlKQotICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8gc2NhbGV9Ci0g
ICAgewotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdCBhYnMoR0xmbG9hdCB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA+PSAwID8gdmFsdWUgOiAtdmFsdWU7
Ci0gICAgfQotCi0gICAgY29uc3RleHByIGJvb2wgaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhjb25z
dCBHTGZsb2F0Q29sb3ImIGNvbG9yLCBHTGZsb2F0IG1heERlbHRhKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFicyhyZ2IuciAtIGNvbG9yLnJnYi5yKSA8IGFicyhtYXhEZWx0YSkKLSAg
ICAgICAgICAgICYmIGFicyhyZ2IuZyAtIGNvbG9yLnJnYi5nKSA8IGFicyhtYXhEZWx0YSkKLSAg
ICAgICAgICAgICYmIGFicyhyZ2IuYiAtIGNvbG9yLnJnYi5iKSA8IGFicyhtYXhEZWx0YSk7Ci0g
ICAgfQotfTsKLQotc3RydWN0IEdMZmxvYXRDb2xvcnMgewotICAgIHN0YXRpYyBjb25zdGV4cHIg
R0xmbG9hdENvbG9yIGJsYWNrICAgezAsIDAsIDB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR0xm
bG9hdENvbG9yIHdoaXRlICAgezEsIDEsIDF9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9h
dENvbG9yIHJlZCAgICAgezEsIDAsIDB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdENv
bG9yIGdyZWVuICAgezAsIDEsIDB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9y
IGJsdWUgICAgezAsIDAsIDF9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9yIGN5
YW4gICAgezAsIDEsIDF9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9yIG1hZ2Vu
dGEgezEsIDAsIDF9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9yIHllbGxvdyAg
ezEsIDEsIDB9OwotfTsKLQotc3RydWN0IFlDYkNyTWF0cml4IHsKLSAgICAgICAgR0xmbG9hdCBy
b3dzWzRdWzRdOwotCi0gICAgY29uc3RleHByIFlDYkNyTWF0cml4KFBpeGVsUmFuZ2UsIEdMZmxv
YXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KTsKLQotICAgIG9wZXJhdG9y
IGNvbnN0IEdMZmxvYXQqKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAmcm93c1swXVsw
XTsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgR0xmbG9hdENvbG9yIG9wZXJhdG9yKihjb25zdCBH
TGZsb2F0Q29sb3ImKSBjb25zdDsKLX07Ci0KLWNvbnN0ZXhwciBZQ2JDck1hdHJpeDo6WUNiQ3JN
YXRyaXgoUGl4ZWxSYW5nZSByYW5nZSwgR0xmbG9hdCBjYkNvZWZmaWNpZW50LCBHTGZsb2F0IGNy
Q29lZmZpY2llbnQpCi0gICAgOiByb3dzIHsgfQotewotICAgIC8vIFRoZSBjb252ZXJzaW9uIGZy
b20gWUNiQ3IgLT4gUkdCIGdlbmVyYWxseSB0YWtlcyB0aGUgZm9ybToKLSAgICAvLyBZID0gS3Ig
KiBSICsgS2cgKiBHICsgS2IgKiBCCi0gICAgLy8gQ2IgPSAoQiAtIFkpIC8gKDIgKiAoMSAtIEti
KSkKLSAgICAvLyBDciA9IChSIC0gWSkgLyAoMiAqICgxIC0gS3IpKQotICAgIC8vIFdoZXJlIHRo
ZSB2YWx1ZXMgb2YgS2IgYW5kIEtyIGFyZSBkZWZpbmVkIGluIGEgc3BlY2lmaWNhdGlvbiBhbmQg
S2cgaXMgZGVyaXZlZCBmcm9tOiBLciArIEtnICsgS2IgPSAxCi0gICAgLy8KLSAgICAvLyBTb2x2
aW5nIHRoZSBhYm92ZSBlcXVhdGlvbnMgZm9yIFIsIEIsIGFuZCBHIGRlcml2ZXMgdGhlIGZvbGxv
d2luZzoKLSAgICAvLyBSID0gWSArICgyICogKDEgLSBLcikpICogQ3IKLSAgICAvLyBCID0gWSAr
ICgyICogKDEgLSBLYikpICogQ2IKLSAgICAvLyBHID0gWSAtICgyICogKDEgLSBLYikpICogKEti
IC8gS2cpICogQ2IgLSAoKDEgLSBLcikgKiAyKSAqIChLciAvIEtnKSAqIENyCi0gICAgLy8KLSAg
ICAvLyBXaGVuIHRoZSBjb2xvciB2YWx1ZXMgYXJlIFZpZGVvIHJhbmdlLCBZIGhhcyBhIHJhbmdl
IG9mIFsxNiwgMjM1XSB3aXRoIGEgd2lkdGggb2YgMjE5LCBhbmQgQ2IgJiBDciBoYXZlCi0gICAg
Ly8gYSByYW5nZSBvZiBbMTYsIDI0MF0gd2l0aCBhIHdpZHRoIG9mIDIyNC4gV2hlbiB0aGUgY29s
b3IgdmFsdWVzIGFyZSBGdWxsIHJhbmdlLCBZLCBDYiwgYW5kIENyIGFsbCBoYXZlCi0gICAgLy8g
YSByYW5nZSBvZiBbMCwgMjU1XSB3aXRoIGEgd2lkdGggb2YgMjU2LgotCi0gICAgR0xmbG9hdCBj
Z0NvZWZmaWNpZW50ID0gMSAtIGNiQ29lZmZpY2llbnQgLSBjckNvZWZmaWNpZW50OwotICAgIEdM
ZmxvYXQgeVNjYWxpbmdGYWN0b3IgPSByYW5nZSA9PSBQaXhlbFJhbmdlOjpGdWxsID8gMS5mIDog
MjU1LmYgLyAyMTkuZjsKLSAgICBHTGZsb2F0IGNiY3JTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0g
UGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjI0LmY7Ci0KLSAgICByb3dzWzBdWzBd
ID0geVNjYWxpbmdGYWN0b3I7Ci0gICAgcm93c1swXVsxXSA9IDA7Ci0gICAgcm93c1swXVsyXSA9
IGNiY3JTY2FsaW5nRmFjdG9yICogMiAqICgxIC0gY3JDb2VmZmljaWVudCk7Ci0gICAgcm93c1sw
XVszXSA9IDA7Ci0KLSAgICByb3dzWzFdWzBdID0geVNjYWxpbmdGYWN0b3I7Ci0gICAgcm93c1sx
XVsxXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNiQ29lZmZpY2llbnQpICogKGNi
Q29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKLSAgICByb3dzWzFdWzJdID0gLWNiY3JTY2Fs
aW5nRmFjdG9yICogMiAqICgxIC0gY3JDb2VmZmljaWVudCkgKiAoY3JDb2VmZmljaWVudCAvIGNn
Q29lZmZpY2llbnQpOwotICAgIHJvd3NbMV1bM10gPSAwOwotCi0gICAgcm93c1syXVswXSA9IHlT
Y2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMl1bMV0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAo
MSAtIGNiQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMl1bMl0gPSAwOwotICAgIHJvd3NbMl1bM10g
PSAwOwotCi0gICAgcm93c1szXVswXSA9IDA7Ci0gICAgcm93c1szXVsxXSA9IDA7Ci0gICAgcm93
c1szXVsyXSA9IDA7Ci0gICAgcm93c1szXVszXSA9IDE7Ci0KLSAgICAvLyBDb25maWd1cmUgdGhl
IGZpbmFsIGNvbHVtbiBvZiB0aGUgbWF0cml4IHRvIGNvbnZlcnQgQ2IgYW5kIENyIHRvIFstMTI4
LCAxMjhdCi0gICAgLy8gYW5kLCBpbiB0aGUgY2FzZSBvZiB2aWRlby1yYW5nZSwgdG8gY29udmVy
dCBZIHRvIFsxNiwgMjQwXToKLSAgICBmb3IgKGF1dG8gcm93TnVtYmVyID0gMDsgcm93TnVtYmVy
IDwgMzsgKytyb3dOdW1iZXIpIHsKLSAgICAgICAgYXV0byYgcm93ID0gcm93c1tyb3dOdW1iZXJd
OwotICAgICAgICBhdXRvJiB4ID0gcm93WzBdOwotICAgICAgICBhdXRvJiB5ID0gcm93WzFdOwot
ICAgICAgICBhdXRvJiB6ID0gcm93WzJdOwotICAgICAgICBhdXRvJiB3ID0gcm93WzNdOwotCi0g
ICAgICAgIHcgLT0gKHkgKyB6KSAqIDEyOCAvIDI1NTsKLSAgICAgICAgaWYgKHJhbmdlID09IFBp
eGVsUmFuZ2U6OlZpZGVvKQotICAgICAgICAgICAgdyAtPSB4ICogMTYgLyAyNTU7Ci0gICAgfQot
fQotCi1jb25zdGV4cHIgR0xmbG9hdENvbG9yIFlDYkNyTWF0cml4OjpvcGVyYXRvciooY29uc3Qg
R0xmbG9hdENvbG9yJiBjb2xvcikgY29uc3QKLXsKLSAgICByZXR1cm4gR0xmbG9hdENvbG9yKAot
ICAgICAgICByb3dzWzBdWzBdICogY29sb3IucmdiLnIgKyByb3dzWzBdWzFdICogY29sb3Iucmdi
LmcgKyByb3dzWzBdWzJdICogY29sb3IucmdiLmIgKyByb3dzWzBdWzNdLAotICAgICAgICByb3dz
WzFdWzBdICogY29sb3IucmdiLnIgKyByb3dzWzFdWzFdICogY29sb3IucmdiLmcgKyByb3dzWzFd
WzJdICogY29sb3IucmdiLmIgKyByb3dzWzFdWzNdLAotICAgICAgICByb3dzWzJdWzBdICogY29s
b3IucmdiLnIgKyByb3dzWzJdWzFdICogY29sb3IucmdiLmcgKyByb3dzWzJdWzJdICogY29sb3Iu
cmdiLmIgKyByb3dzWzJdWzNdCi0gICAgKTsKLX0KLQotc3RhdGljIGNvbnN0IEdMZmxvYXQqIFlD
YkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24oUGl4ZWxSYW5nZSByYW5n
ZSwgVHJhbnNmZXJGdW5jdGlvbkNWIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgdXNpbmcgTWFw
S2V5ID0gc3RkOjpwYWlyPFBpeGVsUmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVj47Ci0gICAgdXNp
bmcgTWF0cml4TWFwID0gU3RkTWFwPE1hcEtleSwgY29uc3QgWUNiQ3JNYXRyaXgmPjsKLQotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNYXRyaXhNYXA+IG1hdHJpY2VzOwotICAgIHN0YXRpYyBk
aXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotCi0gICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQg
ZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgSVRVIFIuNjAxIHJldiA0IHNwZWNpZmljYXRpb24K
LSAgICAvLyBodHRwczovL3d3dy5pdHUuaW50L3JlYy9SLVJFQy1CVC42MDEKLSAgICBjb25zdGV4
cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFWaWRlb01hdHJpeCB7IFBpeGVsUmFuZ2U6OlZpZGVv
LCAwLjExNGYsIDAuMjk5ZiB9OwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggcjYw
MUZ1bGxNYXRyaXggeyBQaXhlbFJhbmdlOjpGdWxsLCAwLjExNGYsIDAuMjk5ZiB9OwotCi0gICAg
c3RhdGljX2Fzc2VydCgocjYwMVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAx
MjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAg
MS41ZiAvIDI1NS5mKSwgInIuNjEwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMVZpZGVvTWF0cml4ICogR0xmbG9hdENv
bG9yKDIzNSwgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6d2hpdGUsICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIHZpZGVvIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDgxLCAgOTAsICAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIHZpZGVv
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHJlZCBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNDUsIDU0LCAgMzQsICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig0MSwgIDI0MCwg
MTEwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsdWUsICAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVl
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMVZpZGVvTWF0cml4ICogR0xmbG9hdENv
bG9yKDIxMCwgMTYsICAxNDYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIHZpZGVvIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIHllbGxvdyBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01h
dHJpeCAqIEdMZmxvYXRDb2xvcigxMDYsIDIwMiwgMjIyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlF
cXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRl
byBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjYwMVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MCwgMTY2LCAxNiwgIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Y3lhbiwgICAgMS41ZiAvIDI1
NS5mKSwgInIuNjEwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsK
LQotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAg
MTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymxh
Y2ssICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
YmxhY2sgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoNzYsICA4NSwgIDI1NSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNTAsIDQ0LCAgMjEsICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNTUsIDEw
NywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAx
LjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjI2LCAwLCAgIDE0OSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
Ojp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigxMDUsIDIxMiwgMjM1LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJp
eCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChy
NjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDE3MSwgMSwgICAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJy
LjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIC8v
IE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjcw
OSByZXYgMiBzcGVjaWZpY2F0aW9uCi0gICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1S
RUMtQlQuNzA5LTItMTk5NTEwLVMKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3
MDlWaWRlb01hdHJpeCB7IFBpeGVsUmFuZ2U6OlZpZGVvLCAwLjA3MjIsIDAuMjEyNiB9OwotICAg
IGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggcjcwOUZ1bGxNYXRyaXggeyBQaXhlbFJhbmdl
OjpGdWxsLCAwLjA3MjIsIDAuMjEyNiB9OwotCi0gICAgc3RhdGljX2Fzc2VydCgocjcwOVZpZGVv
TWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IHZp
ZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjcwOVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNSwgMTI4LCAxMjgsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6d2hpdGUsICAgMS41ZiAvIDI1
NS5mKSwgInIuNzA5IHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYzLCAg
MTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVk
LCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNl
IHJlZCBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzMsIDQyLCAgMjYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigzMiwgIDI0MCwgMTE4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsdWUsICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjcwOVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxOSwgMTYsICAxMzgsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1
NS5mKSwgInIuNzA5IHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHllbGxvdyBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig3OCwg
IDIxNCwgMjMwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1h
Z2VudGEsIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOVZpZGVvTWF0cml4ICog
R0xmbG9hdENvbG9yKDE4OCwgMTU0LCAxNiwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6Y3lhbiwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IHZpZGVvIG1hdHJp
eCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgInIu
NzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYg
LyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNTQs
ICA5OSwgIDI1NiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpy
ZWQsICAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcigxODIsIDMwLCAgMTIsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTgsICAyNTYsIDExNiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM3LCAxLCAgIDE0MCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYp
LCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3MywgIDIyNiwg
MjQ0LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEs
IDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2Vu
dGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyMDEsIDE1NywgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZy
b20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVS1SIEJULjIwMjAtMiBzcGVjaWZpY2F0aW9uCi0g
ICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuMjAyMAotICAgIGNvbnN0ZXhw
ciBzdGF0aWMgWUNiQ3JNYXRyaXggYnQyMDIwVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRl
bywgMC4wNTkzLCAwLjI2MjcgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0
MjAyMEZ1bGxNYXRyaXggeyBQaXhlbFJhbmdlOjpGdWxsLCAwLjA1OTMsIDAuMjYyNyB9OwotCi0g
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTYsICAx
MjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFj
aywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICog
R0xmbG9hdENvbG9yKDIzNSwgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6d2hpdGUsICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig3NCwgIDk3LCAgMjQwLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiks
ICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHJlZCBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2NCwgNDcs
ICAyNSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4s
ICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Z3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigyOSwgIDI0MCwgMTE5LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmJsdWUsICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJp
eCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIw
MjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMjIsIDE2LCAgMTM3LCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJi
dC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHllbGxvdyBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDg3LCAgMjA5
LCAyMzEsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50
YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
bWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICog
R0xmbG9hdENvbG9yKDE3NywgMTU5LCAxNiwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6Y3lhbiwgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0gICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiks
ICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI1NSwgMTI4
LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6d2hpdGUs
ICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3
aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoNjcsICA5MiwgIDI1NiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIHJlZCBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCAzNiwgIDExLCAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7Ci0gICAgc3RhdGlj
X2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNSwgIDI1NiwgMTE4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsdWUsICAgIDEuNWYg
LyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjQwLCAwLCAgIDEzOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
Ojp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIHllbGxvdyBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoODIsICAyMjAsIDI0NSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4OCwgMTY0LCAxLCAgIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Y3lhbiwgICAgMS41ZiAvIDI1
NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7
Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRo
ZSBTTVBURSAyNDBNLTE5OTkgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHA6Ly9pZWVleHBsb3Jl
LmllZWUub3JnL2RvY3VtZW50LzcyOTE0NjEvCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1h
dHJpeCBzbXB0ZTI0ME1WaWRlb01hdHJpeCB7IFBpeGVsUmFuZ2U6OlZpZGVvLCAwLjA4NywgMC4y
MTIgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHNtcHRlMjQwTUZ1bGxNYXRy
aXggeyBQaXhlbFJhbmdlOjpGdWxsLCAwLjA4NywgMC4yMTIgfTsKLQotICAgIHN0YXRpY19hc3Nl
cnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAv
IDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJp
eCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21w
dGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNjIsICAxMDIsIDI0MCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYp
LCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
NzAsIDQyLCAgMjgsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzUsICAyNDAsIDExNiwgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUg
MjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjE2LCAxNiwg
IDE0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3cs
ICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcig4MSwgIDIxNCwgMjI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZp
ZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODksIDE1NCwgMTYs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5
YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBH
TGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgo
c21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDU0LCAgOTgsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDE3OSwgMzAsICAxNSwgIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0
ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIsICAyNTYsIDEx
NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAx
LjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJs
dWUgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDIzMywgMSwgICAxNDIsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgMjI2LCAyNDEsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMDEsIDE1OCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0gICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2Vu
LCBeewotICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpW
aWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxVmlkZW9NYXRyaXgp
OwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxs
LCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFfNCksIHI2MDFGdWxsTWF0cml4KTsKLSAg
ICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRy
YW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOVZpZGVvTWF0cml4KTsKLSAgICAg
ICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNm
ZXJGdW5jdGlvbkNWOjprSVRVX1JfNzA5XzIpLCByNzA5RnVsbE1hdHJpeCk7Ci0gICAgICAgIG1h
dHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1
bmN0aW9uQ1Y6OmtJVFVfUl8yMDIwKSwgYnQyMDIwVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRy
aWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0
aW9uQ1Y6OmtJVFVfUl8yMDIwKSwgYnQyMDIwRnVsbE1hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2Vz
LmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1WaWRlb01hdHJpeCk7Ci0gICAgICAgIG1h
dHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVu
Y3Rpb25DVjo6a1NNUFRFXzI0ME1fMTk5NSksIHNtcHRlMjQwTUZ1bGxNYXRyaXgpOwotICAgIH0p
OwotCi0gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGJlIGFza2VkIHRvIGhhbmRsZSBhIFBpeGVsIEZv
cm1hdCB3aG9zZSByYW5nZSB2YWx1ZSBpcyB1bmtub3duLgotICAgIEFTU0VSVChyYW5nZSAhPSBQ
aXhlbFJhbmdlOjpVbmtub3duKTsKLSAgICBpZiAocmFuZ2UgPT0gUGl4ZWxSYW5nZTo6VW5rbm93
bikKLSAgICAgICAgcmFuZ2UgPSBQaXhlbFJhbmdlOjpGdWxsOwotCi0gICAgYXV0byBpdGVyYXRv
ciA9IG1hdHJpY2VzLmdldCgpLmZpbmQoe3JhbmdlLCB0cmFuc2ZlckZ1bmN0aW9ufSk7Ci0KLSAg
ICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5jdGlvbnMgYXJlIHIuNjAxOgotICAgIGlm
IChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQoKSkKLSAgICAgICAgaXRlcmF0b3IgPSBt
YXRyaWNlcy5nZXQoKS5maW5kKHtyYW5nZSwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAx
XzR9KTsKLQotICAgIEFTU0VSVChpdGVyYXRvciAhPSBtYXRyaWNlcy5nZXQoKS5lbmQoKSk7Ci0g
ICAgcmV0dXJuIGl0ZXJhdG9yLT5zZWNvbmQ7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEU+IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y3JlYXRlKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0NvbnRleHRHTENWQU5HTEU+IGN2IHsgbmV3IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRShj
b250ZXh0KSB9OwotICAgIGlmICghY3YtPm1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIGN2OwotfQotCi1HcmFwaGljc0NvbnRleHRHTENWQU5HTEU6On5HcmFw
aGljc0NvbnRleHRHTENWQU5HTEUoKQotewotICAgIGlmICghbV9jb250ZXh0IHx8ICFHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFrZUN1cnJlbnQobV9kaXNwbGF5LCBtX2NvbnRleHQpKQotICAg
ICAgICByZXR1cm47Ci0gICAgZ2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJm1feXV2VmVydGV4QnVmZmVy
KTsKLSAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZyYW1lYnVmZmVyKTsKLSAgICBF
R0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOwotfQotCi1HcmFwaGljc0Nv
bnRleHRHTENWQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYgb3duZXIpCi0gICAgOiBtX293bmVyKG93bmVyKQotewotICAgIC8vIENyZWF0ZSBj
b21wYXRpYmxlIGNvbnRleHQgdGhhdCBzaGFyZXMgc3RhdGUgd2l0aCBvd25lciwgYnV0IG9uZSB0
aGF0IGRvZXMgbm90Ci0gICAgLy8gaGF2ZSByb2J1c3RuZXNzIG9yIFdlYkdMIGNvbXBhdGliaWxp
dHkuCi0gICAgY29uc3QgRUdMaW50IGNvbnRleHRBdHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgIEVH
TF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLAotICAgICAgICBvd25lci5tX2lzRm9yV2ViR0wyID8g
MyA6IDIsCi0gICAgICAgIEVHTF9DT05URVhUX09QRU5HTF9CQUNLV0FSRFNfQ09NUEFUSUJMRV9B
TkdMRSwKLSAgICAgICAgRUdMX0ZBTFNFLAotICAgICAgICBFR0xfQ09OVEVYVF9DTElFTlRfQVJS
QVlTX0VOQUJMRURfQU5HTEUsCi0gICAgICAgIEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRF
WFRfQklORF9HRU5FUkFURVNfUkVTT1VSQ0VfQ0hST01JVU0sCi0gICAgICAgIEVHTF9GQUxTRSwK
LSAgICAgICAgRUdMX05PTkUKLSAgICB9OwotICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IG93bmVy
LnBsYXRmb3JtRGlzcGxheSgpOwotICAgIEVHTENvbmZpZyBjb25maWcgPSBvd25lci5wbGF0Zm9y
bUNvbmZpZygpOwotICAgIEVHTENvbnRleHQgY29udGV4dCA9IEVHTF9DcmVhdGVDb250ZXh0KGRp
c3BsYXksIGNvbmZpZywgb3duZXIubV9jb250ZXh0T2JqLCBjb250ZXh0QXR0cmlidXRlcyk7Ci0g
ICAgaWYgKGNvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpCi0gICAgICAgIHJldHVybjsKLSAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUN1cnJlbnQoZGlzcGxheSwgY29udGV4dCk7Ci0K
LSAgICBhdXRvIGNvbnRleHRDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSwgY29udGV4
dF0gewotICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUN1cnJlbnQoZGlzcGxh
eSwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQoZGlzcGxheSwg
Y29udGV4dCk7Ci0gICAgfSk7Ci0KLSAgICBjb25zdCBib29sIHVzZVRleHR1cmUyRCA9IG1fb3du
ZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEOwotCi0jaWYg
UExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKLSAgICBpZiAoIXVzZVRleHR1
cmUyRCkgewotICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9BTkdMRV90ZXh0
dXJlX3JlY3RhbmdsZSIpOwotICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9F
WFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKLSAgICAgICAgaWYgKGdsOjpHZXRFcnJvcigp
ICE9IEdMX05PX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVS
KTsKLSAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfRlJBR01F
TlRfU0hBREVSKTsKLSAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9IGdsOjpDcmVhdGVQcm9ncmFtKCk7
Ci0gICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3ZlcnRleFNoYWRlciwg
ZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBnbDo6RGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsK
LSAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3JhbSk7Ci0gICAgfSk7Ci0gICAgLy8g
VGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJlIGNvbXBpbGUtdGltZS4KLSAgICBH
TGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJE
Lmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOwot
ICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRl
eHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlLmxl
bmd0aCgpOwotICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUy
RCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlOwotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlID0gdXNlVGV4
dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCA6IHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlUmVjdGFuZ2xlOwotCi0gICAgZ2w6OlNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIs
IDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7Ci0gICAgZ2w6OlNoYWRlclNvdXJj
ZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAmZnNMZW5ndGgpOwot
ICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgZ2w6OkNvbXBpbGVTaGFk
ZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsOjpBdHRhY2hTaGFkZXIoeXV2UHJvZ3JhbSwgdmVy
dGV4U2hhZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIGZyYWdtZW50U2hh
ZGVyKTsKLSAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3JhbSk7Ci0gICAgLy8gTGluayBzdGF0
dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0aWNhbCBwYXJhbGxlbCBjb21waWxh
dGlvbiBiZW5lZml0LgotCi0gICAgR0x1aW50IHl1dlZlcnRleEJ1ZmZlciA9IDA7Ci0gICAgZ2w6
OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7Ci0gICAgYXV0byB5dXZWZXJ0ZXhCdWZm
ZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4QnVmZmVyXSB7Ci0gICAgICAgIGds
OjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIH0pOwotICAgIGZsb2F0
IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwgMSwgMSwgMSwgLTEsIDEsIC0xLCAt
MSB9OwotICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgeXV2VmVydGV4QnVmZmVy
KTsKLSAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0aWNlcyks
IHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7Ci0KLSAgICBHTHVpbnQgZnJhbWVidWZmZXIgPSAw
OwotICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKLSAgICBhdXRvIGZy
YW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2ZyYW1lYnVmZmVyXSB7Ci0gICAgICAg
IGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKLSAgICB9KTsKLQotICAg
IEdMaW50IHN0YXR1cyA9IDA7Ci0gICAgZ2w6OkdldFByb2dyYW1pdlJvYnVzdEFOR0xFKHl1dlBy
b2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAmc3RhdHVzKTsKLSAgICBpZiAoIXN0
YXR1cykgewotICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRTaGFk
ZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsIDEsIG51bGxw
dHIsICZ2c1N0YXR1cyk7Ci0gICAgICAgIEdMaW50IGZzU3RhdHVzID0gMDsKLSAgICAgICAgZ2w6
OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVT
LCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOwotICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEUoJXApIC0gWVVWIHByb2dyYW0gZmFpbGVkIHRvIGxpbms6ICVkLCAlZCwg
JWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0dXMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICB5dXZWZXJ0ZXhCdWZm
ZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBmcmFtZWJ1ZmZlckNsZWFudXAucmVsZWFzZSgpOwot
ICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7Ci0gICAgbV9jb250ZXh0ID0gY29udGV4dDsKLSAgICBt
X2NvbmZpZyA9IGNvbmZpZzsKLSAgICBtX3l1dlZlcnRleEJ1ZmZlciA9IHl1dlZlcnRleEJ1ZmZl
cjsKLSAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7Ci0gICAgbV95VGV4dHVyZVVuaWZv
cm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1
cmUiKTsKLSAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9j
YXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7Ci0gICAgbV9jb2xvck1hdHJpeFVuaWZv
cm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfY29sb3JN
YXRyaXgiKTsKLSAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1M
b2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOwotICAgIG1feVRleHR1cmVTaXplVW5pZm9y
bUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV95VGV4dHVy
ZVNpemUiKTsKLSAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5p
Zm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZVNpemUiKTsKLSAgICBtX3l1dlBv
c2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0cmliTG9jYXRpb24oeXV2UHJvZ3Jh
bSwgImFfcG9zaXRpb24iKTsKLSAgICAvLyBQcm9ncmFtIGlzIGRlbGV0ZWQgYnkgdGhlIGNsZWFu
dXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGluIHVzZS4KLSAgICBnbDo6VXNlUHJv
Z3JhbSh5dXZQcm9ncmFtKTsKLSAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV95dXZQ
b3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKLSAgICBnbDo6VmVydGV4QXR0cmliUG9pbnRlciht
X3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7
Ci0gICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgZ2w6OkJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBp
bWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgRmxpcFkgZmxpcFkp
Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgJzQyMHYnIGFu
ZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUgc3VwcG9ydGluZyBtb3JlIHBpeGVs
IGZvcm1hdHMuCi0gICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVs
Rm9ybWF0VHlwZShpbWFnZSk7Ci0gICAgaWYgKHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0
VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlCi0gICAgICAgICYmIHBpeGVsRm9ybWF0
ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UKLSNpZiBI
QVZFKENPUkVWSURFT19DT01QUkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKLSAgICAgICAgJiYg
cGl4ZWxGb3JtYXQgIT0ga0NWUGl4ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJW
aWRlb1JhbmdlCi0gICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9B
R1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jZW5kaWYKLSAgICAgICAgKSB7Ci0gICAg
ICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVy
ZVRvUGxhdGZvcm1UZXh0dXJlKCVwKSAtIEFza2VkIHRvIGNvcHkgYW4gdW5zdXBwb3J0ZWQgcGl4
ZWwgZm9ybWF0ICgnJXMnKS4iLCB0aGlzLCBGb3VyQ0MocGl4ZWxGb3JtYXQpLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgSU9TdXJm
YWNlUmVmIHN1cmZhY2UgPSBDVlBpeGVsQnVmZmVyR2V0SU9TdXJmYWNlKGltYWdlKTsKLSAgICBp
ZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gbmV3U3VyZmFj
ZVNlZWQgPSBJT1N1cmZhY2VHZXRTZWVkKHN1cmZhY2UpOwotICAgIGlmIChmbGlwWSA9PSBtX2xh
c3RGbGlwWQotICAgICAgICAmJiBzdXJmYWNlID09IG1fbGFzdFN1cmZhY2UKLSAgICAgICAgJiYg
bmV3U3VyZmFjZVNlZWQgPT0gbV9sYXN0U3VyZmFjZVNlZWQKLSAgICAgICAgJiYgbGFzdFRleHR1
cmVTZWVkKG91dHB1dFRleHR1cmUpID09IG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVy
ZSkpIHsKLSAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaGFzbid0IGJlZW4gbW9kaWZpZWQgc2lu
Y2UgdGhlIGxhc3QgdGltZSB3ZSBjb3BpZWQgdG8gaXQsIGFuZCB0aGUKLSAgICAgICAgLy8gaW1h
Z2UgaGFzbid0IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QgdGltZSBpdCB3YXMgY29waWVk
LCB0aGlzIGlzIGEgbm8tb3AuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAo
IW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlz
cGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2l6ZV90IHdp
ZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKGltYWdlKTsKLSAgICBzaXplX3QgaGVpZ2h0ID0g
Q1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFnZSk7Ci0KLSAgICBnbDo6Vmlld3BvcnQoMCwgMCwg
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICAvLyBUaGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWlu
IHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBlYXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcwot
ICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVycm9yIGlzIG5vdCByZXNldC4KLSAgICBhdXRvIGF1
dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFrZVNjb3BlRXhpdChbb3V0cHV0VGV4dHVyZSwgbGV2
ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGVdIHsKLSAgICAgICAgZ2w6OkJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgICAgICBnbDo6VGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwg
dHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKLSAgICB9KTsKLSAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVy
ZS4KLSAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7Ci0g
ICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2w6
OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1Q
X1RPX0VER0UpOwotICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRl
cm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKLQot
ICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRU
QUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsKLSAgICBHTGVu
dW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOwot
ICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgTE9H
KFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0
Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0
VGV4dHVyZS4iLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBnbDo6
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBCaW5kIGFuZCBzZXQgdXAg
dGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8gc291cmNlLgotICAgIGF1dG8geVBsYW5lV2lkdGgg
PSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUoc3VyZmFjZSwgMCk7Ci0gICAgYXV0byB5UGxhbmVI
ZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8g
dXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDEpOwotICAg
IGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodE9mUGxhbmUoc3VyZmFjZSwg
MSk7Ci0KLSAgICBHTGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gbV9vd25lci5kcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCgpOwotCi0gICAgR0x1aW50IHV2VGV4dHVyZSA9IDA7Ci0gICAgZ2w6
OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUpOwotICAgIGF1dG8gdXZUZXh0dXJlQ2xlYW51cCA9
IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMo
MSwgJnV2VGV4dHVyZSk7Ci0gICAgfSk7Ci0gICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTEpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7
Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBh
cmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgYXV0byB1dkhhbmRsZSA9IFdl
YkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZp
ZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xf
UkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFj
ZSwgMSk7Ci0gICAgaWYgKCF1dkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1
dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwg
dXZIYW5kbGVdIHsKLSAgICAgICAgV2ViQ29yZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1
cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOwotICAgIH0pOwotCi0gICAgR0x1aW50IHlUZXh0dXJl
ID0gMDsKLSAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJnlUZXh0dXJlKTsKLSAgICBhdXRvIHlUZXh0
dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3lUZXh0dXJlXSB7Ci0gICAgICAgIGdsOjpEZWxl
dGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJl
KEdMX1RFWFRVUkUwKTsKLSAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB5
VGV4dHVyZSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFy
Z2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgYXV0byB5SGFu
ZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZlckFuZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXks
IG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJnZXQsIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FO
R0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUs
IHN1cmZhY2UsIDApOwotICAgIGlmICgheUhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNw
bGF5LCB5SGFuZGxlXSB7Ci0gICAgICAgIGRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNl
KGRpc3BsYXksIHlIYW5kbGUpOwotICAgIH0pOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3
aW5nIHBhcmFtZXRlcnMuCi0gICAgZ2w6OlVuaWZvcm0xaShtX3lUZXh0dXJlVW5pZm9ybUxvY2F0
aW9uLCAwKTsKLSAgICBnbDo6VW5pZm9ybTFpKG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAx
KTsKLSAgICBnbDo6VW5pZm9ybTFpKG1feXV2RmxpcFlVbmlmb3JtTG9jYXRpb24sIGZsaXBZID09
IEZsaXBZOjpZZXMgPyAxIDogMCk7Ci0gICAgZ2w6OlVuaWZvcm0yZihtX3lUZXh0dXJlU2l6ZVVu
aWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCk7Ci0gICAgZ2w6OlVuaWZv
cm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24sIHV2UGxhbmVXaWR0aCwgdXZQbGFu
ZUhlaWdodCk7Ci0KLSAgICBhdXRvIHJhbmdlID0gcGl4ZWxSYW5nZUZyb21QaXhlbEZvcm1hdChw
aXhlbEZvcm1hdCk7Ci0gICAgYXV0byB0cmFuc2ZlckZ1bmN0aW9uID0gdHJhbnNmZXJGdW5jdGlv
bkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDVkJ1ZmZlckdldEF0dGFj
aG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXksIG5pbCkpKTsKLSAgICBh
dXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JHQk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5j
dGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbik7Ci0gICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYo
bV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiwgMSwgR0xfRkFMU0UsIGNvbG9yTWF0cml4KTsK
LQotICAgIC8vIERvIHRoZSBhY3R1YWwgZHJhd2luZy4KLSAgICBnbDo6RHJhd0FycmF5cyhHTF9U
UklBTkdMRVMsIDAsIDYpOwotCi0gICAgbV9sYXN0U3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgbV9s
YXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNlU2VlZDsKLSAgICBtX2xhc3RUZXh0dXJlU2VlZC5z
ZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7Ci0g
ICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKLSAgICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjE0ZDNiYmNlOTk1
MTFkNDMwMWYxMjUxYjcwNWYyZGU0ZGQ2NjAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUo
VklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TENWLmgiCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL1Vuc2FmZVBvaW50ZXIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7
Ci0KLS8vIEdyYXBoaWNzQ29udGV4dEdMQ1YgaW1wbGVtZW50YXRpb24gZm9yIEFOR0xFIGZsYXZv
dXIgb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0vLyBUaGlzIGNsYXNzIGlzIHBhcnQgb2Yg
dGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGZv
ciBBTkdMRSBDb2NvYS4KLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSBmaW5hbCA6IHB1
YmxpYyBHcmFwaGljc0NvbnRleHRHTENWIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB+R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFKCkgZmluYWw7Ci0KLSAgICBib29sIGNvcHlQaXhlbEJ1ZmZlclRvVGV4
dHVyZShDVlBpeGVsQnVmZmVyUmVmLCBQbGF0Zm9ybUdMT2JqZWN0IG91dHB1dFRleHR1cmUsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEZsaXBZKSBmaW5hbDsKLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRl
eHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKLQotICAgIHVuc2lnbmVkIGxh
c3RUZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
bGFzdFRleHR1cmVTZWVkLmdldCh0ZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCYgbV9vd25lcjsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxh
eSBtX2Rpc3BsYXkgeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBt
X2NvbnRleHQgeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZp
ZyBtX2NvbmZpZyB7IG51bGxwdHIgfTsKLQotICAgIFBsYXRmb3JtR0xPYmplY3QgbV9mcmFtZWJ1
ZmZlciB7IDAgfTsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1feXV2VmVydGV4QnVmZmVyIHsgMCB9
OwotICAgIEdDR0xpbnQgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NH
TGludCBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX3l1
dkZsaXBZVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1fY29sb3JNYXRyaXhV
bmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZQb3NpdGlvbkF0dHJpYnV0
ZUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0
aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1fdXZUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7
IC0xIH07Ci0KLSAgICBGbGlwWSBtX2xhc3RGbGlwWSB7IEZsaXBZOjpObyB9OwotICAgIFVuc2Fm
ZVBvaW50ZXI8SU9TdXJmYWNlUmVmPiBtX2xhc3RTdXJmYWNlOwotICAgIHVpbnQzMl90IG1fbGFz
dFN1cmZhY2VTZWVkIHsgMCB9OwotCi0gICAgdXNpbmcgVGV4dHVyZVNlZWRNYXAgPSBIYXNoTWFw
PEdDR0x1aW50LCB1bnNpZ25lZCwgSW50SGFzaDxHQ0dMdWludD4sIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+PjsKLSAgICBUZXh0dXJlU2VlZE1hcCBtX2xhc3RU
ZXh0dXJlU2VlZDsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iZjQxNGI2OWVjYWQyMDdiYTMyZTlmMzA0ZmE1YjBhZGRkMjllOWE0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcApAQCAtMCwwICsxLDY4OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9V
TkRBVElPTikKKworI2luY2x1ZGUgIkFOR0xFVXRpbGl0aWVzQ29jb2EuaCIKKyNpbmNsdWRlICJG
b3VyQ0MuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENvY29hLmgiCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29yZVZpZGVvU1BJLmg+CisjaW5jbHVk
ZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTWFwLmg+
CisjaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCisjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJU
ZXh0dXJlMkQgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAidW5pZm9y
bSB2ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0dXJlU2l6
ZTsiCisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4
dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRl
OyIKKyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZl
YzQoYV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQb3NpdGlv
biA9IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09IDEpIgor
ICAgICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXplZFBvc2l0
aW9uLnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRp
b247IgorICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9u
OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hh
ZGVyVGV4dHVyZVJlY3RhbmdsZSB7CisgICAgImF0dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247Igor
ICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNpemU7IgorICAgICJ1bmlmb3JtIHZlYzIgdV91
dlRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSBpbnQgdV9mbGlwWTsiCisgICAgInZhcnlpbmcg
dmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVy
ZUNvb3JkaW5hdGU7IgorICAgICJ2b2lkIG1haW4oKSIKKyAgICAieyIKKyAgICAiICAgIGdsX1Bv
c2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAxLjApOyIKKyAgICAiICAgIHZlYzIgbm9ybWFs
aXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41ICsgLjU7IgorICAgICIgICAgaWYgKHVfZmxp
cFkgPT0gMSkiCisgICAgIiAgICAgICAgbm9ybWFsaXplZFBvc2l0aW9uLnkgPSAxLjAgLSBub3Jt
YWxpemVkUG9zaXRpb24ueTsiCisgICAgIiAgICB2X3lUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1h
bGl6ZWRQb3NpdGlvbiAqIHVfeVRleHR1cmVTaXplOyIKKyAgICAiICAgIHZfdXZUZXh0dXJlQ29v
cmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbiAqIHVfdXZUZXh0dXJlU2l6ZTsiCisgICAgIn0i
X3MKK307CisKK2NvbnN0ZXhwciBhdXRvIHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgewor
ICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsiCisgICAgInVuaWZvcm0gc2FtcGxlcjJEIHVf
eVRleHR1cmU7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3V2VGV4dHVyZTsiCisgICAgInVu
aWZvcm0gbWF0NCB1X2NvbG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVD
b29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZvaWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAg
eXV2LnIgPSB0ZXh0dXJlMkQodV95VGV4dHVyZSwgdl95VGV4dHVyZUNvb3JkaW5hdGUpLnI7Igor
ICAgICIgICAgeXV2LmdiID0gdGV4dHVyZTJEKHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3Jk
aW5hdGUpLnJnOyIKKyAgICAiICAgIHl1di5hID0gMS4wOyIKKyAgICAiICAgIGdsX0ZyYWdDb2xv
ciA9IHl1diAqIHVfY29sb3JNYXRyaXg7IgorICAgICJ9Il9zCit9OworCitzdGF0aWMgY29uc3Rl
eHByIGF1dG8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmVSZWN0YW5nbGUgeworICAgICJwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsiCisgICAgInVuaWZvcm0gc2FtcGxlcjJEUmVjdCB1X3lUZXh0
dXJlOyIKKyAgICAidW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfdXZUZXh0dXJlOyIKKyAgICAidW5p
Zm9ybSBtYXQ0IHVfY29sb3JNYXRyaXg7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNv
b3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKKyAg
ICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICB2ZWM0IHl1djsiCisgICAgIiAgICB5
dXYuciA9IHRleHR1cmUyRFJlY3QodV95VGV4dHVyZSwgdl95VGV4dHVyZUNvb3JkaW5hdGUpLnI7
IgorICAgICIgICAgeXV2LmdiID0gdGV4dHVyZTJEUmVjdCh1X3V2VGV4dHVyZSwgdl91dlRleHR1
cmVDb29yZGluYXRlKS5yZzsiCisgICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9G
cmFnQ29sb3IgPSB5dXYgKiB1X2NvbG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworZW51bSBj
bGFzcyBQaXhlbFJhbmdlIHsKKyAgICBVbmtub3duLAorICAgIFZpZGVvLAorICAgIEZ1bGwsCit9
OworCitlbnVtIGNsYXNzIFRyYW5zZmVyRnVuY3Rpb25DViB7CisgICAgVW5rbm93biwKKyAgICBr
SVRVX1JfNzA5XzIsCisgICAga0lUVV9SXzYwMV80LAorICAgIGtTTVBURV8yNDBNXzE5OTUsCisg
ICAga0RDSV9QMywKKyAgICBrUDNfRDY1LAorICAgIGtJVFVfUl8yMDIwLAorfTsKKworc3RhdGlj
IFBpeGVsUmFuZ2UgcGl4ZWxSYW5nZUZyb21QaXhlbEZvcm1hdChPU1R5cGUgcGl4ZWxGb3JtYXQp
Cit7CisgICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgeworICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRU
eXBlXzQ0NDRBWXBDYkNyODoKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80NDQ0QVlwQ2JD
cjE2OgorICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcl80QV84QmlQbGFuYXI6
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5n
ZToKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3IxMEJpUGxhbmFyVmlkZW9S
YW5nZToKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3IxMEJpUGxhbmFyVmlk
ZW9SYW5nZToKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80NDRZcENiQ3IxMEJpUGxhbmFy
VmlkZW9SYW5nZToKKyNpZiBIQVZFKENPUkVWSURFT19DT01QUkVTU0VEX1BJWEVMX0ZPUk1BVF9U
WVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFy
VmlkZW9SYW5nZToKKyNlbmRpZgorICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VmlkZW87Cisg
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hckZ1bGxSYW5nZToKKyAg
ICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2U6Cisg
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyOEZ1bGxSYW5nZToKKyAgICBjYXNl
IGtDVlBpeGVsRm9ybWF0VHlwZV9BUkdCMjEwMTAxMExFUGFja2VkOgorICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyAgICBjYXNlIGtD
VlBpeGVsRm9ybWF0VHlwZV80NDRZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorI2lmIEhBVkUo
Q09SRVZJREVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQorICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2U6CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OkZ1bGw7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIFBpeGVsUmFuZ2U6OlVua25vd247CisgICAgfQorfQorCitzdGF0aWMgVHJhbnNmZXJGdW5j
dGlvbkNWIHRyYW5zZmVyRnVuY3Rpb25Gcm9tU3RyaW5nKENGU3RyaW5nUmVmIHN0cmluZykKK3sK
KyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6VW5r
bm93bjsKKyAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhf
SVRVX1JfNzA5XzIpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1Jf
NzA5XzI7CisgICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4
X0lUVV9SXzYwMV80KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9S
XzYwMV80OworICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJp
eF9TTVBURV8yNDBNXzE5OTUpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpr
U01QVEVfMjQwTV8xOTk1OworICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZl
cllDYkNyTWF0cml4X0RDSV9QMygpICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllD
YkNyTWF0cml4X0RDSV9QMykpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtE
Q0lfUDM7CisgICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRy
aXhfUDNfRDY1KCkgJiYgQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhf
UDNfRDY1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1AzX0Q2NTsKKyAg
ICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8y
MDIwKCkgJiYgQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1Jf
MjAyMCkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl8yMDIwOwor
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247Cit9CisKK3N0cnVjdCBHTGZs
b2F0Q29sb3IgeworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEdM
ZmxvYXQgcjsKKyAgICAgICAgICAgIEdMZmxvYXQgZzsKKyAgICAgICAgICAgIEdMZmxvYXQgYjsK
KyAgICAgICAgfSByZ2I7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0IHk7
CisgICAgICAgICAgICBHTGZsb2F0IGNiOworICAgICAgICAgICAgR0xmbG9hdCBjcjsKKyAgICAg
ICAgfSB5Y2JjcjsKKyAgICB9OworCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihHTGZsb2F0
IHIsIEdMZmxvYXQgZywgR0xmbG9hdCBiKQorICAgICAgICA6IHJnYiB7IHIsIGcsIGIgfQorICAg
IHsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgR0xmbG9hdENvbG9yKGludCByLCBpbnQgZywgaW50
IGIsIEdMZmxvYXQgc2NhbGUpCisgICAgICAgIDogcmdiIHsgciAvIHNjYWxlLCBnIC8gc2NhbGUs
IGIgLyBzY2FsZSB9CisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9h
dCBhYnMoR0xmbG9hdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA+PSAwID8g
dmFsdWUgOiAtdmFsdWU7CisgICAgfQorCisgICAgY29uc3RleHByIGJvb2wgaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhjb25zdCBHTGZsb2F0Q29sb3ImIGNvbG9yLCBHTGZsb2F0IG1heERlbHRhKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFicyhyZ2IuciAtIGNvbG9yLnJnYi5yKSA8IGFi
cyhtYXhEZWx0YSkKKyAgICAgICAgICAgICYmIGFicyhyZ2IuZyAtIGNvbG9yLnJnYi5nKSA8IGFi
cyhtYXhEZWx0YSkKKyAgICAgICAgICAgICYmIGFicyhyZ2IuYiAtIGNvbG9yLnJnYi5iKSA8IGFi
cyhtYXhEZWx0YSk7CisgICAgfQorfTsKKworc3RydWN0IEdMZmxvYXRDb2xvcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9yIGJsYWNrICAgeyAwLCAwLCAwIH07CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3Igd2hpdGUgICB7IDEsIDEsIDEgfTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciByZWQgICAgIHsgMSwgMCwgMCB9OworICAgIHN0YXRp
YyBjb25zdGV4cHIgR0xmbG9hdENvbG9yIGdyZWVuICAgeyAwLCAxLCAwIH07CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IgYmx1ZSAgICB7IDAsIDAsIDEgfTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAgIHsgMCwgMSwgMSB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR0xmbG9hdENvbG9yIG1hZ2VudGEgeyAxLCAwLCAxIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IgeWVsbG93ICB7IDEsIDEsIDAgfTsKK307CisKK3N0cnVjdCBZ
Q2JDck1hdHJpeCB7CisgICAgR0xmbG9hdCByb3dzWzRdWzRdOworCisgICAgY29uc3RleHByIFlD
YkNyTWF0cml4KFBpeGVsUmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNv
ZWZmaWNpZW50KTsKKworICAgIG9wZXJhdG9yIGNvbnN0IEdMZmxvYXQqKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAmcm93c1swXVswXTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgR0xm
bG9hdENvbG9yIG9wZXJhdG9yKihjb25zdCBHTGZsb2F0Q29sb3ImKSBjb25zdDsKK307CisKK2Nv
bnN0ZXhwciBZQ2JDck1hdHJpeDo6WUNiQ3JNYXRyaXgoUGl4ZWxSYW5nZSByYW5nZSwgR0xmbG9h
dCBjYkNvZWZmaWNpZW50LCBHTGZsb2F0IGNyQ29lZmZpY2llbnQpCisgICAgOiByb3dzIHsgfQor
eworICAgIC8vIFRoZSBjb252ZXJzaW9uIGZyb20gWUNiQ3IgLT4gUkdCIGdlbmVyYWxseSB0YWtl
cyB0aGUgZm9ybToKKyAgICAvLyBZID0gS3IgKiBSICsgS2cgKiBHICsgS2IgKiBCCisgICAgLy8g
Q2IgPSAoQiAtIFkpIC8gKDIgKiAoMSAtIEtiKSkKKyAgICAvLyBDciA9IChSIC0gWSkgLyAoMiAq
ICgxIC0gS3IpKQorICAgIC8vIFdoZXJlIHRoZSB2YWx1ZXMgb2YgS2IgYW5kIEtyIGFyZSBkZWZp
bmVkIGluIGEgc3BlY2lmaWNhdGlvbiBhbmQgS2cgaXMgZGVyaXZlZCBmcm9tOiBLciArIEtnICsg
S2IgPSAxCisgICAgLy8KKyAgICAvLyBTb2x2aW5nIHRoZSBhYm92ZSBlcXVhdGlvbnMgZm9yIFIs
IEIsIGFuZCBHIGRlcml2ZXMgdGhlIGZvbGxvd2luZzoKKyAgICAvLyBSID0gWSArICgyICogKDEg
LSBLcikpICogQ3IKKyAgICAvLyBCID0gWSArICgyICogKDEgLSBLYikpICogQ2IKKyAgICAvLyBH
ID0gWSAtICgyICogKDEgLSBLYikpICogKEtiIC8gS2cpICogQ2IgLSAoKDEgLSBLcikgKiAyKSAq
IChLciAvIEtnKSAqIENyCisgICAgLy8KKyAgICAvLyBXaGVuIHRoZSBjb2xvciB2YWx1ZXMgYXJl
IFZpZGVvIHJhbmdlLCBZIGhhcyBhIHJhbmdlIG9mIFsxNiwgMjM1XSB3aXRoIGEgd2lkdGggb2Yg
MjE5LCBhbmQgQ2IgJiBDciBoYXZlCisgICAgLy8gYSByYW5nZSBvZiBbMTYsIDI0MF0gd2l0aCBh
IHdpZHRoIG9mIDIyNC4gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBGdWxsIHJhbmdlLCBZLCBD
YiwgYW5kIENyIGFsbCBoYXZlCisgICAgLy8gYSByYW5nZSBvZiBbMCwgMjU1XSB3aXRoIGEgd2lk
dGggb2YgMjU2LgorCisgICAgR0xmbG9hdCBjZ0NvZWZmaWNpZW50ID0gMSAtIGNiQ29lZmZpY2ll
bnQgLSBjckNvZWZmaWNpZW50OworICAgIEdMZmxvYXQgeVNjYWxpbmdGYWN0b3IgPSByYW5nZSA9
PSBQaXhlbFJhbmdlOjpGdWxsID8gMS5mIDogMjU1LmYgLyAyMTkuZjsKKyAgICBHTGZsb2F0IGNi
Y3JTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5m
IC8gMjI0LmY7CisKKyAgICByb3dzWzBdWzBdID0geVNjYWxpbmdGYWN0b3I7CisgICAgcm93c1sw
XVsxXSA9IDA7CisgICAgcm93c1swXVsyXSA9IGNiY3JTY2FsaW5nRmFjdG9yICogMiAqICgxIC0g
Y3JDb2VmZmljaWVudCk7CisgICAgcm93c1swXVszXSA9IDA7CisKKyAgICByb3dzWzFdWzBdID0g
eVNjYWxpbmdGYWN0b3I7CisgICAgcm93c1sxXVsxXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIg
KiAoMSAtIGNiQ29lZmZpY2llbnQpICogKGNiQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsK
KyAgICByb3dzWzFdWzJdID0gLWNiY3JTY2FsaW5nRmFjdG9yICogMiAqICgxIC0gY3JDb2VmZmlj
aWVudCkgKiAoY3JDb2VmZmljaWVudCAvIGNnQ29lZmZpY2llbnQpOworICAgIHJvd3NbMV1bM10g
PSAwOworCisgICAgcm93c1syXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMl1bMV0g
PSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNiQ29lZmZpY2llbnQpOworICAgIHJvd3Nb
Ml1bMl0gPSAwOworICAgIHJvd3NbMl1bM10gPSAwOworCisgICAgcm93c1szXVswXSA9IDA7Cisg
ICAgcm93c1szXVsxXSA9IDA7CisgICAgcm93c1szXVsyXSA9IDA7CisgICAgcm93c1szXVszXSA9
IDE7CisKKyAgICAvLyBDb25maWd1cmUgdGhlIGZpbmFsIGNvbHVtbiBvZiB0aGUgbWF0cml4IHRv
IGNvbnZlcnQgQ2IgYW5kIENyIHRvIFstMTI4LCAxMjhdCisgICAgLy8gYW5kLCBpbiB0aGUgY2Fz
ZSBvZiB2aWRlby1yYW5nZSwgdG8gY29udmVydCBZIHRvIFsxNiwgMjQwXToKKyAgICBmb3IgKGF1
dG8gcm93TnVtYmVyID0gMDsgcm93TnVtYmVyIDwgMzsgKytyb3dOdW1iZXIpIHsKKyAgICAgICAg
YXV0byYgcm93ID0gcm93c1tyb3dOdW1iZXJdOworICAgICAgICBhdXRvJiB4ID0gcm93WzBdOwor
ICAgICAgICBhdXRvJiB5ID0gcm93WzFdOworICAgICAgICBhdXRvJiB6ID0gcm93WzJdOworICAg
ICAgICBhdXRvJiB3ID0gcm93WzNdOworCisgICAgICAgIHcgLT0gKHkgKyB6KSAqIDEyOCAvIDI1
NTsKKyAgICAgICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlZpZGVvKQorICAgICAgICAgICAg
dyAtPSB4ICogMTYgLyAyNTU7CisgICAgfQorfQorCitjb25zdGV4cHIgR0xmbG9hdENvbG9yIFlD
YkNyTWF0cml4OjpvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvcikgY29uc3QKK3sK
KyAgICByZXR1cm4gR0xmbG9hdENvbG9yKAorICAgICAgICByb3dzWzBdWzBdICogY29sb3Iucmdi
LnIgKyByb3dzWzBdWzFdICogY29sb3IucmdiLmcgKyByb3dzWzBdWzJdICogY29sb3IucmdiLmIg
KyByb3dzWzBdWzNdLAorICAgICAgICByb3dzWzFdWzBdICogY29sb3IucmdiLnIgKyByb3dzWzFd
WzFdICogY29sb3IucmdiLmcgKyByb3dzWzFdWzJdICogY29sb3IucmdiLmIgKyByb3dzWzFdWzNd
LAorICAgICAgICByb3dzWzJdWzBdICogY29sb3IucmdiLnIgKyByb3dzWzJdWzFdICogY29sb3Iu
cmdiLmcgKyByb3dzWzJdWzJdICogY29sb3IucmdiLmIgKyByb3dzWzJdWzNdCisgICAgKTsKK30K
Kworc3RhdGljIGNvbnN0IEdMZmxvYXQqIFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5z
ZmVyRnVuY3Rpb24oUGl4ZWxSYW5nZSByYW5nZSwgVHJhbnNmZXJGdW5jdGlvbkNWIHRyYW5zZmVy
RnVuY3Rpb24pCit7CisgICAgdXNpbmcgTWFwS2V5ID0gc3RkOjpwYWlyPFBpeGVsUmFuZ2UsIFRy
YW5zZmVyRnVuY3Rpb25DVj47CisgICAgdXNpbmcgTWF0cml4TWFwID0gU3RkTWFwPE1hcEtleSwg
Y29uc3QgWUNiQ3JNYXRyaXgmPjsKKworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNYXRyaXhN
YXA+IG1hdHJpY2VzOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworCisg
ICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgSVRV
IFIuNjAxIHJldiA0IHNwZWNpZmljYXRpb24KKyAgICAvLyBodHRwczovL3d3dy5pdHUuaW50L3Jl
Yy9SLVJFQy1CVC42MDEKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFWaWRl
b01hdHJpeCB7IFBpeGVsUmFuZ2U6OlZpZGVvLCAwLjExNGYsIDAuMjk5ZiB9OworICAgIGNvbnN0
ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggcjYwMUZ1bGxNYXRyaXggeyBQaXhlbFJhbmdlOjpGdWxs
LCAwLjExNGYsIDAuMjk5ZiB9OworCisgICAgc3RhdGljX2Fzc2VydCgocjYwMVZpZGVvTWF0cml4
ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjYwMVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNSwgMTI4LCAxMjgsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6d2hpdGUsICAgMS41ZiAvIDI1NS5mKSwg
InIuNjEwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAg
c3RhdGljX2Fzc2VydCgocjYwMVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDgxLCAgOTAsICAy
NDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAg
MS41ZiAvIDI1NS5mKSwgInIuNjEwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHJlZCBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNDUsIDU0LCAgMzQsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcig0MSwgIDI0MCwgMTEwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsdWUsICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjYwMVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxMCwgMTYsICAxNDYsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwg
InIuNjEwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHllbGxvdyBjb2xvciIpOworICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxMDYsIDIwMiwg
MjIyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEs
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdl
bnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMVZpZGVvTWF0cml4ICogR0xmbG9h
dENvbG9yKDE3MCwgMTY2LCAxNiwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6Y3lhbiwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzYsICA4NSwg
IDI1NSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAg
ICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNTAsIDQ0LCAgMjEsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjksICAyNTUsIDEwNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjI2LCAwLCAgIDE0OSwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxMDUsIDIxMiwgMjM1LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYg
LyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29s
b3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigx
NzksIDE3MSwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGN5YW4gY29sb3IiKTsKKworICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhl
IGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjcwOSByZXYgMiBzcGVjaWZpY2F0aW9uCisgICAgLy8g
aHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNzA5LTItMTk5NTEwLVMKKyAgICBjb25z
dGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlWaWRlb01hdHJpeCB7IFBpeGVsUmFuZ2U6OlZp
ZGVvLCAwLjA3MjIsIDAuMjEyNiB9OworICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXgg
cjcwOUZ1bGxNYXRyaXggeyBQaXhlbFJhbmdlOjpGdWxsLCAwLjA3MjIsIDAuMjEyNiB9OworCisg
ICAgc3RhdGljX2Fzc2VydCgocjcwOVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4
LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ss
ICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJs
YWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOVZpZGVvTWF0cml4ICogR0xmbG9h
dENvbG9yKDIzNSwgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6d2hpdGUsICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOVZpZGVv
TWF0cml4ICogR0xmbG9hdENvbG9yKDYzLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IHZp
ZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHJlZCBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzMsIDQyLCAgMjYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigzMiwgIDI0
MCwgMTE4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsdWUs
ICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBi
bHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOVZpZGVvTWF0cml4ICogR0xmbG9h
dENvbG9yKDIxOSwgMTYsICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIHllbGxvdyBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcig3OCwgIDIxNCwgMjMwLCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgocjcwOVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE4OCwgMTU0LCAxNiwgIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Y3lhbiwgICAgMS41ZiAv
IDI1NS5mKSwgInIuNzA5IHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3Ii
KTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAs
ICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdM
ZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNTQsICA5OSwgIDI1NiwgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAici43MDkg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODIsIDMwLCAgMTIsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgsICAyNTYs
IDExNiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAg
ICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVl
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjM3LCAxLCAgIDE0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcig3MywgIDIyNiwgMjQ0LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMDEsIDE1NywgMSwgICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAg
IC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVS1S
IEJULjIwMjAtMiBzcGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMv
Ui1SRUMtQlQuMjAyMAorICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggYnQyMDIwVmlk
ZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNTkzLCAwLjI2MjcgfTsKKyAgICBjb25z
dGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMEZ1bGxNYXRyaXggeyBQaXhlbFJhbmdlOjpG
dWxsLCAwLjA1OTMsIDAuMjYyNyB9OworCisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTYsICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19h
c3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNSwgMTI4LCAxMjgsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6d2hpdGUsICAgMS41ZiAv
IDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29s
b3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cig3NCwgIDk3LCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIHJlZCBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDE2NCwgNDcsICAyNSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlk
ZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyOSwgIDI0MCwgMTE5LCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsdWUsICAgIDEuNWYgLyAy
NTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MjIsIDE2LCAgMTM3LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIHllbGxvdyBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDg3LCAgMjA5LCAyMzEsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlk
ZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19h
c3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE3NywgMTU5LCAxNiwgIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Y3lhbiwgICAgMS41ZiAv
IDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xv
ciIpOworCisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDI1NSwgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6d2hpdGUsICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNjcsICA5MiwgIDI1NiwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1
LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHJlZCBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCAz
NiwgIDExLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNl
IGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdM
ZmxvYXRDb2xvcigxNSwgIDI1NiwgMTE4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmJsdWUsICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjQwLCAwLCAgIDEzOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHllbGxvdyBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoODIsICAyMjAsIDI0
NSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAx
LjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2Vu
dGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDE4OCwgMTY0LCAxLCAgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6Y3lhbiwgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZl
ZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBTTVBURSAyNDBNLTE5OTkgc3BlY2lmaWNhdGlv
bgorICAgIC8vIGh0dHA6Ly9pZWVleHBsb3JlLmllZWUub3JnL2RvY3VtZW50LzcyOTE0NjEvCisg
ICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1WaWRlb01hdHJpeCB7IFBp
eGVsUmFuZ2U6OlZpZGVvLCAwLjA4NywgMC4yMTIgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlD
YkNyTWF0cml4IHNtcHRlMjQwTUZ1bGxNYXRyaXggeyBQaXhlbFJhbmdlOjpGdWxsLCAwLjA4Nywg
MC4yMTIgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xm
bG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoNjIsICAxMDIsIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1W
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDQyLCAgMjgsICAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBU
RSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzUsICAy
NDAsIDExNiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVl
LCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMjE2LCAxNiwgIDE0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDIxNCwgMjI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1h
Z2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxODksIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVv
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIHN0YXRpY19hc3Nl
cnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNv
bG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0
ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTgsICAyNTYsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNN
UFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3OSwgMzAs
ICAxNSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4s
ICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjIsICAyNTYsIDExNCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzMywgMSwgICAxNDIsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1
NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29s
b3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDc2LCAgMjI2LCAyNDEsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMDEsIDE1OCwgMSwgICAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJT
TVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOworCisg
ICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBtYXRyaWNlcy5nZXQoKS5l
bXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRV
X1JfNjAxXzQpLCByNjAxVmlkZW9NYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBs
YWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82
MDFfNCksIHI2MDFGdWxsTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShN
YXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8y
KSwgcjcwOVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBL
ZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNzA5XzIpLCBy
NzA5RnVsbE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBp
eGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl8yMDIwKSwgYnQyMDIw
VmlkZW9NYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhl
bFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl8yMDIwKSwgYnQyMDIwRnVs
bE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFu
Z2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0
ME1WaWRlb01hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBp
eGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRFXzI0ME1fMTk5NSksIHNt
cHRlMjQwTUZ1bGxNYXRyaXgpOworICAgIH0pOworCisgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGJl
IGFza2VkIHRvIGhhbmRsZSBhIFBpeGVsIEZvcm1hdCB3aG9zZSByYW5nZSB2YWx1ZSBpcyB1bmtu
b3duLgorICAgIEFTU0VSVChyYW5nZSAhPSBQaXhlbFJhbmdlOjpVbmtub3duKTsKKyAgICBpZiAo
cmFuZ2UgPT0gUGl4ZWxSYW5nZTo6VW5rbm93bikKKyAgICAgICAgcmFuZ2UgPSBQaXhlbFJhbmdl
OjpGdWxsOworCisgICAgYXV0byBpdGVyYXRvciA9IG1hdHJpY2VzLmdldCgpLmZpbmQoeyByYW5n
ZSwgdHJhbnNmZXJGdW5jdGlvbiB9KTsKKworICAgIC8vIEFzc3VtZSB1bmtub3duIHRyYW5zZmVy
IGZ1bmN0aW9ucyBhcmUgci42MDE6CisgICAgaWYgKGl0ZXJhdG9yID09IG1hdHJpY2VzLmdldCgp
LmVuZCgpKQorICAgICAgICBpdGVyYXRvciA9IG1hdHJpY2VzLmdldCgpLmZpbmQoeyByYW5nZSwg
VHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQgfSk7CisKKyAgICBBU1NFUlQoaXRlcmF0
b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOworICAgIHJldHVybiBpdGVyYXRvci0+c2Vjb25k
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBHcmFwaGlj
c0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTENvY29hJiBjb250ZXh0
KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IGN2IHsg
bmV3IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYShjb250ZXh0KSB9OworICAgIGlmICghY3YtPm1f
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGN2OworfQorCitH
cmFwaGljc0NvbnRleHRHTENWQ29jb2E6On5HcmFwaGljc0NvbnRleHRHTENWQ29jb2EoKQorewor
ICAgIGlmICghbV9jb250ZXh0IHx8ICFHcmFwaGljc0NvbnRleHRHTENvY29hOjptYWtlQ3VycmVu
dChtX2Rpc3BsYXksIG1fY29udGV4dCkpCisgICAgICAgIHJldHVybjsKKyAgICBnbDo6RGVsZXRl
QnVmZmVycygxLCAmbV95dXZWZXJ0ZXhCdWZmZXIpOworICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZl
cnMoMSwgJm1fZnJhbWVidWZmZXIpOworICAgIEVHTF9EZXN0cm95Q29udGV4dChtX2Rpc3BsYXks
IG1fY29udGV4dCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hKEdyYXBoaWNzQ29udGV4dEdMQ29jb2EmIG93bmVyKQorICAgIDogbV9vd25l
cihvd25lcikKK3sKKyAgICAvLyBDcmVhdGUgY29tcGF0aWJsZSBjb250ZXh0IHRoYXQgc2hhcmVz
IHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBkb2VzIG5vdAorICAgIC8vIGhhdmUgcm9i
dXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5LgorICAgIGNvbnN0IEVHTGludCBjb250ZXh0
QXR0cmlidXRlc1tdID0geworICAgICAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwKKyAg
ICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAyLAorICAgICAgICBFR0xfQ09OVEVYVF9P
UEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUsCisgICAgICAgIEVHTF9GQUxTRSwKKyAg
ICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19FTkFCTEVEX0FOR0xFLAorICAgICAgICBF
R0xfRkFMU0UsCisgICAgICAgIEVHTF9DT05URVhUX0JJTkRfR0VORVJBVEVTX1JFU09VUkNFX0NI
Uk9NSVVNLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAgIEVHTF9OT05FCisgICAgfTsKKyAg
ICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0Zm9ybURpc3BsYXkoKTsKKyAgICBFR0xD
b25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25maWcoKTsKKyAgICBFR0xDb250ZXh0IGNv
bnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5LCBjb25maWcsIG93bmVyLm1fY29udGV4
dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOworICAgIGlmIChjb250ZXh0ID09IEVHTF9OT19DT05U
RVhUKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1
cnJlbnQoZGlzcGxheSwgY29udGV4dCk7CisKKyAgICBhdXRvIGNvbnRleHRDbGVhbnVwID0gbWFr
ZVNjb3BlRXhpdChbZGlzcGxheSwgY29udGV4dF0geworICAgICAgICBHcmFwaGljc0NvbnRleHRH
TENvY29hOjptYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAgIEVH
TF9EZXN0cm95Q29udGV4dChkaXNwbGF5LCBjb250ZXh0KTsKKyAgICB9KTsKKworICAgIGNvbnN0
IGJvb2wgdXNlVGV4dHVyZTJEID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgp
ID09IEdMX1RFWFRVUkVfMkQ7CisKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NB
VEFMWVNUKQorICAgIGlmICghdXNlVGV4dHVyZTJEKSB7CisgICAgICAgIGdsOjpSZXF1ZXN0RXh0
ZW5zaW9uQU5HTEUoIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xlIik7CisgICAgICAgIGdsOjpS
ZXF1ZXN0RXh0ZW5zaW9uQU5HTEUoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOwor
ICAgICAgICBpZiAoZ2w6OkdldEVycm9yKCkgIT0gR0xfTk9fRVJST1IpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBHTGludCB2ZXJ0ZXhTaGFkZXIgPSBnbDo6Q3Jl
YXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgIEdMaW50IGZyYWdtZW50U2hhZGVyID0g
Z2w6OkNyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOworICAgIEdMdWludCB5dXZQcm9n
cmFtID0gZ2w6OkNyZWF0ZVByb2dyYW0oKTsKKyAgICBhdXRvIHByb2dyYW1DbGVhbnVwID0gbWFr
ZVNjb3BlRXhpdChbdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlciwgeXV2UHJvZ3JhbV0gewor
ICAgICAgICBnbDo6RGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgICAgIGdsOjpEZWxl
dGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlUHJvZ3JhbSh5dXZQ
cm9ncmFtKTsKKyAgICB9KTsKKyAgICAvLyBUaGVzZSBhcmUgd3JpdHRlbiBzbyBzdHJsZW4gbWln
aHQgYmUgY29tcGlsZS10aW1lLgorICAgIEdMaW50IHZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8g
c195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlMkQubGVuZ3RoKCkgOiBzX3l1dlZlcnRleFNoYWRlclRl
eHR1cmVSZWN0YW5nbGUubGVuZ3RoKCk7CisgICAgR0xpbnQgZnNMZW5ndGggPSB1c2VUZXh0dXJl
MkQgPyBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZGcmFnbWVu
dFNoYWRlclRleHR1cmVSZWN0YW5nbGUubGVuZ3RoKCk7CisgICAgY29uc3QgY2hhciogdmVydGV4
U2hhZGVyU291cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlMkQg
OiBzX3l1dlZlcnRleFNoYWRlclRleHR1cmVSZWN0YW5nbGU7CisgICAgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBzX3l1dkZyYWdtZW50U2hhZGVyVGV4
dHVyZTJEIDogc195dXZGcmFnbWVudFNoYWRlclRleHR1cmVSZWN0YW5nbGU7CisKKyAgICBnbDo6
U2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZSwgJnZzTGVu
Z3RoKTsKKyAgICBnbDo6U2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRT
aGFkZXJTb3VyY2UsICZmc0xlbmd0aCk7CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIodmVydGV4U2hh
ZGVyKTsKKyAgICBnbDo6Q29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgZ2w6OkF0
dGFjaFNoYWRlcih5dXZQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsOjpBdHRhY2hTaGFk
ZXIoeXV2UHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpMaW5rUHJvZ3JhbSh5dXZQ
cm9ncmFtKTsKKyAgICAvLyBMaW5rIHN0YXR1cyBpcyBjaGVja2VkIGFmdGVyd2FyZHMgZm9yIHRo
ZW9yZXRpY2FsIHBhcmFsbGVsIGNvbXBpbGF0aW9uIGJlbmVmaXQuCisKKyAgICBHTHVpbnQgeXV2
VmVydGV4QnVmZmVyID0gMDsKKyAgICBnbDo6R2VuQnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVy
KTsKKyAgICBhdXRvIHl1dlZlcnRleEJ1ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5dXZW
ZXJ0ZXhCdWZmZXJdIHsKKyAgICAgICAgZ2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1
ZmZlcik7CisgICAgfSk7CisgICAgZmxvYXQgdmVydGljZXNbMTJdID0geyAtMSwgLTEsIDEsIC0x
LCAxLCAxLCAxLCAxLCAtMSwgMSwgLTEsIC0xIH07CisgICAgZ2w6OkJpbmRCdWZmZXIoR0xfQVJS
QVlfQlVGRkVSLCB5dXZWZXJ0ZXhCdWZmZXIpOworICAgIGdsOjpCdWZmZXJEYXRhKEdMX0FSUkFZ
X0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdMX1NUQVRJQ19EUkFXKTsKKwor
ICAgIEdMdWludCBmcmFtZWJ1ZmZlciA9IDA7CisgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAm
ZnJhbWVidWZmZXIpOworICAgIGF1dG8gZnJhbWVidWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhp
dChbZnJhbWVidWZmZXJdIHsKKyAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJh
bWVidWZmZXIpOworICAgIH0pOworCisgICAgR0xpbnQgc3RhdHVzID0gMDsKKyAgICBnbDo6R2V0
UHJvZ3JhbWl2Um9idXN0QU5HTEUoeXV2UHJvZ3JhbSwgR0xfTElOS19TVEFUVVMsIDEsIG51bGxw
dHIsICZzdGF0dXMpOworICAgIGlmICghc3RhdHVzKSB7CisgICAgICAgIEdMaW50IHZzU3RhdHVz
ID0gMDsKKyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUodmVydGV4U2hhZGVyLCBH
TF9DT01QSUxFX1NUQVRVUywgMSwgbnVsbHB0ciwgJnZzU3RhdHVzKTsKKyAgICAgICAgR0xpbnQg
ZnNTdGF0dXMgPSAwOworICAgICAgICBnbDo6R2V0U2hhZGVyaXZSb2J1c3RBTkdMRShmcmFnbWVu
dFNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsIDEsIG51bGxwdHIsICZmc1N0YXR1cyk7CisgICAg
ICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYSglcCkgLSBZVVYgcHJvZ3Jh
bSBmYWlsZWQgdG8gbGluazogJWQsICVkLCAlZC4iLCB0aGlzLCBzdGF0dXMsIHZzU3RhdHVzLCBm
c1N0YXR1cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29udGV4dENsZWFudXAucmVs
ZWFzZSgpOworICAgIHl1dlZlcnRleEJ1ZmZlckNsZWFudXAucmVsZWFzZSgpOworICAgIGZyYW1l
YnVmZmVyQ2xlYW51cC5yZWxlYXNlKCk7CisgICAgbV9kaXNwbGF5ID0gZGlzcGxheTsKKyAgICBt
X2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fY29uZmlnID0gY29uZmlnOworICAgIG1feXV2VmVy
dGV4QnVmZmVyID0geXV2VmVydGV4QnVmZmVyOworICAgIG1fZnJhbWVidWZmZXIgPSBmcmFtZWJ1
ZmZlcjsKKyAgICBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2Nh
dGlvbih5dXZQcm9ncmFtLCAidV95VGV4dHVyZSIpOworICAgIG1fdXZUZXh0dXJlVW5pZm9ybUxv
Y2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV91dlRleHR1cmUi
KTsKKyAgICBtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2Nh
dGlvbih5dXZQcm9ncmFtLCAidV9jb2xvck1hdHJpeCIpOworICAgIG1feXV2RmxpcFlVbmlmb3Jt
TG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2ZsaXBZIik7
CisgICAgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0
aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlU2l6ZSIpOworICAgIG1fdXZUZXh0dXJlU2l6ZVVu
aWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZU
ZXh0dXJlU2l6ZSIpOworICAgIG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiA9IGdsOjpH
ZXRBdHRyaWJMb2NhdGlvbih5dXZQcm9ncmFtLCAiYV9wb3NpdGlvbiIpOworICAgIC8vIFByb2dy
YW0gaXMgZGVsZXRlZCBieSB0aGUgY2xlYW51cCB3aGlsZSB0aGUgcHJvZ3JhbSBiaW5hcnkgc3Rh
eXMgaW4gdXNlLgorICAgIGdsOjpVc2VQcm9ncmFtKHl1dlByb2dyYW0pOworICAgIGdsOjpFbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24pOworICAg
IGdsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyKG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiwg
MiwgR0xfRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAw
KTsKKyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVmZmVy
KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNvcHlQaXhlbEJ1ZmZlclRv
VGV4dHVyZShDVlBpeGVsQnVmZmVyUmVmIGltYWdlLCBQbGF0Zm9ybUdMT2JqZWN0IG91dHB1dFRl
eHR1cmUsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBGbGlwWSBmbGlwWSkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50
bHkgb25seSBzdXBwb3J0cyAnNDIwdicgYW5kICc0MjBmJyBwaXhlbCBmb3JtYXRzLiBJbnZlc3Rp
Z2F0ZSBzdXBwb3J0aW5nIG1vcmUgcGl4ZWwgZm9ybWF0cy4KKyAgICBPU1R5cGUgcGl4ZWxGb3Jt
YXQgPSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKGltYWdlKTsKKyAgICBpZiAocGl4
ZWxGb3JtYXQgIT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFu
Z2UKKyAgICAgICAgJiYgcGl4ZWxGb3JtYXQgIT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JD
cjhCaVBsYW5hckZ1bGxSYW5nZQorI2lmIEhBVkUoQ09SRVZJREVPX0NPTVBSRVNTRURfUElYRUxf
Rk9STUFUX1RZUEVTKQorICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5
cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UKKyAgICAgICAgJiYgcGl4ZWxGb3Jt
YXQgIT0ga0NWUGl4ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UK
KyNlbmRpZgorICAgICAgICApIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gQXNrZWQg
dG8gY29weSBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQgKCclcycpLiIsIHRoaXMsIEZvdXJD
QyhwaXhlbEZvcm1hdCkudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBJT1N1cmZhY2VSZWYgc3VyZmFjZSA9IENWUGl4ZWxCdWZmZXJH
ZXRJT1N1cmZhY2UoaW1hZ2UpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBuZXdTdXJmYWNlU2VlZCA9IElPU3VyZmFjZUdldFNlZWQoc3VyZmFj
ZSk7CisgICAgaWYgKGZsaXBZID09IG1fbGFzdEZsaXBZCisgICAgICAgICYmIHN1cmZhY2UgPT0g
bV9sYXN0U3VyZmFjZQorICAgICAgICAmJiBuZXdTdXJmYWNlU2VlZCA9PSBtX2xhc3RTdXJmYWNl
U2VlZAorICAgICAgICAmJiBsYXN0VGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkgPT0gbV9vd25l
ci50ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSkgeworICAgICAgICAvLyBJZiB0aGUgdGV4dHVy
ZSBoYXNuJ3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIGNvcGllZCB0byBp
dCwgYW5kIHRoZQorICAgICAgICAvLyBpbWFnZSBoYXNuJ3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0
aGUgbGFzdCB0aW1lIGl0IHdhcyBjb3BpZWQsIHRoaXMgaXMgYSBuby1vcC4KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGlmICghbV9jb250ZXh0IHx8ICFHcmFwaGljc0NvbnRleHRH
TENvY29hOjptYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fY29udGV4dCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHNpemVfdCB3aWR0aCA9IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFn
ZSk7CisgICAgc2l6ZV90IGhlaWdodCA9IENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwor
CisgICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworCisgICAgLy8gVGhlIG91
dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVkIGNvbnRlbnQgb24gZWFybHkt
b3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKKyAgICAvLyBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciBp
cyBub3QgcmVzZXQuCisgICAgYXV0byBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciA9IG1ha2VTY29w
ZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBl
XSB7CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJl
KTsKKyAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFs
Rm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOworICAgICAgICBnbDo6Qmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgfSk7CisgICAgLy8gQWxsb2NhdGUgbWVt
b3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCisgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIG91dHB1dFRleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Cisg
ICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdM
X0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6VGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZv
cm1hdCwgdHlwZSwgbnVsbHB0cik7CisKKyAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBvdXRwdXRU
ZXh0dXJlLCBsZXZlbCk7CisgICAgR0xlbnVtIHN0YXR1cyA9IGdsOjpDaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKKyAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2Nv
YTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBjcmVh
dGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1cmUuIiwgdGhpcyk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwor
CisgICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0dXJlcyBmb3IgdGhlIHZpZGVvIHNvdXJj
ZS4KKyAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZh
Y2UsIDApOworICAgIGF1dG8geVBsYW5lSGVpZ2h0ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFu
ZShzdXJmYWNlLCAwKTsKKyAgICBhdXRvIHV2UGxhbmVXaWR0aCA9IElPU3VyZmFjZUdldFdpZHRo
T2ZQbGFuZShzdXJmYWNlLCAxKTsKKyAgICBhdXRvIHV2UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VH
ZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOworCisgICAgR0xlbnVtIHZpZGVvVGV4dHVyZVRh
cmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKKworICAgIEdMdWlu
dCB1dlRleHR1cmUgPSAwOworICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKKyAg
ICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt1dlRleHR1cmVdIHsKKyAg
ICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1dlRleHR1cmUpOworICAgIH0pOworICAgIGds
OjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKKyAgICBnbDo6QmluZFRleHR1cmUodmlkZW9U
ZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3JlOjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9T
dXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZpZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VS
RkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQs
IEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEpOworICAgIGlmICghdXZIYW5kbGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHV2SGFuZGxlQ2xlYW51cCA9IG1ha2VTY29wZUV4
aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFuZGxlXSB7CisgICAgICAgIFdlYkNvcmU6OmRl
c3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHV2SGFuZGxlKTsKKyAgICB9
KTsKKworICAgIEdMdWludCB5VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ5
VGV4dHVyZSk7CisgICAgYXV0byB5VGV4dHVyZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5VGV4
dHVyZV0geworICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnlUZXh0dXJlKTsKKyAgICB9
KTsKKyAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgZ2w6OkJpbmRUZXh0
dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgIGF1dG8geUhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRB
dHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBF
R0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkVELCB5UGxhbmVXaWR0aCwgeVBsYW5l
SGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAwKTsKKyAgICBpZiAoIXlIYW5kbGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHlIYW5kbGVDbGVhbnVwID0gbWFrZVNj
b3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgeUhhbmRsZV0geworICAgICAgICBkZXN0cm95
UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNwbGF5LCB5SGFuZGxlKTsKKyAgICB9KTsKKwor
ICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBwYXJhbWV0ZXJzLgorICAgIGdsOjpVbmlmb3Jt
MWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMCk7CisgICAgZ2w6OlVuaWZvcm0xaShtX3V2
VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7CisgICAgZ2w6OlVuaWZvcm0xaShtX3l1dkZsaXBZ
VW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlwWTo6WWVzID8gMSA6IDApOworICAgIGdsOjpV
bmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxh
bmVIZWlnaHQpOworICAgIGdsOjpVbmlmb3JtMmYobV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0
aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQpOworCisgICAgYXV0byByYW5nZSA9IHBp
eGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOworICAgIGF1dG8gdHJhbnNmZXJG
dW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9tU3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0
cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNy
TWF0cml4S2V5LCBuaWwpKSk7CisgICAgYXV0byBjb2xvck1hdHJpeCA9IFlDYkNyVG9SR0JNYXRy
aXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24ocmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24pOwor
ICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRpb24sIDEs
IEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7CisKKyAgICAvLyBEbyB0aGUgYWN0dWFsIGRyYXdpbmcu
CisgICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5HTEVTLCAwLCA2KTsKKworICAgIG1fbGFzdFN1
cmZhY2UgPSBzdXJmYWNlOworICAgIG1fbGFzdFN1cmZhY2VTZWVkID0gbmV3U3VyZmFjZVNlZWQ7
CisgICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91dHB1dFRleHR1cmUsIG1fb3duZXIudGV4dHVy
ZVNlZWQob3V0cHV0VGV4dHVyZSkpOworICAgIG1fbGFzdEZsaXBZID0gZmxpcFk7CisgICAgYXV0
b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgpOworICAgIHJldHVybiB0cnVlOworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNGUzOTYw
YjZkNzA4MGU0YzM5NDBiOGFmN2FkOWRjZTYyNDYyNzBmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTENWLmgiCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVk
ZSA8d3RmL1Vuc2FmZVBvaW50ZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0R0xDb2NvYTsKKworLy8gR3JhcGhpY3NDb250ZXh0R0xDViBpbXBsZW1lbnRh
dGlvbiBmb3IgR3JhcGhpY3NDb250ZXh0R0xDb2NvYS4KKy8vIFRoaXMgY2xhc3MgaXMgcGFydCBv
ZiB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NDb250ZXh0R0xDb2NvYS4K
K2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYSBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0Nv
bnRleHRHTENWIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gY3JlYXRlKEdy
YXBoaWNzQ29udGV4dEdMQ29jb2EmKTsKKworICAgIH5HcmFwaGljc0NvbnRleHRHTENWQ29jb2Eo
KSBmaW5hbDsKKworICAgIGJvb2wgY29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZm
ZXJSZWYsIFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgRmxp
cFkpIGZpbmFsOworCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYShHcmFw
aGljc0NvbnRleHRHTENvY29hJik7CisKKyAgICB1bnNpZ25lZCBsYXN0VGV4dHVyZVNlZWQoR0NH
THVpbnQgdGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xhc3RUZXh0dXJlU2VlZC5n
ZXQodGV4dHVyZSk7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgbV9vd25l
cjsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBtX2Rpc3BsYXkgeyBudWxs
cHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRleHQgeyBudWxscHRy
IH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBtX2NvbmZpZyB7IG51bGxw
dHIgfTsKKworICAgIFBsYXRmb3JtR0xPYmplY3QgbV9mcmFtZWJ1ZmZlciB7IDAgfTsKKyAgICBQ
bGF0Zm9ybUdMT2JqZWN0IG1feXV2VmVydGV4QnVmZmVyIHsgMCB9OworICAgIEdDR0xpbnQgbV95
VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07CisgICAgR0NHTGludCBtX3V2VGV4dHVyZVVu
aWZvcm1Mb2NhdGlvbiB7IC0xIH07CisgICAgR0NHTGludCBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0
aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRpb24geyAt
MSB9OworICAgIEdDR0xpbnQgbV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uIHsgLTEgfTsK
KyAgICBHQ0dMaW50IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBH
Q0dMaW50IG1fdXZUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07CisKKyAgICBGbGlw
WSBtX2xhc3RGbGlwWSB7IEZsaXBZOjpObyB9OworICAgIFVuc2FmZVBvaW50ZXI8SU9TdXJmYWNl
UmVmPiBtX2xhc3RTdXJmYWNlOworICAgIHVpbnQzMl90IG1fbGFzdFN1cmZhY2VTZWVkIHsgMCB9
OworCisgICAgdXNpbmcgVGV4dHVyZVNlZWRNYXAgPSBIYXNoTWFwPEdDR0x1aW50LCB1bnNpZ25l
ZCwgSW50SGFzaDxHQ0dMdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
R0NHTHVpbnQ+PjsKKyAgICBUZXh0dXJlU2VlZE1hcCBtX2xhc3RUZXh0dXJlU2VlZDsKK307CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcAppbmRleCBi
ODMyYTE4NmE0MmM4YmUzMjJhNGM3MDgxZjc1ZGNkNDkwYzI3Zjg4Li4zZmQ3NGJlMjA5YTEzYzUw
MTZlZjU1N2UyMWFiN2M1OWZkNDhjYWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHAKQEAgLTEsNyArMSw4IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE1v
emlsbGEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIsMjIgKzIzLDI4NjMgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAKLSNpZiBFTkFCTEUoV0VCR0wpCisjaWYgRU5BQkxF
KFdFQkdMKSAmJiAhVVNFKEFOR0xFKQogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCisjaW5j
bHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCi0jaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRpbmcu
aCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2lu
Y2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisjaWYgVVNFKE9QRU5HTF9F
UykKKyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5oIgorI2Vsc2UKKyNpbmNsdWRlICJF
eHRlbnNpb25zR0xPcGVuR0wuaCIKKyNlbmRpZgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1
ZGUgIkVwb3h5U2hpbXMuaCIKKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSAiT3BlbkdM
RVNTaGltcy5oIgorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCisjaW5jbHVk
ZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRp
YyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+JiBnZXRDdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXIoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBz
dGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiogc2hhcmVkTmFtZUhhc2g7Cisg
ICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgc2hhcmVkTmFtZUhhc2gg
PSBuZXcgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPjsKKyAgICB9KTsKKworICAgIHJl
dHVybiAqc2hhcmVkTmFtZUhhc2g7Cit9CisKK3N0YXRpYyB2b2lkIHNldEN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlcihTaGFkZXJOYW1lSGFzaCogc2hhZGVyTmFtZUhhc2gpCit7CisgICAgKmdl
dEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpID0gc2hhZGVyTmFtZUhhc2g7Cit9CisKKy8v
IEhhc2ggZnVuY3Rpb24gdXNlZCBieSB0aGUgQU5HTEUgdHJhbnNsYXRvci9jb21waWxlciB0byBk
bworLy8gc3ltYm9sIG5hbWUgbWFuZ2xpbmcuIFNpbmNlIHRoaXMgaXMgYSBzdGF0aWMgbWV0aG9k
LCBiZWZvcmUKKy8vIGNhbGxpbmcgY29tcGlsZVNoYWRlciB3ZSBzZXQgY3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyCisvLyB0byBwb2ludCB0byB0aGUgbWFwIGtlcHQgYnkgdGhlIGN1cnJlbnQg
aW5zdGFuY2Ugb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCisKK3N0YXRpYyB1aW50NjRfdCBu
YW1lSGFzaEZvclNoYWRlcihjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuZ3RoKQoreworICAg
IGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENTdHJpbmcgbmFtZUFzQ1N0
cmluZyA9IENTdHJpbmcobmFtZSk7CisKKyAgICAvLyBMb29rIHVwIG5hbWUgaW4gb3VyIGxvY2Fs
IG1hcC4KKyAgICBTaGFkZXJOYW1lSGFzaComIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlciA9
ICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKTsKKyAgICBTaGFkZXJOYW1lSGFzaDo6
aXRlcmF0b3IgZmluZFJlc3VsdCA9IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+ZmluZChu
YW1lQXNDU3RyaW5nKTsKKyAgICBpZiAoZmluZFJlc3VsdCAhPSBjdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXItPmVuZCgpKQorICAgICAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWU7CisKKyAg
ICB1bnNpZ25lZCBoYXNoVmFsdWUgPSBuYW1lQXNDU3RyaW5nLmhhc2goKTsKKworICAgIC8vIENv
bnZlcnQgdGhlIDMyLWJpdCBoYXNoIGZyb20gQ1N0cmluZzo6aGFzaCBpbnRvIGEgNjQtYml0IHJl
c3VsdAorICAgIC8vIGJ5IHNoaWZ0aW5nIHRoZW4gYWRkaW5nIHRoZSBzaXplIG9mIG91ciB0YWJs
ZS4gT3ZlcmZsb3cgd291bGQKKyAgICAvLyBvbmx5IGJlIGEgcHJvYmxlbSBpZiB3ZSdyZSBhbHJl
YWR5IGhhc2hpbmcgdG8gdGhlIHNhbWUgdmFsdWUgKGFuZAorICAgIC8vIHdlJ3JlIGhvcGluZyB0
aGF0IG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb250ZXh0IHdlCisgICAgLy8gZG9uJ3QgaGF2
ZSB0aGF0IG1hbnkgc3ltYm9scykuCisKKyAgICB1aW50NjRfdCByZXN1bHQgPSBoYXNoVmFsdWU7
CisgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCAzMikgKyAoY3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyLT5zaXplKCkgKyAxKTsKKworICAgIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2V0
KG5hbWVBc0NTdHJpbmcsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQoreworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0
QXR0cmlidXRlcygpOworCisgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBleHRlbnNpb25z
ID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAgICAgIGlm
IChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKKyAg
ICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgor
ICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMo
YXR0cnMpOworICAgIH0KKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmICFtX2lzRm9yV2ViR0wy
KSB7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUiKSkgeworICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7
CisgICAgICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cHJlcGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisKKyNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIFRlbXBvcmFy
eU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsK
KyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZB
TFNFKTsKKyNlbmRpZgorCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQor
ICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9y
VGV4dHVyZSk7CisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJl
KTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAg
OjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1Jf
QVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAgIGdsRmx1
c2goKTsKKworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGVsc2UKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICByZXR1
cm47CisjZW5kaWYKKworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zdGF0ZS5ib3VuZFRhcmdldChHTF9URVhU
VVJFMCkgPT0gR0xfVEVYVFVSRV8yRCA/IG1fc3RhdGUuYm91bmRUZXh0dXJlKEdMX1RFWFRVUkUw
KSA6IDApOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQp
OworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZC
Tyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQorICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0
ZS5ib3VuZERyYXdGQk8pOworICAgIDo6Z2xGbHVzaCgpOworfQorCitzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMo
KQoreworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAoY29udGV4dEF0
dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5l
Y2Vzc2FyeSgpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICAgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9
IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOworICAgICAgICB9CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBpeGVsc0Zv
clBhaW50UmVzdWx0cygpOworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAo
d2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOwor
ICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFya0Nv
bnRleHRDaGFuZ2VkKCk7CisKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3Vy
cmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAg
VGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xf
RkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhF
UiwgR0xfRkFMU0UpOworICAgIAorICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJP
cyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKworICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVm
ZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0geyAwLCAwLCAwLCAwIH0sIGNs
ZWFyRGVwdGggPSAwOworICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7CisgICAgR0xib29sZWFu
IGNvbG9yTWFza1tdID0geyBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFIH0sIGRl
cHRoTWFzayA9IEdMX1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZiwg
c3RlbmNpbE1hc2tCYWNrID0gMHhmZmZmZmZmZjsKKyAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9
IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9W
QUxVRSwgY2xlYXJDb2xvcik7CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAg
OjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAgICA6Omds
Q29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOworCisgICAgYXV0
byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuZGVwdGgpIHsK
KyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgp
OworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsKKyAgICAg
ICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAg
ICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBU
SF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6
OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7Cisg
ICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9T
VEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykp
OworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSywgcmVp
bnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKKyAgICAgICAgOjpnbFN0
ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICA6OmdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xlYXJNYXNr
IHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisKKyAgICA6OmdsQ2xlYXIoY2xlYXJN
YXNrKTsKKworICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0s
IGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIDo6Z2xDb2xvck1hc2soY29sb3JN
YXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICBp
ZiAoYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
RGVwdGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAg
ICB9CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbChj
bGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwg
c3RlbmNpbE1hc2spOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCBz
dGVuY2lsTWFza0JhY2spOworICAgIH0KKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKworICAgIGF1dG8gZXJyb3IgPSA6OmdsR2V0RXJyb3Io
KTsKKyAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
V2ViR0wsICJGYXRhbDogT3BlbkdMIGVycm9yIGR1cmluZyBHcmFwaGljc0NvbnRleHRHTCBidWZm
ZXIgaW5pdGlhbGl6YXRpb24gKCVkKS4iLCBlcnJvcik7CisgICAgICAgIGZvcmNlQ29udGV4dExv
c3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIDo6Z2xGbHVzaCgpOworfQorCiti
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9y
bUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hh
ZGVyKSk7CisgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hh
ZGVyKSk7CisgICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHZlcnRleFNoYWRlciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisKKyAgICBI
YXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdzOworICAg
IGZvciAoY29uc3QgYXV0byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWluZ01hcCkg
eworICAgICAgICBjb25zdCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wua2V5Owor
ICAgICAgICAvLyBUaGUgdmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBlYWNoIGlu
ZGV4IG9mIGFuIGFycmF5IHZhcmlhYmxlLgorICAgICAgICAvLyBXZSBvbmx5IHdhbnQgYSBzaW5n
bGUgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBhcnJheS4KKyAgICAgICAgaWYgKHN5bWJvbE5h
bWUuZW5kc1dpdGgoIl0iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIERv
bid0IGNvdW50IGJ1aWx0IGluIHZhcnlpbmdzLgorICAgICAgICBpZiAoc3ltYm9sTmFtZSA9PSAi
Z2xfRnJhZ0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwgc3ltYm9s
TmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBjb25zdCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWluZ01hcC5m
aW5kKHN5bWJvbE5hbWUpOworICAgICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJhZ21lbnRF
bnRyeS52YXJ5aW5nTWFwLmVuZCgpKQorICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5ncy5hZGQo
c3ltYm9sTmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZhbHVlKTsKKyAgICB9CisKKyAgICBzaXplX3Qg
bnVtVmFyeWluZ3MgPSBjb21iaW5lZFZhcnlpbmdzLnNpemUoKTsKKyAgICBpZiAoIW51bVZhcnlp
bmdzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJW
YXJpYWJsZT4gdmFyaWFibGVzOworICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVkVmFyeWlu
Z3Muc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBjb21iaW5l
ZFZhcnlpbmdzLnZhbHVlcygpKQorICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZhcnlpbmdT
eW1ib2wpOworCisgICAgR0NHTGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7CisjaWYgVVNFKE9Q
RU5HTF9FUykKKyAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZh
cnlpbmdWZWN0b3JzKTsKKyNlbHNlCisgICAgaWYgKG1faXNGb3JXZWJHTDIpCisgICAgICAgIDo6
Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMp
OworICAgIGVsc2UgeworICAgICAgICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMgPSAwOworICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFyeWluZ0Zs
b2F0cyk7CisgICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0cyAvIDQ7
CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tp
bmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRl
eFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7CisgICAgQVNT
RVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7CisgICAgY29u
c3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRl
ciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisKKyAgICBIYXNoTWFwPFN0cmluZywg
c2g6OkdMZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOworCisgICAgZm9yIChjb25zdCBh
dXRvJiBlbnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKKyAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOworICAg
ICAgICB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1lLmNfc3Ry
KCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24pOwor
ICAgIH0KKworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5LnVuaWZv
cm1NYXApIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52
YWx1ZS5nZXQoKS5tYXBwZWROYW1lOworICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wg
PSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigp
LCBtYXBwZWROYW1lLmxlbmd0aCgpKSk7CisgICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wgIT0gdmVy
dGV4U3ltYm9sUHJlY2lzaW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUgIT0gZW50
cnkudmFsdWUuZ2V0KCkucHJlY2lzaW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJl
VW5pdCA9IHRleHR1cmU7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFt
KTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1v
dmUocHJvZ3JhbSk7CisgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQor
eworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5h
bWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAgTE9H
KFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUu
dXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICA6OmdsQmluZEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRh
cmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBi
dWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHTHVpbnQgZmJv
OworICAgIGlmIChidWZmZXIpCisgICAgICAgIGZibyA9IGJ1ZmZlcjsKKyAgICBlbHNlCisgICAg
ICAgIGZibyA9IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVG
Qk8gOiBtX2Zibyk7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUik7CisgICAg
QVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAg
ICBpZiAoZmJvICE9IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7CisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9
IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gZmJvOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwg
cmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
VGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0
YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0
YXJnZXQpOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dM
Y2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJs
ZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJsZW5kRXF1
YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1
YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dM
ZW51bSBkZmFjdG9yKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9ICAgICAg
IAorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dM
ZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVt
IGRzdEFscGhhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVy
RGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFu
PGNvbnN0IHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdl
dCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQnVmZmVyU3ViRGF0
YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOworfQorCitHQ0dMZW51
bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51
bSB0YXJnZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCisgICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NH
TGNsYW1wZiBhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ2xlYXIo
bWFzayk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4g
cmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxw
aGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1
ZSB0byB0aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKKyAgICAvLyBwb2ludCBh
IGdsb2JhbCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgorICAgIFNo
QnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVzb3VyY2Vz
KCk7CisgICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFOR0xFUmVz
b3VyY2VzLkhhc2hGdW5jdGlvbjsKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24gPSBu
YW1lSGFzaEZvclNoYWRlcjsKKworICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQorICAg
ICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigp
OworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRl
cnMuZ2V0KCkpOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsK
KworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT5nZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKKworICAgIEFOR0xFUmVzb3VyY2Vz
Lkhhc2hGdW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOworICAgIG1fY29tcGlsZXIuc2V0
UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JT
aGFkZXIobnVsbHB0cik7CisKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFk
ZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7CisgICAgY29uc3QgY2hh
ciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsK
KyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5n
Lmxlbmd0aCgpOworCisgICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBz
b3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuIiwgZ2V0
U2hhZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKFdlYkdMLCAiLS0t
IGJlZ2luIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRyYW5zbGF0
ZWQgc2hhZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKKworICAgIDo6Z2xT
aGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRT
aGFkZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAg
CisgICAgaW50IGNvbXBpbGVTdGF0dXM7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRl
ciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKKworICAgIFNoYWRlclNvdXJjZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAg
IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICAvLyBQb3B1
bGF0ZSB0aGUgc2hhZGVyIGxvZworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFNo
YWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAgIGlmIChs
ZW5ndGgpIHsKKyAgICAgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICAgICAgVmVjdG9yPEdMY2hh
cj4gaW5mbyhsZW5ndGgpOworICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxl
bmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgICAgICBlbnRyeS5sb2cgPSBnZXRVbm1hbmds
ZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworICAgIH0K
KworICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKKyAgICAgICAgZW50cnkuaXNW
YWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRyYW5zbGF0
b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUuIik7Cisg
ICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGly
ZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hN
YXA8UGxhdGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFkZXJTb3Vy
Y2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgY29uc3QgQ1N0cmluZyYgc2hh
ZGVyU291cmNlQ1N0cmluZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7CisgICAgY29uc3QgY2hhciog
c2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7CisgICAgaW50IHNo
YWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7CisKKyAgICBM
T0coV2ViR0wsICItLS0gYmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVu
ZCBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7CisKKyAgICA6
OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRlclNvdXJj
ZUxlbmd0aCk7CisKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgICAgaW50IGNv
bXBpbGVTdGF0dXM7CisKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRV
UywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xfVFJVRSkg
eworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgTE9HKFdlYkdMLCAiRGly
ZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBzdWNjZWVkZWQuIik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjog
ZGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7CisgICAgfQorfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Cisg
ICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5k
UmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJzLmFudGlhbGlh
cyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAg
IHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6
OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlz
YW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ3VsbEZhY2UobW9k
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51
bSBmdW5jKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xEZXB0aE1hc2soZmxh
Zyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFT
U0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xD
b3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBz
aGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xl
bnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsRGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNp
emVpIGNvdW50KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CisgICAgY2hl
Y2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0Vs
ZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwor
ICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmVuYWJsZShHQ0dMZW51bSBjYXApCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRl
eCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGaW5pc2goKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGbHVzaCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxh
dGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGcmFtZWJ1ZmZlclRl
eHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwp
OworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRU
ZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2Uo
R0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdl
bmVyYXRlTWlwbWFwKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dy
YW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1
dGVTaXplKTsKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBH
TF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4K
KyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdM
ZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBt
YXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7
CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
U3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJf
U1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsK
KyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgp
LCBuYW1lTGVuZ3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0
aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlm
b3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7CisjZW5k
aWYKKworICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKKyAgICBpbmZvLnR5cGUgPSB0eXBl
OworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdDR0xpbnQg
c3ltYm9sQ291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENv
dW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywgJnN5bWJv
bENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAu
ZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRz
JiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDR0x1aW50IHJhd0luZGV4ID0g
KGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5z
aXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcFtp
bmRleF0gOiAtMTsKKworICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIHJh
d0luZGV4LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihw
cm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwor
CisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9V
TklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBHTHNpemVp
IG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdMZW51bSB0eXBlID0g
MDsKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNp
emUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBpZiAoIW5h
bWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcgb3JpZ2lu
YWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9V
TklGT1JNLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKKyAgICAKKyNpZm5kZWYg
TkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsK
KyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZvcm0gJWQg
ZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRh
dGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgCisgICAgaW5m
by5uYW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5z
aXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdDR0xpbnQgc3ltYm9sQ291bnQ7
CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHBy
b2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAu
ZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0s
IEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7CisgICAg
ICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7
CisgICAgfQorICAgIAorICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRz
ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJv
bENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xD
b3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsKKyAgICAK
KyAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8p
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSog
Y291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9ncmFtKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50
LCBzaGFkZXJzKTsKK30KKworc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUoY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG5hbWU7CisgICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFtZS51dGY4
KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygid2ViZ2xf
IiwgaGV4KG51bWJlciwgTG93ZXJjYXNlKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U3RyaW5nPiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxh
dGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8mIHN5bWJv
bE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGF1dG8gc3lt
Ym9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoc3ltYm9sRW50cnkgPT0g
c3ltYm9sTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0
byYgbWFwcGVkTmFtZSA9IHN5bWJvbEVudHJ5LT52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOworICAg
IHJldHVybiBTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKTsK
K30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOworICAgIFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNoYWRlcnMo
cHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIGZvciAoR0NHTHNpemVpIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1i
b2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAg
ICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgp
OworICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUg
c2hhZGVycyBhZnRlciBsaW5raW5nLgorICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJN
YXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVu
ZCgpKSB7CisgICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7CisgICAg
ICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtl
ZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFwcGVkTmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgICAgIG1hcHBl
ZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29u
ZCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoc3ltYm9sVHlw
ZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHkoKSkgewor
ICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkgYmUgcmVx
dWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCisgICAgICAgIC8v
IGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIgcHJvZ3Jh
bS4KKyAgICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCisgICAgICAgICAgICBuYW1l
SGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOworICAgICAg
ICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFkZXJzLmdl
dCgpKTsKKworICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hlZE5hbWUo
bmFtZSk7CisKKyAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51bGxwdHIp
OworCisgICAgICAgIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVyYXRlZE5h
bWUsIG5hbWUpOworCisgICAgICAgIHJldHVybiBnZW5lcmF0ZWROYW1lOworICAgIH0KKworICAg
IHJldHVybiBuYW1lOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3Vs
dC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGZvciAoY29uc3QgYXV0byYgc3lt
Ym9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnku
dmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQorICAgICAgICAgICAgcmV0dXJuIHN5bWJv
bEVudHJ5LmtleTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwg
c2hhZGVycyk7CisgICAgCisgICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNv
dXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdp
bmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICB9
CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMg
YWZ0ZXIgbGlua2luZy4KKyAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQo
cHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgewor
ICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOworICAgICAgICBhdXRv
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hh
ZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUp
CisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgICAgIG9yaWdp
bmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5z
ZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIGlmIChz
eW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0
eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1h
eSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAg
ICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRl
ciBwcm9ncmFtLgorCisgICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2libHlVbnVz
ZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGNhY2hlZCAhPSBtX3Bvc3Np
Ymx5VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC0+
dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK1N0cmluZyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNb
Ml0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAoc2l6ZV90
IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oU0hBREVS
X1NZTUJPTF9UWVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTaGFkZXJTb3VyY2VNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7Cisg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25zdCBTaGFk
ZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0YXRpY19j
YXN0PGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0
cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuYW1lOworfQorCitpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAg
ICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIC0xOworCisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUo
cHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAgTE9HKFdl
YkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0
ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIDo6Z2xH
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
CitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICgh
cHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ym9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGlt
aXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCisgICAgLy8gYSBwcm9i
bGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVy
cm9yLgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBO
T19FUlJPUi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAg
ICAgR0NHTGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciA9PSBO
T19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5h
ZGQoZXJyb3IpOworICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBtb3ZlZEFuRXJyb3I7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRFcnJvcigpCit7CisgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhl
dGljIGVycm9yIGxpc3QgaW4gY2FzZQorICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFscmVhZHkg
dGhlcmUsIHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCisgICAgICAgIC8vIGds
R2V0RXJyb3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3IgY29kZSBv
bmNlLgorICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICAgICAg
cmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOworICAgIH0KKworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElP
TjsKKworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4g
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
YnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CisKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAg
IHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIp
Cit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwor
CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30KKworR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30KKworR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJl
bmRlcmJ1ZmZlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFk
ZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJl
KFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0
IHdpZHRoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAg
QVNTRVJUKHByb2dyYW0pOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworCisgICAgR0NHTHNpemVpIGNvdW50ID0gMDsKKyAgICBQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIs
ICZjb3VudCwgc2hhZGVycyk7CisKKyAgICBpZiAoY291bnQgPT0gMikKKyAgICAgICAgbV9saW5r
ZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0sIHNoYWRl
cnNbMV0pKTsKKworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQg
cGFyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NHTGZs
b2F0IHVuaXRzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBmIHZhbHVl
LCBHQ0dMYm9vbGVhbiBpbnZlcnQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFNjaXNz
b3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBz
dHJpbmcpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKworICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5
OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9zaGFkZXJTb3VyY2VNYXAu
c2V0KHNoYWRlciwgV1RGTW92ZShlbnRyeSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQg
bWFzaykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBH
Q0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbEZ1
bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsTWFz
ayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0g
ZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsT3BTZXBh
cmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4UGFy
YW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUsIGFycmF5
LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0y
Zihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFy
cmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0yZnYo
bG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZihsb2NhdGlv
biwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkK
K3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0
aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAs
IEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm00
Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5p
Zm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGludCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIGFycmF5
LmJ1ZlNpemUsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zaShsb2Nh
dGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkp
Cit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNpdihsb2Nh
dGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwg
R0NHTGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRpKGxvY2F0
aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJy
YXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRpdihs
b2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sK
KyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
YXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybU1h
dHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJyYXkuZGF0
YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAxNikpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRyYW5zcG9z
ZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVBy
b2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0p
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWYWxp
ZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRl
eEF0dHJpYjFmKGluZGV4LCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
LCAxPiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihp
bmRleCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IGFy
cmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0
cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgMz4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWlu
dCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4
QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6
ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0
YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
fQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0
ZXhBcnJheSgpCit7CisgICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0ZXhBcnJh
eU9FUygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhB
cnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQoreworICAgIGdldEV4dGVuc2lvbnMoKS5kZWxl
dGVWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit7CisgICAg
cmV0dXJuIGdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmpl
Y3QgYXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJh
eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xl
bnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEJvb2xlYW52
KHBuYW1lLCB2YWx1ZS5kYXRhKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQor
eworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxH
Q0dMZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmRhdGEpOworfQor
CitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51
bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0NHTGludDY0IHZhbHVlID0g
MDsKKyAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmly
c3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5n
IHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAgIC8vIDo6Z2xHZXRJ
bnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50
NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUs
IEdDR0x1aW50IGluZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7CisgICAgLy8gRklYTUUgMTQxMTc4
OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5n
IGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNp
bmcgT3BlbkdMIEVTIDMuMC4KKyAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1lLCBpbmRl
eCwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEdDR0xp
bnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkK
KyAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRU
QUNITUVOVCwgZWl0aGVyIHdvcmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJl
dHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJv
Z3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBHQ0dMaW50
IHZhbHVlID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAmdmFsdWUp
OworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChBQ1RJVkVfQVRU
UklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOworICAgIGlmICgh
dmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX3No
YWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICAqdmFsdWUgPSByZXN1
bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0aXZlU2hh
ZGVyU3ltYm9sQ291bnRzKCkpOworICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9s
Q291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKS0+dmFs
dWU7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxkIGEgZmls
dGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcgb2YKKyAgICAvLyBvdXIgaW50ZXJuYWwgYXR0cmli
dXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUgT3BlbkdM
LgorICAgIEdDR0xpbnQgYXR0cmlidXRlQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYo
cHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7CisgICAgZm9yIChH
Q0dMaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICBBY3RpdmVJ
bmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwgaW5mbyk7
CisgICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0
ZUluZGV4TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gRG8gdGhlIHNhbWUgZm9y
IHVuaWZvcm1zLgorICAgIEdDR0xpbnQgdW5pZm9ybUNvdW50ID0gMDsKKyAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7CisgICAgZm9y
IChHQ0dMaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICAgICAgQWN0aXZl
SW5mbyBpbmZvOworICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpLCBpbmZv
KTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1
YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAqdmFsdWUgPSBz
eW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
c1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBMT0coV2Vi
R0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7CisK
KyAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAxMjM0NTY3
ODlhYmNkZWZBQkNERUZdKyIpOworCisgICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRMb2c7Cisg
ICAgCisgICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8gdGhlIHNo
YWRlciBzb3VyY2UgdGhhdAorICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBjb21waWxl
cnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKKyAgICAvLyB0aGlzIHdhcm5pbmcgdG8gdGhl
IHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAorICAgIC8vIGlzIGNh
dXNpbmcgaXQuCisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYW5nbGVX
YXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRlcjUnIGlz
IG5vdCBzdXBwb3J0ZWRcbiJfcyB9OworICAgIGludCBzdGFydEZyb20gPSBsb2cuc3RhcnRzV2l0
aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsKKyAgICBp
bnQgbWF0Y2hlZExlbmd0aCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGludCBzdGFydCA9IHJl
Z0V4cC5tYXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOworICAgICAgICBpZiAo
c3RhcnQgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwcm9jZXNzZWRMb2cu
YXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkpOworICAg
ICAgICBzdGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7CisKKyAgICAgICAgY29uc3Qg
U3RyaW5nJiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hlZExlbmd0
aCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3ltYm9sTmFt
ZShzaGFkZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7CisgICAgICAgIExPRyhXZWJHTCwgIkRl
bWFuZ2xpbmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBtYXBwZWRT
eW1ib2wudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobWFwcGVk
U3ltYm9sKTsKKyAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+KGxvZy5s
ZW5ndGgoKSkpOworCisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0
RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2ViR0wsICJVbm1h
bmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOworfQorCitTdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBHTGludCBs
ZW5ndGggPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVO
R1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5n
dGgpOworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBp
bmZvLmRhdGEoKSk7CisKKyAgICBHQ0dMc2l6ZWkgY291bnQ7CisgICAgUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQs
IHNoYWRlcnMpOworCisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgY291
bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xHZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVy
biB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
aShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgQVNTRVJU
KHNoYWRlcik7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisKKyAgICBjb25zdCBhdXRvJiByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgCisgICAgc3dpdGNoIChw
bmFtZSkgeworICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKKyAgICBjYXNlIFNIQURFUl9UWVBFOgor
ICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8
aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElO
Rk9fTE9HX0xFTkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5l
bmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0
aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAg
ICAgICB2YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VO
VU0pOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sK
KyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hh
ZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291
cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgY29uc3QgU2hh
ZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBpZiAoIWVudHJ5Lmlz
VmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBHTGludCBsZW5ndGggPSAw
OworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0
aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBH
THNpemVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKKyAgICA6
OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsK
KworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07CisgICAg
cmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgp
LCBzaXplKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
U291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOwor
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFk
ZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsgCisKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3VyY2U7Cit9
CisKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEdDR0xmbG9hdCB2YWx1ZSA9
IDAuZjsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Cisg
ICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
R0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1l
LCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9ybWZ2KHBy
b2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldFVuaWZvcm1pdihwcm9n
cmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHBy
b2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiAtMTsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9s
TmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7CisgICAgTE9H
KFdlYkdMLCAiOjpnZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUu
dXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gOjpn
bEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwor
fQorCitHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJp
Yk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHZvaWQqIHBvaW50
ZXIgPSAwOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZw
b2ludGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lk
PiBwaXhlbHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9P
RVMpCisgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgorCisgICAgaWYg
KG1fdXNpbmdDb3JlUHJvZmlsZSkgIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0
IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNv
cmUgcHJvZmlsZSwgc28gd2UgbmVlZAorICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBhcyB3ZSBk
byBpbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgorICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEFMUEhBOgorICAgICAgICAgICAgLy8gV2UgYXJl
IHVzaW5nIEdMX1JFRCB0byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCisg
ICAgICAgICAgICBmb3JtYXQgPSBSRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkcgdG8g
YmFjayBHTF9MVU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAgICAgICAg
ICAgIGZvcm1hdCA9IFJHOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiB3ZSB3
aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRo
IGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KKyAgICA6
OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdl
U2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKworUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdWludCBvID0gMDsK
KyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBH
THVpbnQgbyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVy
biBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKK30KKworUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IEdMdWludCBvID0gMDsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJl
dHVybiBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlw
ZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NI
QURFUik7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVRleHR1cmUoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8p
OworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7CisgICAgcmV0dXJuIG87Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3VuZERyYXdG
Qk8pIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcg
dG8gYmUgdXNlZCBmb3IgZHJhd2luZworICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdl
dHMgZGVsZXRlZC4KKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKKyAg
ICB9CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dy
YW0pOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVy
YnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5
VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7
CisgICAgfSk7CisgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgbV9zdGF0
ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit7Cisg
ICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVy
cm9yIGxpc3QgdG8KKyAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBzbyBhIGNh
bGxlciB0byBnZXRFcnJvciB3aWxsIGdldAorICAgIC8vIGFueSBlcnJvcnMgZnJvbSBnbEVycm9y
IGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemluZy4KKyAgICBtb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0KCkKK3sK
KyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAg
ICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVjeWNsZUNvbnRleHQoKQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29w
eVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRleHQoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3Io
bV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZp
Y2F0aW9uKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRE
aXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKK3sKKyAg
ICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBj
b3VudCwgcHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwg
R0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNp
emVpIHByaW1jb3VudCkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKKyAgICBjaGVj
a0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQoreworICAgIGdl
dEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwor
fQorCisjaWYgSEFWRShPUEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRleCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4KGluZGV4KTsKK30KKyNlbmRpZgorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29uc3Qgdm9p
ZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVu
Z3RoKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShkYXRh
KTsKKyAgICBVTlVTRURfUEFSQU0odXNhZ2UpOworICAgIFVOVVNFRF9QQVJBTShzcmNPZmZzZXQp
OworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RCeXRl
T2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50
IGxlbmd0aCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0o
ZHN0Qnl0ZU9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY0RhdGEpOworICAgIFVOVVNFRF9Q
QVJBTShzcmNPZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCisjaWYgSEFW
RShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdy
aXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQs
IEdDR0xzaXplaXB0ciBzaXplKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3
cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOworfQorI2Vsc2UKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtLCBH
Q0dMZW51bSwgR0NHTGludHB0ciwgR0NHTGludHB0ciwgR0NHTHNpemVpcHRyKQoreworfQorI2Vu
ZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEp
Cit7CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgR0NHTHZvaWQqIHB0ciA9
IDo6Z2xNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBHcmFwaGlj
c0NvbnRleHRHTDo6TUFQX1JFQURfQklUKTsKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJu
OworICAgIG1lbWNweShkYXRhLmRhdGEsIHB0ciwgZGF0YS5idWZTaXplKTsKKyAgICBpZiAoITo6
Z2xVbm1hcEJ1ZmZlcih0YXJnZXQpKQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZGF0
YSk7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BF
UkFUSU9OKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
aXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gx
LCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRz
dFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQor
eworICAgIFVOVVNFRF9QQVJBTShzcmNYMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kwKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3JjWDEpOworICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7CisgICAgVU5V
U0VEX1BBUkFNKGRzdFgwKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTApOworICAgIFVOVVNFRF9Q
QVJBTShkc3RYMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAgICBVTlVTRURfUEFSQU0o
bWFzayk7CisgICAgVU5VU0VEX1BBUkFNKGZpbHRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IGxheWVyKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNF
RF9QQVJBTShhdHRhY2htZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dHVyZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBHQ0dMaW50
IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVTRURfUEFS
QU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3JjKTsKK30KKworI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
U3BhbjxHQ0dMaW50PiBkYXRhKQoreworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEludGVybmFs
Zm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGRhdGEuYnVmU2l6ZSwgZGF0
YS5kYXRhKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BB
UkFNKGludGVybmFsZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNF
RF9QQVJBTShidWZTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKKyNlbmRpZgorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhT
dG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xUZXhT
dG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IDo6Z2xUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisjZWxzZQordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xlbnVt
LCBHQ0dMU3BhbjxHQ0dMaW50PikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdD
R0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBH
Q0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwor
ICAgIFVOVVNFRF9QQVJBTSh4b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeW9mZnNldCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHpvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVT
RURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0o
aGVpZ2h0KTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhZ0Rh
dGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKG5hbWUpOwor
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCit7CisgICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odjApOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBH
Q0dMdWludCB2MSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NH
THVpbnQgdjEsIEdDR0x1aW50IHYyKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Cisg
ICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAgICBVTlVTRURfUEFSQU0odjEpOworICAgIFVOVVNFRF9Q
QVJBTSh2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2Miwg
R0NHTHVpbnQgdjMpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURf
UEFSQU0odjApOworICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5VU0VEX1BBUkFNKHYyKTsK
KyAgICBVTlVTRURfUEFSQU0odjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShk
YXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7CisgICAgVU5V
U0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7
CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURf
UEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkK
K3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bv
c2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5V
U0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0
aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0
YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGluZGV4
LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit7CisgICAgVU5V
U0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFN
KHkpOworICAgIFVOVVNFRF9QQVJBTSh6KTsKKyAgICBVTlVTRURfUEFSQU0odyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFS
QU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWlu
dCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQoreworICAgIFVOVVNFRF9Q
QVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsK
KyAgICBVTlVTRURfUEFSQU0oeik7CisgICAgVU5VU0VEX1BBUkFNKHcpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBpbmRleCwg
R0NHTFNwYW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
aW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNl
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShzaXplKTsK
KyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0cmlkZSk7CisgICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWlu
dCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Cit7CisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAgIFVOVVNFRF9QQVJBTShzdGFydCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAgICBVTlVT
RURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVt
PiBidWZzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZzKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJh
d2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQoreworICAgIFVOVVNFRF9Q
QVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBVTlVTRURf
UEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJC
dWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNv
bnN0IEdDR0x1aW50PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisgICAg
VU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1
ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVl
cykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0oZHJhd2J1
ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdi
dWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQoreworICAgIFVOVVNFRF9Q
QVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBVTlVTRURf
UEFSQU0oZGVwdGgpOworICAgIFVOVVNFRF9QQVJBTShzdGVuY2lsKTsKK30KKworUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQoreworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeShQ
bGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQoreworICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Cit9CisK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeShHQ0dM
ZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQoreworICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisKKyAgICByZXR1
cm4gMDsKK30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2Jq
ZWN0dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgVU5V
U0VEX1BBUkFNKHF1ZXJ5KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIHJldHVybiAw
OworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
YW1wbGVyKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit7CisgICAgVU5V
U0VEX1BBUkFNKHNhbXBsZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURf
UEFSQU0oc2FtcGxlcik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odW5pdCk7CisgICAgVU5VU0VEX1BBUkFN
KHNhbXBsZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFy
YW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50
IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0o
cG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwg
R0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Ft
cGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYW0p
OworfQorCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgcmV0
dXJuIDAuZjsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxl
clBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKKwor
eworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwor
ICAgIHJldHVybiAwOworfQorCitHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVu
Y2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQoreworICAgIFVO
VVNFRF9QQVJBTShjb25kaXRpb24pOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3lu
YyhHQ0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyhH
Q0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKK30KKworR0NHTGVudW0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdD
R0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIFVOVVNFRF9QQVJB
TShzeW5jKTsKKyAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJBTSh0aW1l
b3V0KTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbnQ2NCB0
aW1lb3V0KQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFSQU0oZmxh
Z3MpOworICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsKK30KKworR0NHTGludCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAg
cmV0dXJuIDA7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1H
TE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaWQpOworfQorCitHQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2Jq
ZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTShpZCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgaWQpCit7CisgICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2Rl
KQoreworICAgIFVOVVNFRF9QQVJBTShwcmltaXRpdmVNb2RlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQoreworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51
bSBidWZmZXJNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURf
UEFSQU0odmFyeWluZ3MpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXJNb2RlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKQorewor
ICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCkK
K3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVl
ZGJhY2soKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVy
QmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oaW5k
ZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRl
eCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlw
dHIgc2l6ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0o
aW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShvZmZz
ZXQpOworICAgIFVOVVNFRF9QQVJBTShzaXplKTsKK30KKworVmVjdG9yPEdDR0x1aW50PiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQoreworICAgIFVOVVNF
RF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybU5hbWVzKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0
b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCit7CisgICAgVmVj
dG9yPEdDR0xpbnQ+IHJlc3VsdCh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOworI2lmIEhBVkUo
T1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCisgICAgQVNTRVJUKHByb2dyYW0pOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAg
ICA6OmdsR2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCks
IHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHJlc3VsdC5kYXRhKCkpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyNlbmRp
ZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0dDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7
CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja05hbWUpOworICAgIHJldHVybiAwOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1C
bG9ja0luZGV4KTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tC
aW5kaW5nKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0o
dW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tCaW5kaW5n
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0
aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGZvcm1hdCk7
CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihH
Q0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3Jh
bSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICBVTlVTRURfUEFS
QU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSAsIEdDR0xp
bnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNp
emVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50
LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NH
TGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dM
aW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBH
Q0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwg
R0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVu
dW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50
LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NH
TGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwg
R0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVu
dW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0s
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NH
TFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTGlu
dHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQoreworICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNl
ZEFOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3Qg
R0NHTHNpemVpPiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQoreworICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzQU5H
TEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiwgR0NHTHNpemVpKQoreworICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0s
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
aW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQoreworICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKK3sKKyAgICBB
U1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIgfHwgdW5w
YWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOworICAgIFVuaXF1ZUFy
cmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CisgICAgdW5zaWduZWQgc2l6ZSA9IDA7CisgICAgaWYg
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CisgICAgICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFy
YW1zOworICAgICAgICBwYXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50OworICAgICAg
ICBHQ0dMZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwg
d2lkdGgsIGhlaWdodCwgMSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAg
ICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+
KHNpemUpOworICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7
CisgICAgfQorICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4oemVyby5nZXQo
KSwgc2l6ZSkpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTEwMyw2ICsyOTQ1
LDYgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW4KICAgICByZXR1cm4gcmVhZENvbXBvc2l0ZWRS
ZXN1bHRzKCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30KIAotI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDZjODFlYTdhODg5NTQwZDUzZTA2NWQ0
NTM0YjQ2OTU2ZjIwY2ZhMWYuLjQwODkyZjZmNWMxNTI1Y2I0NDFiMWExMmUyZjg2NDQwMzI1ZmI4
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC0yNSw1MyArMjUsMTcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoV0VCR0wpCisjaWYgRU5BQkxFKFdFQkdM
KSAmJiAhVVNFKEFOR0xFKQogCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKKyNpbmNs
dWRlICJFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKICNpbmNsdWRlIDxt
ZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCIKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNlbmRp
ZgotCi0jaWYgVVNFKENBKQotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgotI2VuZGlmCi0K
LSNpZiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiQU5HTEVVdGlsaXRpZXMuaCIKLSNlbHNlCi0jaW5j
bHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xD
b21tb24uaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIlNjb3BlZEhp
Z2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QuaCIKLSNlbmRpZgotCi0vLyBGSVhNRTogRmluZCBhIGJl
dHRlciB3YXkgdG8gYXZvaWQgdGhlIG5hbWUgY29uZmxpY3Rpb24gZm9yIE5PX0VSUk9SLgotI2lm
IFBMQVRGT1JNKFdJTikKLSN1bmRlZiBOT19FUlJPUgotI2VsaWYgUExBVEZPUk0oR1RLKQotLy8g
VGhpcyBkZWZpbmUgaXMgZnJvbSB0aGUgWDExIGhlYWRlcnMsIGJ1dCBpdCdzIHVzZWQgYmVsb3cs
IHNvIHdlIG11c3QgdW5kZWZpbmUgaXQuCi0jdW5kZWYgVkVSU0lPTgotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLU9CSkNfQ0xBU1MgV2ViR0xMYXll
cjsKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTsK
LX0KLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQogI2lmIFVTRShOSUNPU0lBKQogbmFtZXNw
YWNlIE5pY29zaWEgewogY2xhc3MgR0NHTExheWVyOwpAQCAtODAsOSArNDQsNyBAQCBjbGFzcyBH
Q0dMTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV4dGVuc2lvbnNHTDsKLSNp
ZiBVU0UoQU5HTEUpCi1jbGFzcyBFeHRlbnNpb25zR0xBTkdMRTsKLSNlbGlmIFVTRShPUEVOR0xf
RVMpCisjaWYgVVNFKE9QRU5HTF9FUykKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVTOwogI2Vs
aWYgVVNFKE9QRU5HTCkKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTDsKQEAgLTk3LDUwICs1OSwx
NCBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAKIHR5cGVkZWYgSGFz
aE1hcDxDU3RyaW5nLCB1aW50NjRfdD4gU2hhZGVyTmFtZUhhc2g7CiAKKy8vIEJhc2UgY2xhc3Mg
Zm9yIEdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIE9wZW5HTCBvciBPcGVuR0wg
RVMuCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCA6IHB1Ymxp
YyBHcmFwaGljc0NvbnRleHRHTAogewogcHVibGljOgogICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKCk7Ci0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IG92ZXJyaWRlOwotI2lmIFVTRShBTkdMRSkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
RGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdDsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Q7Ci0gICAgR0NHTGVudW0gZHJhd2lu
Z0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICBzdGF0aWMgR0NHTGVudW0gZHJhd2luZ0J1ZmZl
clRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1Rhcmdl
dCk7Ci0gICAgc3RhdGljIEdDR0xpbnQgRUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRGb3JE
cmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOwotICAgIGVudW0gY2xhc3MgUmVs
ZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgewotICAgICAgICAvLyBSZWxlYXNlcyBjdXJyZW50
IGNvbnRleHQgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgY2FsbHMgZG9uZSBpbiB0aGUg
dGhyZWFkLgotICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCi0gICAgICAgIC8vIFJlbGVh
c2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNh
bGxzIGRvbmUgaW4gdGhlIHRocmVhZC4KLSAgICAgICAgUmVsZWFzZVRocmVhZFJlc291cmNlcywK
LSAgICAgICAgLy8gUmVsZWFzZXMgYWxsIGdsb2JhbCBzdGF0ZS4gU2hvdWxkIGJlIHVzZWQgb25s
eSBhZnRlciBhbGwgZGVwZW5kaW5nIG9iamVjdHMgaGF2ZQotICAgICAgICAvLyBiZWVuIHJlbGVh
c2VkLgotICAgICAgICBUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzCi0gICAgfTsK
LSAgICBzdGF0aWMgYm9vbCByZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNv
dXJjZUJlaGF2aW9yKTsKLSNlbmRpZgotCi0gICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBi
bGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCi0gICAgdm9pZCBwcmVwYXJl
VGV4dHVyZSgpOwotCi0gICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlvbiB3aXRob3V0IGNo
ZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCi0gICAgaW50IGdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKLQotICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2luZyB0aHJvdWdoIEFO
R0xFLgotICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0KTsKLQot
ICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3
aXRoIG5vIGFsbG9jYXRpb24uCi0gICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKLQotI2lmICFVU0UoQU5HTEUpCi0g
ICAgLy8gSGVscGVyIHRvIHRleEltYWdlMkQgd2l0aCBwaXhlbD09MCBjYXNlOiBwaXhlbHMgYXJl
IGluaXRpYWxpemVkIHRvIDAuCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgbm8gR0wgZXJyb3IgaXMg
c3ludGhlc2l6ZWQuCi0gICAgLy8gQnkgZGVmYXVsdCwgYWxpZ25tZW50IGlzIDQsIHRoZSBPcGVu
R0wgZGVmYXVsdCBzZXR0aW5nLgogICAgIGJvb2wgdGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgYWxpZ25tZW50ID0gNCk7Ci0jZW5kaWYKIAog
ICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0IGZpbmFsOwotCiAgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAgICAgLy8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4KICAgICAvLwpAQCAtMjA2LDkg
KzEzMiw3IEBAIHB1YmxpYzoKICAgICBHQ0dMaW50NjQgZ2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBu
YW1lKSBmaW5hbDsKICAgICBHQ0dMaW50NjQgZ2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwg
R0NHTHVpbnQgaW5kZXgpIGZpbmFsOwogICAgIEdDR0xpbnQgZ2V0UHJvZ3JhbWkoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7Ci0jaWYgIVVTRShBTkdMRSkK
ICAgICB2b2lkIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSk7Ci0jZW5kaWYgLy8gIVVT
RShBTkdMRSkKICAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkg
ZmluYWw7CiAgICAgU3RyaW5nIGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsy
XSwgR0NHTHNpemVpLCBjb25zdCBTdHJpbmcmKTsKICAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CkBAIC0y
ODYsMTAgKzIxMCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0
KSBmaW5hbDsKLSNpZiAhVVNFKEFOR0xFKQogICAgIGJvb2wgY2hlY2tWYXJ5aW5nc1BhY2tpbmco
UGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRT
aGFkZXIpIGNvbnN0OwogICAgIGJvb2wgcHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3Qg
dmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdDsKLSNl
bmRpZgogCiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0
IHgpIGZpbmFsOwogICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IHZhbHVlcykgZmluYWw7CkBAIC0zMTcsMTAgKzIzOSw4
IEBAIHB1YmxpYzoKIAogICAgIC8vID09PT09PT09PT0gV2ViR0wyIGVudHJ5IHBvaW50cy4KIAot
I2lmICFVU0UoQU5HTEUpCiAgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29u
c3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgbGVuZ3RoKTsKICAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNyY0RhdGEsIEdDR0x1aW50IHNyY09m
ZnNldCwgR0NHTHVpbnQgbGVuZ3RoKTsKLSNlbmRpZgogICAgIHZvaWQgY29weUJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIg
cmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpIGZp
bmFsOwogCiAgICAgdm9pZCBnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKSBmaW5hbDsKQEAgLTQ1Niw5ICsz
NzYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQp
OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lkIGRpc3BsYXlXYXNSZWNv
bmZpZ3VyZWQoKTsKLSNlbmRpZgogCiAgICAgdm9pZCBzZXRDb250ZXh0VmlzaWJpbGl0eShib29s
KSBmaW5hbDsKIApAQCAtNDg0LDEyICs0MDEsOCBAQCBwdWJsaWM6CiAgICAgLy8gYWxsIG1ldGhv
ZHMgaXQgY29udGFpbnMgbWF5IG5lY2Vzc2FyaWx5IGJlIHN1cHBvcnRlZCBvbiB0aGUKICAgICAv
LyBjdXJyZW50IGhhcmR3YXJlLiBNdXN0IGNhbGwgRXh0ZW5zaW9uc0dMOjpzdXBwb3J0cygpIHRv
CiAgICAgLy8gZGV0ZXJtaW5lIHRoaXMuCi0jaWYgIVVTRShBTkdMRSkKICAgICAvLyBVc2UgY292
YXJpYW50IHJldHVybiB0eXBlIGZvciBPUEVOR0wvT1BFTkdMX0VTCiAgICAgRXh0ZW5zaW9uc0dM
T3BlbkdMQ29tbW9uJiBnZXRFeHRlbnNpb25zKCkgZmluYWw7Ci0jZWxzZQotICAgIEV4dGVuc2lv
bnNHTCYgZ2V0RXh0ZW5zaW9ucygpIGZpbmFsOwotI2VuZGlmCiAKICAgICB2b2lkIHNpbXVsYXRl
RXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CiAKQEAg
LTQ5NywyOCArNDEwLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgp
IG92ZXJyaWRlOwogCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQotICAg
IEdyYXBoaWNzQ29udGV4dEdMQ1YqIGFzQ1YoKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgc3RhdGlj
IHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmLCBQ
aXhlbEJ1ZmZlciYmLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQm
KTsKLQotI2lmIFVTRShBTkdMRSkKLSAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3Bs
YXlUeXBlIGRlZmF1bHREaXNwbGF5ID0gRUdMX0RFRkFVTFRfRElTUExBWTsKLSNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGxvd1Bv
d2VyRGlzcGxheSA9IEVHTF9DQVNUKEVHTE5hdGl2ZURpc3BsYXlUeXBlLCAtMSk7Ci0gICAgY29u
c3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBoaWdoUGVyZm9ybWFuY2VEaXNwbGF5
ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5cGUsIC0yKTsKLSNlbmRpZgotI2VuZGlmCi0K
IHByb3RlY3RlZDoKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluIG1fc3dhcENoYWluOwotICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5
T2JqIHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0
T2JqIHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9j
b25maWdPYmogeyBudWxscHRyIH07Ci0jZW5kaWYKKwogICAgIEdDR0x1aW50IG1fdGV4dHVyZSB7
IDAgfTsKIAogcHJpdmF0ZToKQEAgLTU0NywyNCArNDQxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgPSBJbnRSZWN0
KCkpOwogICAgIHZvaWQgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0NHTHVp
bnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAK
LSNpZiBVU0UoQU5HTEUpCi0gICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsK
LSNlbmRpZgotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgYWxsb2NhdGVBbmRCaW5kRGlz
cGxheUJ1ZmZlckJhY2tpbmcoKTsKLSAgICBib29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKLSAgICBz
dGF0aWMgYm9vbCBtYWtlQ3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSwg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCk7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dEdMQ1ZBTkdMRTsKLSNlbmRpZgotI2lmIFVTRShBTkdMRSkKLSAgICAvLyBSZXR1cm5zIGZh
bHNlIGlmIGNvbnRleHQgc2hvdWxkIGJlIGxvc3QgZHVlIHRvIHRpbWVvdXQuCi0gICAgYm9vbCB3
YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICAvLyBQ
bGF0Zm9ybSBzcGVjaWZpYyBiZWhhdmlvciBmb3IgcmVsZWFzZVJlc291cmNlcygpOwotICAgIHN0
YXRpYyB2b2lkIHBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygpOwotI2VuZGlmCiAKLSNp
ZiAhVVNFKEFOR0xFKQogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFVuaXF1ZVJlZjxzaDo6
U2hhZGVyVmFyaWFibGU+PiBTaGFkZXJTeW1ib2xNYXA7CiAKICAgICBzdHJ1Y3QgU2hhZGVyU291
cmNlRW50cnkgewpAQCAtNjMxLDEyICs1MDgsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZGVyTmFtZUhhc2g+IG5hbWVIYXNoTWFwRm9yU2hhZGVy
czsKLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQogCi0jaWYgVVNFKEFOR0xFKQotICAgIGZyaWVuZCBj
bGFzcyBFeHRlbnNpb25zR0xBTkdMRTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dM
QU5HTEU+IG1fZXh0ZW5zaW9uczsKLSNlbGlmIFVTRShPUEVOR0xfRVMpCisjaWYgVVNFKE9QRU5H
TF9FUykKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7CiAgICAgZnJpZW5k
IGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0
ZW5zaW9uc0dMT3BlbkdMRVM+IG1fZXh0ZW5zaW9uczsKQEAgLTY0OCw5ICs1MjEsNyBAQCBwcml2
YXRlOgogCiAgICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4+IG1fdmVydGV4QXJyYXk7CiAKLSNpZiAh
VVNFKEFOR0xFKQogICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29tcGlsZXI7Ci0jZW5kaWYKIAog
ICAgIEdDR0x1aW50IG1fZmJvIHsgMCB9OwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
QEAgLTY1OCw1NCArNTI5LDE0IEBAIHByaXZhdGU6CiAgICAgR0NHTHVpbnQgbV9pbnRlcm1lZGlh
dGVUZXh0dXJlIHsgMCB9OwogI2VuZGlmCiAKLSNpZiAhVVNFKEFOR0xFKSAmJiBVU0UoT1BFTkdM
X0VTKQorI2lmIFVTRShPUEVOR0xfRVMpCiAgICAgR0NHTHVpbnQgbV9kZXB0aEJ1ZmZlciB7IDAg
fTsKICAgICBHQ0dMdWludCBtX3N0ZW5jaWxCdWZmZXIgeyAwIH07CiAjZW5kaWYKICAgICBHQ0dM
dWludCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKIAogICAgIEdDR0x1aW50IG1faW50ZXJu
YWxDb2xvckZvcm1hdCB7IDAgfTsKLSNpZiBVU0UoQU5HTEUpCi0gICAgR0NHTHVpbnQgbV9pbnRl
cm5hbERlcHRoU3RlbmNpbEZvcm1hdCB7IDAgfTsKLSNlbmRpZgotICAgIHN0cnVjdCBHcmFwaGlj
c0NvbnRleHRHTFN0YXRlIHsKLSAgICAgICAgR0NHTHVpbnQgYm91bmRSZWFkRkJPIHsgMCB9Owot
ICAgICAgICBHQ0dMdWludCBib3VuZERyYXdGQk8geyAwIH07Ci0gICAgICAgIEdDR0xlbnVtIGFj
dGl2ZVRleHR1cmVVbml0IHsgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUwIH07Ci0KLSAgICAg
ICAgdXNpbmcgQm91bmRUZXh0dXJlTWFwID0gSGFzaE1hcDxHQ0dMZW51bSwKLSAgICAgICAgICAg
IHN0ZDo6cGFpcjxHQ0dMdWludCwgR0NHTGVudW0+LAotICAgICAgICAgICAgSW50SGFzaDxHQ0dM
ZW51bT4sCi0gICAgICAgICAgICBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdD
R0x1aW50PiwKLSAgICAgICAgICAgIFBhaXJIYXNoVHJhaXRzPFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPEdDR0x1aW50Pj4KLSAgICAgICAgPjsKLSAgICAgICAgQm91bmRUZXh0dXJlTWFwIGJvdW5k
VGV4dHVyZU1hcDsKLSAgICAgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4dHVyZSgpIGNvbnN0
IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0KLSAgICAgICAgR0NH
THVpbnQgYm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0KSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZVVuaXQpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4dHVyZU1hcC5lbmQo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmZpcnN0OwotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KIAotICAgICAgICBHQ0dMdWludCBjdXJyZW50Qm91
bmRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBib3VuZFRhcmdldChhY3RpdmVUZXh0dXJlVW5pdCk7
IH0KLSAgICAgICAgR0NHTGVudW0gYm91bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1cmVN
YXAuZmluZCh0ZXh0dXJlVW5pdCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRU
ZXh0dXJlTWFwLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUu
c2Vjb25kOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IHNldEJvdW5kVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlVW5pdCwgR0NHTHVpbnQgdGV4dHVyZSwg
R0NHTGVudW0gdGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBib3VuZFRleHR1cmVNYXAu
c2V0KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHVzaW5nIFRleHR1cmVTZWVkQ291bnQgPSBIYXNoQ291bnRlZFNldDxH
Q0dMdWludCwgSW50SGFzaDxHQ0dMdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHM8R0NHTHVpbnQ+PjsKLSAgICAgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENv
dW50OwotICAgIH07CiAKICAgICBHcmFwaGljc0NvbnRleHRHTFN0YXRlIG1fc3RhdGU7CiAKQEAg
LTcxNCwxNiArNTQ1LDYgQEAgcHJpdmF0ZToKICAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRGVw
dGhTdGVuY2lsQnVmZmVyIHsgMCB9OwogICAgIEdDR0x1aW50IG1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlciB7IDAgfTsKIAotI2lmIFVTRShBTkdMRSkKLSAgICAvLyBGb3IgcHJlc2VydmVEcmF3aW5n
QnVmZmVyOnRydWUgd2l0aG91dCBtdWx0aXNhbXBsaW5nLgotICAgIEdDR0x1aW50IG1fcHJlc2Vy
dmVEcmF3aW5nQnVmZmVyVGV4dHVyZSB7IDAgfTsKLSAgICAvLyBBdHRhY2hlcyBtX3RleHR1cmUg
d2hlbiBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlclRleHR1cmUgaXMgbm9uLXplcm8uCi0gICAgR0NH
THVpbnQgbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJGQk8geyAwIH07Ci0gICAgLy8gUXVlcmllZCBh
dCBkaXNwbGF5IHN0YXJ0dXAuCi0gICAgRUdMaW50IG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQgeyAtMSB9OwotCi0jZW5kaWYKLQogICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6
ZUdMRXJyb3IoKS4KICAgICBMaXN0SGFzaFNldDxHQ0dMZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7
CiAKQEAgLTc0NCwyOSArNTY1LDggQEAgcHJpdmF0ZToKICNpZiBVU0UoQ0FJUk8pCiAgICAgUGxh
dGZvcm1HTE9iamVjdCBtX3ZhbyB7IDAgfTsKICNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgLy8gQmFja2luZyBzdG9yZSBmb3IgdGhlIHRoZSBidWZmZXIgd2hpY2ggaXMgZXZlbnR1
YWxseSB1c2VkIGZvciBkaXNwbGF5LgotICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVy
ID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3aW5nIGJ1ZmZlciBiYWNraW5nIHN0b3JlLgotICAg
IC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IHRydWUsIHRoaXMgaXMgYmxpdHRlZCB0
byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7Ci0gICAgdm9pZCogbV9kaXNwbGF5QnVmZmVyUGJ1ZmZl
ciB7IG51bGxwdHIgfTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBib29sIG1fc3dp
dGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24geyBmYWxzZSB9OwotICAgIFNjb3BlZEhp
Z2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9oaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0OwotI2Vu
ZGlmCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+IG1fY3Y7Ci0jZW5kaWYKLSNpZiBVU0Uo
QU5HTEUpCi0gICAgYm9vbCBtX3VzZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKLSAg
ICBzaXplX3QgbV9vbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKLSAgICBTY29wZWRH
TEZlbmNlIG1fZnJhbWVDb21wbGV0aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOwotI2VuZGlm
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDczMGQ2ZDM2N2YxZjk1NDQ1YjBhNzljMTc0ZGE4OGEzZWU1MWNiOWMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDI4ODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChD
KSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLQotI2lmIEVOQUJM
RShXRUJHTCkgJiYgIVVTRShBTkdMRSkKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSAi
RXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCIKLSNlbHNlCi0jaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3Bl
bkdMLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5n
LmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNp
bmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNp
bmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXku
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotI2lmIFVTRShMSUJFUE9Y
WSkKLSNpbmNsdWRlICJFcG94eVNoaW1zLmgiCi0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1
ZGUgIk9wZW5HTEVTU2hpbXMuaCIKLSNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lO
KQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiYgZ2V0Q3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyKCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZs
YWc7Ci0gICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4qIHNoYXJlZE5h
bWVIYXNoOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIHNoYXJl
ZE5hbWVIYXNoID0gbmV3IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj47Ci0gICAgfSk7
Ci0KLSAgICByZXR1cm4gKnNoYXJlZE5hbWVIYXNoOwotfQotCi1zdGF0aWMgdm9pZCBzZXRDdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoU2hhZGVyTmFtZUhhc2gqIHNoYWRlck5hbWVIYXNoKQot
ewotICAgICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKSA9IHNoYWRlck5hbWVIYXNo
OwotfQotCi0vLyBIYXNoIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEFOR0xFIHRyYW5zbGF0b3IvY29t
cGlsZXIgdG8gZG8KLS8vIHN5bWJvbCBuYW1lIG1hbmdsaW5nLiBTaW5jZSB0aGlzIGlzIGEgc3Rh
dGljIG1ldGhvZCwgYmVmb3JlCi0vLyBjYWxsaW5nIGNvbXBpbGVTaGFkZXIgd2Ugc2V0IGN1cnJl
bnROYW1lSGFzaE1hcEZvclNoYWRlcgotLy8gdG8gcG9pbnQgdG8gdGhlIG1hcCBrZXB0IGJ5IHRo
ZSBjdXJyZW50IGluc3RhbmNlIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotCi1zdGF0aWMg
dWludDY0X3QgbmFtZUhhc2hGb3JTaGFkZXIoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbmd0
aCkKLXsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDU3RyaW5n
IG5hbWVBc0NTdHJpbmcgPSBDU3RyaW5nKG5hbWUpOwotCi0gICAgLy8gTG9vayB1cCBuYW1lIGlu
IG91ciBsb2NhbCBtYXAuCi0gICAgU2hhZGVyTmFtZUhhc2gqJiBjdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXIgPSAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCk7Ci0gICAgU2hhZGVy
TmFtZUhhc2g6Oml0ZXJhdG9yIGZpbmRSZXN1bHQgPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXItPmZpbmQobmFtZUFzQ1N0cmluZyk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgIT0gY3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZh
bHVlOwotCi0gICAgdW5zaWduZWQgaGFzaFZhbHVlID0gbmFtZUFzQ1N0cmluZy5oYXNoKCk7Ci0K
LSAgICAvLyBDb252ZXJ0IHRoZSAzMi1iaXQgaGFzaCBmcm9tIENTdHJpbmc6Omhhc2ggaW50byBh
IDY0LWJpdCByZXN1bHQKLSAgICAvLyBieSBzaGlmdGluZyB0aGVuIGFkZGluZyB0aGUgc2l6ZSBv
ZiBvdXIgdGFibGUuIE92ZXJmbG93IHdvdWxkCi0gICAgLy8gb25seSBiZSBhIHByb2JsZW0gaWYg
d2UncmUgYWxyZWFkeSBoYXNoaW5nIHRvIHRoZSBzYW1lIHZhbHVlIChhbmQKLSAgICAvLyB3ZSdy
ZSBob3BpbmcgdGhhdCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY29udGV4dCB3ZQotICAgIC8v
IGRvbid0IGhhdmUgdGhhdCBtYW55IHN5bWJvbHMpLgotCi0gICAgdWludDY0X3QgcmVzdWx0ID0g
aGFzaFZhbHVlOwotICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgMzIpICsgKGN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlci0+c2l6ZSgpICsgMSk7Ci0KLSAgICBjdXJyZW50TmFtZUhhc2hNYXBGb3JT
aGFkZXItPnNldChuYW1lQXNDU3RyaW5nLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNv
bnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKLXsKLSAgICBhdXRvIGF0dHJz
ID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbiYg
ZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewot
ICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNp
b24pKSB7Ci0gICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhT
dGVuY2lsRXh0ZW5zaW9uKTsKLSAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwg
aXMgdHJ1ZS4KLSAgICAgICAgICAgIGF0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBhdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgICAgIHNldENvbnRleHRB
dHRyaWJ1dGVzKGF0dHJzKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiAhbV9p
c0ZvcldlYkdMMikgewotICAgICAgICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xF
X2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikpIHsKLSAgICAgICAgICAgIGF0dHJzLmFudGlhbGlh
cyA9IGZhbHNlOwotICAgICAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5H
TEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKCkKLXsKLSAgICBpZiAobV9sYXllckNvbXBv
c2l0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotCi0jaWYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAg
ICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBH
TF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElU
SEVSLCBHTF9GQUxTRSk7Ci0jZW5kaWYKLQotICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFu
dGlhbGlhcykKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotCi0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1f
Y29tcG9zaXRvclRleHR1cmUpOwotICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1faW50ZXJtZWRp
YXRlVGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9m
Ym8pOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsK
LSAgICBnbEZsdXNoKCk7Ci0KLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9z
dGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2Zi
bykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBlbHNlCi0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
Ci0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJF
MCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fc3RhdGUuYm91bmRUYXJn
ZXQoR0xfVEVYVFVSRTApID09IEdMX1RFWFRVUkVfMkQgPyBtX3N0YXRlLmJvdW5kVGV4dHVyZShH
TF9URVhUVVJFMCkgOiAwKTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRl
eHR1cmVVbml0KTsKLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5i
b3VuZERyYXdGQk8pOwotICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICA6OmdsRmx1c2goKTsKLX0KLQotc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJp
bmdSZXN1bHRzKCkKLXsKLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYg
KGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNh
bXBsaW5nSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFw
aGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgbXVzdFJlc3RvcmVG
Qk8gPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmJvdW5k
RHJhd0ZCTyAhPSBtX2ZibykgewotICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwot
ICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IHJl
YWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
LCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17
Ci0gICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRI
ZWlnaHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdo
dCA+PSAwKTsKLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotCi0gICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsK
LSAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMo
KTsKLQotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09S
X1RFU1QsIEdMX0ZBTFNFKTsKLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhl
cihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKLSAgICAKLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0g
cmVzaGFwZUZCT3MoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7Ci0KLSAgICAvLyBJbml0aWFsaXpl
IHJlbmRlcmJ1ZmZlcnMgdG8gMC4KLSAgICBHTGZsb2F0IGNsZWFyQ29sb3JbXSA9IHswLCAwLCAw
LCAwfSwgY2xlYXJEZXB0aCA9IDA7Ci0gICAgR0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKLSAgICBH
TGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJV
RX0sIGRlcHRoTWFzayA9IEdMX1RSVUU7Ci0gICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZm
ZmZmZiwgc3RlbmNpbE1hc2tCYWNrID0gMHhmZmZmZmZmZjsKLSAgICBHTGJpdGZpZWxkIGNsZWFy
TWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9D
TEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7Ci0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
Ci0gICAgOjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKLSAg
ICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOwotCi0g
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cnMuZGVw
dGgpIHsKLSAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFy
RGVwdGgpOwotICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsK
LSAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7
Ci0gICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBH
TF9ERVBUSF9CVUZGRVJfQklUOwotICAgIH0KLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNp
bCk7Ci0gICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2ls
TWFzaykpOwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFT
SywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKLSAgICAgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOwotICAgICAgICA6
OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKLSAgICAgICAgY2xl
YXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICB9Ci0KLSAgICA6OmdsQ2xlYXIo
Y2xlYXJNYXNrKTsKLQotICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29s
b3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOwotICAgIDo6Z2xDb2xvck1hc2so
Y29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsK
LSAgICBpZiAoYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7Ci0gICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNr
KTsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgOjpnbENsZWFyU3Rl
bmNpbChjbGVhclN0ZW5jaWwpOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9G
Uk9OVCwgc3RlbmNpbE1hc2spOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9C
QUNLLCBzdGVuY2lsTWFza0JhY2spOwotICAgIH0KLQotICAgIGlmIChtdXN0UmVzdG9yZUZCTykK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLQotICAgIGF1dG8gZXJyb3IgPSA6OmdsR2V0
RXJyb3IoKTsKLSAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpIHsKLSAgICAgICAgUkVMRUFT
RV9MT0coV2ViR0wsICJGYXRhbDogT3BlbkdMIGVycm9yIGR1cmluZyBHcmFwaGljc0NvbnRleHRH
TCBidWZmZXIgaW5pdGlhbGl6YXRpb24gKCVkKS4iLCBlcnJvcik7Ci0gICAgICAgIGZvcmNlQ29u
dGV4dExvc3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIDo6Z2xGbHVzaCgpOwot
fQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQ
bGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNo
YWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVy
dGV4U2hhZGVyKSk7Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdt
ZW50U2hhZGVyKSk7Ci0gICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50
RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0K
LSAgICBIYXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdz
OwotICAgIGZvciAoY29uc3QgYXV0byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWlu
Z01hcCkgewotICAgICAgICBjb25zdCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wu
a2V5OwotICAgICAgICAvLyBUaGUgdmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBl
YWNoIGluZGV4IG9mIGFuIGFycmF5IHZhcmlhYmxlLgotICAgICAgICAvLyBXZSBvbmx5IHdhbnQg
YSBzaW5nbGUgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBhcnJheS4KLSAgICAgICAgaWYgKHN5
bWJvbE5hbWUuZW5kc1dpdGgoIl0iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IC8vIERvbid0IGNvdW50IGJ1aWx0IGluIHZhcnlpbmdzLgotICAgICAgICBpZiAoc3ltYm9sTmFt
ZSA9PSAiZ2xfRnJhZ0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwg
c3ltYm9sTmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWlu
Z01hcC5maW5kKHN5bWJvbE5hbWUpOwotICAgICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJh
Z21lbnRFbnRyeS52YXJ5aW5nTWFwLmVuZCgpKQotICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5n
cy5hZGQoc3ltYm9sTmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZhbHVlKTsKLSAgICB9Ci0KLSAgICBz
aXplX3QgbnVtVmFyeWluZ3MgPSBjb21iaW5lZFZhcnlpbmdzLnNpemUoKTsKLSAgICBpZiAoIW51
bVZhcnlpbmdzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHN0ZDo6dmVjdG9yPHNoOjpT
aGFkZXJWYXJpYWJsZT4gdmFyaWFibGVzOwotICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVk
VmFyeWluZ3Muc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBj
b21iaW5lZFZhcnlpbmdzLnZhbHVlcygpKQotICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZh
cnlpbmdTeW1ib2wpOwotCi0gICAgR0NHTGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7Ci0jaWYg
VVNFKE9QRU5HTF9FUykKLSAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywg
Jm1heFZhcnlpbmdWZWN0b3JzKTsKLSNlbHNlCi0gICAgaWYgKG1faXNGb3JXZWJHTDIpCi0gICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1Zl
Y3RvcnMpOwotICAgIGVsc2UgewotICAgICAgICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMgPSAw
OwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFy
eWluZ0Zsb2F0cyk7Ci0gICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0
cyAvIDQ7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Ci19Ci0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0
IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Ci0g
ICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0g
ICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRl
eFNoYWRlciktPnZhbHVlOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0
cmluZywgc2g6OkdMZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOwotCi0gICAgZm9yIChj
b25zdCBhdXRvJiBlbnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKLSAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OwotICAgICAgICB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1l
LmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNp
b24pOwotICAgIH0KLQotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5
LnVuaWZvcm1NYXApIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBl
bnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOwotICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhT
eW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5j
X3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wg
IT0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUg
IT0gZW50cnkudmFsdWUuZ2V0KCkucHJlY2lzaW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCA9IHRleHR1cmU7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChw
cm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBu
YW1lKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Ci0g
ICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICA6Omds
QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJpbmRCdWZmZXIodGFy
Z2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHTHVp
bnQgZmJvOwotICAgIGlmIChidWZmZXIpCi0gICAgICAgIGZibyA9IGJ1ZmZlcjsKLSAgICBlbHNl
Ci0gICAgICAgIGZibyA9IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlz
YW1wbGVGQk8gOiBtX2Zibyk7Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUik7
Ci0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKLSAgICBpZiAoZmJvICE9IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7Ci0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gZmJvOwotICAgIH0KLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRh
cmdldCwgcmVuZGVyYnVmZmVyKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0
dXJlLCB0YXJnZXQpOwotICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVk
LCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJs
ZW5kRXF1YXRpb24obW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQotCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9y
LCBHQ0dMZW51bSBkZmFjdG9yKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Ci19
ICAgICAgIAotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0
ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdD
R0xlbnVtIGRzdEFscGhhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwg
c3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1
c2FnZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnRwdHIgb2Zmc2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVy
U3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwotfQotCi1H
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
Q0dMZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwotCi0gICAgcmV0dXJuIDo6Z2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYg
YiwgR0NHTGNsYW1wZiBhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
Q2xlYXIobWFzayk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXJTdGVuY2ls
KHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJv
b2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xl
YW4gYWxwaGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVHVybiBvbiBuYW1lIG1hcHBp
bmcuIER1ZSB0byB0aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKLSAgICAvLyBw
b2ludCBhIGdsb2JhbCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0Lgot
ICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVz
b3VyY2VzKCk7Ci0gICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFO
R0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsKLSAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rp
b24gPSBuYW1lSGFzaEZvclNoYWRlcjsKLQotICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJz
KQotICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVI
YXNoPigpOwotICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZv
clNoYWRlcnMuZ2V0KCkpOwotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKLQotICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25z
LT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKLQotICAgIEFOR0xFUmVz
b3VyY2VzLkhhc2hGdW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOwotICAgIG1fY29tcGls
ZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIobnVsbHB0cik7Ci0KLSAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Uu
bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0
ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29u
c3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRh
dGEoKTsKLSAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJD
U3RyaW5nLmxlbmd0aCgpOwotCi0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNo
YWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxu
IiwgZ2V0U2hhZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7Ci0gICAgTE9HKFdlYkdM
LCAiLS0tIGJlZ2luIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRy
YW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKLQotICAg
IDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5z
bGF0ZWRTaGFkZXJMZW5ndGgpOwotICAgIAotICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7
Ci0gICAgCi0gICAgaW50IGNvbXBpbGVTdGF0dXM7Ci0gICAgCi0gICAgOjpnbEdldFNoYWRlcml2
KHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKLQotICAgIFNoYWRlclNv
dXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OwotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0KLSAgICAv
LyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZwotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpn
bEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAg
IGlmIChsZW5ndGgpIHsKLSAgICAgICAgR0xzaXplaSBzaXplID0gMDsKLSAgICAgICAgVmVjdG9y
PEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgICAgICBQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OwotICAgICAgICBlbnRyeS5sb2cgPSBnZXRV
bm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwot
ICAgIH0KLQotICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKLSAgICAgICAgZW50
cnkuaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRy
YW5zbGF0b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUu
Iik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hh
ZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIp
OwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEhhc2hNYXA8UGxhdGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTaGFk
ZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAgY29uc3QgQ1N0cmlu
ZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3Qg
Y2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7Ci0gICAg
aW50IHNoYWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7Ci0K
LSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xu
LS0tIGVuZCBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7Ci0K
LSAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRl
clNvdXJjZUxlbmd0aCk7Ci0KLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotCi0gICAg
aW50IGNvbXBpbGVTdGF0dXM7Ci0KLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxF
X1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOwotCi0gICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xf
VFJVRSkgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgTE9HKFdlYkdM
LCAiRGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBzdWNjZWVkZWQuIik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBMT0coV2ViR0wsICJF
cnJvcjogZGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7Ci0gICAgfQotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIEFTU0VSVCht
X3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGF0
dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJP
KSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGF0dHJzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0g
ICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ3VsbEZh
Y2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhH
Q0dMZW51bSBmdW5jKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEZXB0aE1h
c2soZmxhZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRl
cihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewot
ICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAgOjpnbERldGFjaFNoYWRlcihwcm9n
cmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxl
KEdDR0xlbnVtIGNhcCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsRGlzYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwg
R0NHTHNpemVpIGNvdW50KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0g
ICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSkpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEVuYWJsZShjYXApOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWlu
dCBpbmRleCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGaW5pc2goKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGbHVzaCgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7Ci0gICAgOjpnbEdl
dFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhB
dHRyaWJ1dGVTaXplKTsKLSAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUp
OyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5h
dGlvbi4KLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwot
ICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGlu
ZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRh
dGEoKSk7Ci0gICAgaWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBT
SEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5n
dGgpKTsKLSAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUu
ZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBp
bmcgYWN0aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4
LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7
Ci0jZW5kaWYKLQotICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUg
PSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIEdD
R0xpbnQgc3ltYm9sQ291bnQ7Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5
bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywg
JnN5bWJvbENvdW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICB9Ci0gICAgCi0gICAgQWN0aXZlU2hhZGVyU3ltYm9s
Q291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOwotICAgIEdDR0x1aW50IHJhd0lu
ZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcFtpbmRleF0gOiAtMTsKLQotICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dy
YW0sIHJhd0luZGV4LCBpbmZvKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dy
YW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNp
emUpOwotCi0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FD
VElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBH
THNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0
eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5p
Zm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBp
ZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTdHJpbmcg
b3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xf
VFlQRV9VTklGT1JNLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVu
Z3RoKTsKLSAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZv
cm0gJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRm
OCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAgCi0g
ICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAg
aW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIEdDR0xpbnQgc3ltYm9s
Q291bnQ7Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5m
aW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHBy
b2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7
Ci0gICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJv
Z3JhbSk7Ci0gICAgfQotICAgIAotICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9s
Q291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8
IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBz
eW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsK
LSAgICAKLSAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgs
IGluZm8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNo
YWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xz
aXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCi17Ci0gICAgaWYgKCFwcm9n
cmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKLX0KLQotc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG5hbWU7Ci0gICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFt
ZS51dGY4KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygi
d2ViZ2xfIiwgaGV4KG51bWJlciwgTG93ZXJjYXNlKSk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VN
YXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xU
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1h
cC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGNvbnN0IGF1dG8m
IHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOwotICAgIGF1
dG8gc3ltYm9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKLSAgICBpZiAoc3ltYm9sRW50
cnkgPT0gc3ltYm9sTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgYXV0byYgbWFwcGVkTmFtZSA9IHN5bWJvbEVudHJ5LT52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OwotICAgIHJldHVybiBTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0
aCgpKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xO
YW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJv
bFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwot
ICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKLSAgICBnZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLQotICAgIGZvciAoR0NHTHNpemVp
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBw
ZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsK
LSAgICAgICAgaWYgKG1hcHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52
YWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRl
ZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgotICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRT
aGFkZXJNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVy
TWFwLmVuZCgpKSB7Ci0gICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7
Ci0gICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFw
KGxpbmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFw
cGVkTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgICAg
IG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJz
LnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAg
ICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3lt
Ym9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHko
KSkgewotICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkg
YmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCi0gICAg
ICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIg
cHJvZ3JhbS4KLSAgICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgICAg
ICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwot
ICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFk
ZXJzLmdldCgpKTsKLQotICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hl
ZE5hbWUobmFtZSk7Ci0KLSAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51
bGxwdHIpOwotCi0gICAgICAgIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVy
YXRlZE5hbWUsIG5hbWUpOwotCi0gICAgICAgIHJldHVybiBnZW5lcmF0ZWROYW1lOwotICAgIH0K
LQotICAgIHJldHVybiBuYW1lOwotfQotCi1zdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9
IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOwotICAgIGZvciAoY29uc3QgYXV0
byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKLSAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9s
RW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQotICAgICAgICAgICAgcmV0dXJu
IHN5bWJvbEVudHJ5LmtleTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQot
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQotewotICAgIEdDR0xzaXplaSBjb3VudDsKLSAgICBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcnNbMl07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7Ci0gICAgCi0gICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNo
YWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYg
KG9yaWdpbmFsTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsK
LSAgICB9Ci0KLSAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNo
YWRlcnMgYWZ0ZXIgbGlua2luZy4KLSAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFw
LmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQo
KSkgewotICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOwotICAgICAg
ICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlu
a2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5h
bE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgICAg
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hh
ZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1l
KQotICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAg
IGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0
aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxl
ZCwKLSAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55
IHNoYWRlciBwcm9ncmFtLgotCi0gICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2li
bHlVbnVzZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKLSAgICAgICAgaWYgKGNhY2hlZCAhPSBt
X3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZC0+dmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGZvciAo
c2l6ZV90IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4o
U0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUpIHsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBTaGFkZXJTb3Vy
Y2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tp
XSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25z
dCBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0
YXRpY19jYXN0PGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7Ci0gICAg
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZS5jX3N0cigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5Owot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotfQotCi1p
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkK
LSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIC0xOwotCi0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJv
bE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Ci0gICAg
TE9HKFdlYkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJu
IDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkp
OwotfQotCi1pbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGly
ZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0KLSAgICByZXR1cm4gOjpnbEdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWJvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKLQotICAgIC8vIFNldCBhbiBhcmJpdHJh
cnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCi0gICAgLy8g
YSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIg
dGhlIGVycm9yLgotICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdl
IGdvdCBOT19FUlJPUi4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsK
LSAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7Ci0gICAgICAgIGlmIChlcnJv
ciA9PSBOT19FUlJPUikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOwotICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBtb3ZlZEFuRXJyb3I7Ci19Ci0KLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUg
c3ludGhldGljIGVycm9yIGxpc3QgaW4gY2FzZQotICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFs
cmVhZHkgdGhlcmUsIHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCi0gICAgICAg
IC8vIGdsR2V0RXJyb3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3Ig
Y29kZSBvbmNlLgotICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAg
ICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOwotICAgIH0KLQotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKLQotICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKLX0KLQotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBy
ZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmco
bmFtZSkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKLX0KLQot
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFM
U0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xf
RkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLUdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsK
LQotICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVi
dWZmZXIpCi17Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKLX0K
LQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4g
R0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQot
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIGlmICghcmVuZGVyYnVmZmVyKQotICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVy
RVhUKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRl
cikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1NoYWRl
cihzaGFkZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRl
eHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17
Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotCi0gICAgR0NHTHNpemVpIGNvdW50ID0gMDsKLSAgICBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICBpZiAoY291bnQgPT0gMikKLSAgICAgICAg
bV9saW5rZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0s
IHNoYWRlcnNbMV0pKTsKLQotICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQgcGFyYW0pCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3Rvciwg
R0NHTGZsb2F0IHVuaXRzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBm
IHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBp
bnZlcnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLQotICAgIFNoYWRlclNvdXJjZUVudHJ5
IGVudHJ5OwotCi0gICAgZW50cnkuc291cmNlID0gc3RyaW5nOwotCi0gICAgbV9zaGFkZXJTb3Vy
Y2VNYXAuc2V0KHNoYWRlciwgV1RGTW92ZShlbnRyeSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NH
THVpbnQgbWFzaykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3Rl
bmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVu
Y2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NH
TGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2ls
T3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRl
cmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUs
IGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVu
aWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZv
cm0yZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zZihs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBh
cnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOwotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2Z2
KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVu
aWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGludCB2MCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24s
IGFycmF5LmJ1ZlNpemUsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2
MSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbnQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0z
aShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
YXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNp
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9y
bTRpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJh
eSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJy
YXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAx
NikpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRy
YW5zcG9zZSwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVc2VQcm9ncmFtKHBy
b2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0LCAxPiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRh
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NH
THVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRy
aWIyZihpbmRleCwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBp
bmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVy
dGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdCwgMz4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXku
ZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYy
LCBHQ0dMZmxvYXQgdjMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2
Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkg
c3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRl
eCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWln
aHQpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVWZXJ0ZXhBcnJheSgpCi17Ci0gICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0
ZXhBcnJheU9FUygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVW
ZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQotewotICAgIGdldEV4dGVuc2lvbnMo
KS5kZWxldGVWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCi17
Ci0gICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3Jt
R0xPYmplY3QgYXJyYXkpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmJpbmRWZXJ0ZXhBcnJheU9F
UyhhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEJv
b2xlYW52KHBuYW1lLCB2YWx1ZS5kYXRhKTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lKQotewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dM
U3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmRhdGEp
OwotfQotCi1HQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChH
Q0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0NHTGludDY0IHZh
bHVlID0gMDsKLSAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11
c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0
aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgotICAgIC8vIDo6
Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1H
Q0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0g
cG5hbWUsIEdDR0x1aW50IGluZGV4KQotewotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7Ci0gICAgLy8gRklYTUUg
MTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRv
IHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRl
eHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KLSAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1l
LCBpbmRleCwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQotewotICAg
IEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVCkKLSAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5D
SUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgotICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwot
ICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBH
Q0dMaW50IHZhbHVlID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAm
dmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQotewotICAgIEFTU0VSVChBQ1RJ
VkVfQVRUUklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOwotICAg
IGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAh
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICAqdmFsdWUg
PSByZXN1bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0
aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkpOwotICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYg
c3ltYm9sQ291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFt
KS0+dmFsdWU7Ci0KLSAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxk
IGEgZmlsdGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcgb2YKLSAgICAvLyBvdXIgaW50ZXJuYWwg
YXR0cmlidXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUg
T3BlbkdMLgotICAgIEdDR0xpbnQgYXR0cmlidXRlQ291bnQgPSAwOwotICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7Ci0gICAg
Zm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgewotICAgICAgICBB
Y3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwg
aW5mbyk7Ci0gICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0
dHJpYnV0ZUluZGV4TWFwLmFwcGVuZChpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRG8gdGhlIHNh
bWUgZm9yIHVuaWZvcm1zLgotICAgIEdDR0xpbnQgdW5pZm9ybUNvdW50ID0gMDsKLSAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Ci0g
ICAgZm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKLSAgICAgICAg
QWN0aXZlSW5mbyBpbmZvOwotICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBp
LCBpbmZvKTsKLSAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVk
VG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkpOwotICAgIH0KLSAgICAKLSAgICAqdmFs
dWUgPSBzeW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKLX0KLQotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKLXsKLSAgICBM
T0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEo
KSk7Ci0KLSAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAx
MjM0NTY3ODlhYmNkZWZBQkNERUZdKyIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRM
b2c7Ci0gICAgCi0gICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8g
dGhlIHNoYWRlciBzb3VyY2UgdGhhdAotICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBj
b21waWxlcnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKLSAgICAvLyB0aGlzIHdhcm5pbmcg
dG8gdGhlIHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAotICAgIC8v
IGlzIGNhdXNpbmcgaXQuCi0gICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
YW5nbGVXYXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRl
cjUnIGlzIG5vdCBzdXBwb3J0ZWRcbiJfcyB9OwotICAgIGludCBzdGFydEZyb20gPSBsb2cuc3Rh
cnRzV2l0aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsK
LSAgICBpbnQgbWF0Y2hlZExlbmd0aCA9IDA7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGludCBzdGFy
dCA9IHJlZ0V4cC5tYXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOwotICAgICAg
ICBpZiAoc3RhcnQgPT0gLTEpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBwcm9jZXNz
ZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkp
OwotICAgICAgICBzdGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7Ci0KLSAgICAgICAg
Y29uc3QgU3RyaW5nJiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hl
ZExlbmd0aCk7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3lt
Ym9sTmFtZShzaGFkZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkRlbWFuZ2xpbmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBt
YXBwZWRTeW1ib2wudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQo
bWFwcGVkU3ltYm9sKTsKLSAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+
KGxvZy5sZW5ndGgoKSkpOwotCi0gICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5n
KHN0YXJ0RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7Ci0KLSAgICBMT0coV2ViR0ws
ICJVbm1hbmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwotfQot
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBH
TGludCBsZW5ndGggPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hhcj4gaW5m
byhsZW5ndGgpOwotICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZz
aXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICBHQ0dMc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdOwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAm
Y291bnQsIHNoYWRlcnMpOwotCi0gICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVy
cywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwotfQotCi1HQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIDo6Z2xH
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAg
IHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAg
QVNTRVJUKHNoYWRlcik7Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotCi0KLSAgICBjb25zdCBhdXRv
JiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgCi0gICAgc3dp
dGNoIChwbmFtZSkgewotICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKLSAgICBjYXNlIFNIQURFUl9U
WVBFOgotICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgJnZhbHVlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKLSAgICAgICAgaWYgKHJlc3Vs
dCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIElORk9fTE9HX0xFTkdUSDoKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIp
Lmxlbmd0aCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RI
OgotICAgICAgICB2YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX0VOVU0pOwotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLVN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgY29u
c3QgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKLSAgICBpZiAoIWVu
dHJ5LmlzVmFsaWQpCi0gICAgICAgIHJldHVybiBlbnRyeS5sb2c7Ci0KLSAgICBHTGludCBsZW5n
dGggPSAwOwotICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwg
Jmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0K
LSAgICBHTHNpemVpIHNpemUgPSAwOwotICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsK
LSAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0
YSgpKTsKLQotICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07
Ci0gICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8u
ZGF0YSgpLCBzaXplKSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFk
ZXIpOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3Vy
Y2U7Ci19Ci0KLUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1l
dGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xmbG9hdCB2
YWx1ZSA9IDAuZjsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17
Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldFVuaWZvcm1p
dihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5p
Zm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVk
U3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7Ci0g
ICAgTE9HKFdlYkdMLCAiOjpnZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1
cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOwotfQotCi1HQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHZvaWQq
IHBvaW50ZXIgPSAwOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5h
bWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBwaXhlbHMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0jaWYgIVVTRShPUEVOR0xfRVMpCi0gICAgaWYgKHR5cGUgPT0gSEFMRl9G
TE9BVF9PRVMpCi0gICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKLSNlbmRpZgotCi0g
ICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgIHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUg
Zm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2lu
ZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVlZAotICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBh
cyB3ZSBkbyBpbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgotICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEFMUEhBOgotICAgICAgICAgICAgLy8g
V2UgYXJlIHVzaW5nIEdMX1JFRCB0byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdl
bGwuCi0gICAgICAgICAgICBmb3JtYXQgPSBSRUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xf
UkcgdG8gYmFjayBHTF9MVU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAg
ICAgICAgICAgIGZvcm1hdCA9IFJHOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1F
OiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGlu
ZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4K
LSAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5kYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENvbXByZXNzZWRUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBv
ID0gMDsKLSAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAg
IHJldHVybiBvOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKLX0KLQotUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVy
KCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwot
ICAgIHJldHVybiBvOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBnbENyZWF0ZVNoYWRl
cigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVS
VEVYX1NIQURFUik7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuVGV4dHVyZXMo
MSwgJm8pOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7Ci0gICAgcmV0dXJu
IG87Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3Jt
R0xPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8pIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3Qg
Z29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2luZwotICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVy
IGl0IGdldHMgZGVsZXRlZC4KLSAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAw
KTsKLSAgICB9Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3Zl
KHByb2dyYW0pOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
cmVuZGVyYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0
byYga2V5VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRl
eHR1cmU7Ci0gICAgfSk7Ci0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci0gICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3Ip
Ci17Ci0gICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhl
dGljIGVycm9yIGxpc3QgdG8KLSAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBz
byBhIGNhbGxlciB0byBnZXRFcnJvciB3aWxsIGdldAotICAgIC8vIGFueSBlcnJvcnMgZnJvbSBn
bEVycm9yIGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemluZy4KLSAgICBtb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJy
b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0
KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQot
ICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQoKQotewotICAgIGZvciAoYXV0byogY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRl
eHQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0
Q2hhbmdlZE5vdGlmaWNhdGlvbigpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9W
ZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1v
ZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkK
LXsKLSAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZp
cnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKLSAg
ICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQotewot
ICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlz
b3IpOwotfQotCi0jaWYgSEFWRShPUEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRl
eCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4KGluZGV4KTsKLX0KLSNlbmRpZgotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29u
c3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgbGVuZ3RoKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKLSAgICBVTlVTRURfUEFSQU0odXNhZ2UpOwotICAgIFVOVVNFRF9QQVJBTShzcmNP
ZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBk
c3RCeXRlT2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdD
R0x1aW50IGxlbmd0aCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURf
UEFSQU0oZHN0Qnl0ZU9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY0RhdGEpOwotICAgIFVO
VVNFRF9QQVJBTShzcmNPZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotfQotCi0j
aWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xl
bnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVP
ZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFy
Z2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwotfQotI2Vs
c2UKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xl
bnVtLCBHQ0dMZW51bSwgR0NHTGludHB0ciwgR0NHTGludHB0ciwgR0NHTHNpemVpcHRyKQotewot
fQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+
IGRhdGEpCi17Ci0jaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgR0NHTHZvaWQq
IHB0ciA9IDo6Z2xNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBH
cmFwaGljc0NvbnRleHRHTDo6TUFQX1JFQURfQklUKTsKLSAgICBpZiAoIXB0cikKLSAgICAgICAg
cmV0dXJuOwotICAgIG1lbWNweShkYXRhLmRhdGEsIHB0ciwgZGF0YS5idWZTaXplKTsKLSAgICBp
ZiAoITo6Z2xVbm1hcEJ1ZmZlcih0YXJnZXQpKQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OKTsKLSNlbmRpZgotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50
IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dM
aW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmls
dGVyKQotewotICAgIFVOVVNFRF9QQVJBTShzcmNYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1kw
KTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWDEpOwotICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGRzdFgwKTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WTApOwotICAgIFVO
VVNFRF9QQVJBTShkc3RYMSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKLSAgICBVTlVTRURf
UEFSQU0obWFzayk7Ci0gICAgVU5VU0VEX1BBUkFNKGZpbHRlcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IGxheWVyKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAg
IFVOVVNFRF9QQVJBTShhdHRhY2htZW50KTsKLSAgICBVTlVTRURfUEFSQU0odGV4dHVyZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKLSAgICBVTlVTRURfUEFSQU0obGF5ZXIpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQot
ewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50
cyk7Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVT
RURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oc3JjKTsKLX0KLQotI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdM
X0VTXzMpCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKQotewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldElu
dGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAg
IFVOVVNFRF9QQVJBTShidWZTaXplKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKLSNlbmRp
ZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZCht
X3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0jZWxzZQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSwgR0NHTGVudW0sIEdD
R0xlbnVtLCBHQ0dMU3BhbjxHQ0dMaW50PikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKLXsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpKQotewotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9m
ZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGV2
ZWwpOwotICAgIFVOVVNFRF9QQVJBTSh4b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oeW9mZnNl
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHpvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAg
ICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURf
UEFSQU0oaGVpZ2h0KTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKG5h
bWUpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odjApOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50
IHYwLCBHQ0dMdWludCB2MSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVO
VVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHYxKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2
MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFSQU0odjEpOwotICAgIFVO
VVNFRF9QQVJBTSh2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWlu
dCB2MiwgR0NHTHVpbnQgdjMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0odjApOwotICAgIFVOVVNFRF9QQVJBTSh2MSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHYyKTsKLSAgICBVTlVTRURfUEFSQU0odjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9Q
QVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShs
b2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVO
VVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
ZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0
cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAg
IFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwot
ICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50
IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh6KTsKLSAgICBVTlVTRURfUEFSQU0odyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykKLXsKLSAgICBVTlVT
RURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBH
Q0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQotewotICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJB
TSh5KTsKLSAgICBVTlVTRURfUEFSQU0oeik7Ci0gICAgVU5VU0VEX1BBUkFNKHcpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwg
R0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRy
IG9mZnNldCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShz
aXplKTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0cmlkZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBH
Q0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGFy
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGVuZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKLSAg
ICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdD
R0xlbnVtPiBidWZzKQotewotICAgIFVOVVNFRF9QQVJBTShidWZzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xp
bnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQotewotICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBV
TlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xT
cGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7
Ci0gICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xl
bnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHZhbHVlcykKLXsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0o
ZHJhd2J1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50
IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQotewotICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBV
TlVTRURfUEFSQU0oZGVwdGgpOwotICAgIFVOVVNFRF9QQVJBTShzdGVuY2lsKTsKLX0KLQotUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQotewot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVR
dWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7
Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRm
b3JtR0xPYmplY3QgcXVlcnkpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVy
eShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQotewotICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewot
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0KLSAg
ICByZXR1cm4gMDsKLX0KLQotR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1
ZXJ5T2JqZWN0dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIHJl
dHVybiAwOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTYW1wbGVyKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKLXsKLSAgICBV
TlVTRURfUEFSQU0oc2FtcGxlcik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0odW5pdCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHNhbXBsZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1w
bGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50IHBhcmFtKQotewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURf
UEFSQU0ocG5hbWUpOwotICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2Ft
cGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKLXsKLSAgICBVTlVTRURfUEFS
QU0oc2FtcGxlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0o
cGFyYW0pOwotfQotCi1HQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBs
ZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0g
ICAgcmV0dXJuIDAuZjsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFt
ZSkKLQotewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5h
bWUpOwotICAgIHJldHVybiAwOwotfQotCi1HQ0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQotewot
ICAgIFVOVVNFRF9QQVJBTShjb25kaXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0K
LSAgICByZXR1cm4gMDsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzU3luYyhHQ0dMc3luYyBzeW5jKQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
U3luYyhHQ0dMc3luYyBzeW5jKQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLX0KLQotR0NH
TGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5
bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQotewotICAgIFVOVVNF
RF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwotICAgIFVOVVNFRF9QQVJB
TSh0aW1lb3V0KTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xp
bnQ2NCB0aW1lb3V0KQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURfUEFS
QU0oZmxhZ3MpOwotICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsKLX0KLQotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5h
bWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxh
dGZvcm1HTE9iamVjdCBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwotfQotCi1HQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9y
bUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNFRF9QQVJBTShpZCk7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVk
YmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlkKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRp
dmVNb2RlKQotewotICAgIFVOVVNFRF9QQVJBTShwcmltaXRpdmVNb2RlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQotewotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBH
Q0dMZW51bSBidWZmZXJNb2RlKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBV
TlVTRURfUEFSQU0odmFyeWluZ3MpOwotICAgIFVOVVNFRF9QQVJBTShidWZmZXJNb2RlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
KQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRi
YWNrKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNm
b3JtRmVlZGJhY2soKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
QnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlcikKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWlu
dCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dM
c2l6ZWlwdHIgc2l6ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwotICAgIFVOVVNFRF9QQVJB
TShvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLX0KLQotVmVjdG9yPEdDR0x1aW50
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQotewotICAg
IFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybU5hbWVzKTsK
LQotICAgIHJldHVybiB7IH07Ci19Ci0KLVZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25z
dCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCi17Ci0g
ICAgVmVjdG9yPEdDR0xpbnQ+IHJlc3VsdCh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOwotI2lm
IEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi0gICAgQVNTRVJUKHByb2dyYW0p
OwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0KLSAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5z
aXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHJlc3VsdC5kYXRhKCkpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
LSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJv
Z3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja05hbWUpOwotICAgIHJldHVybiAw
OwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1C
bG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJ
bmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVu
aWZvcm1CbG9ja0luZGV4KTsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tCaW5kaW5nKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURf
UEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tC
aW5kaW5nKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMo
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAg
ICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJB
TSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci0gICAgVU5VU0VEX1BBUkFNKGZv
cm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxv
Y2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykKLXsKLSAgICBVTlVTRURfUEFSQU0o
cHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICBVTlVT
RURfUEFSQU0ocG5hbWUpOwotICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSAs
IEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtLCBH
Q0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQot
ewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVt
LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
aW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NH
TGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51
bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQotewot
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
Tik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0lu
c3RhbmNlZEFOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48
Y29uc3QgR0NHTHNpemVpPiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQot
ewotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1l
bnRzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NH
TGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQotewotICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNh
ZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKLXsK
LSAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIg
fHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOwotICAgIFVu
aXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87Ci0gICAgdW5zaWduZWQgc2l6ZSA9IDA7Ci0g
ICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7Ci0gICAgICAgIFBpeGVsU3RvcmVQYXJh
bXMgcGFyYW1zOwotICAgICAgICBwYXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50Owot
ICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7
Ci0gICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVk
IGNoYXI+KHNpemUpOwotICAgICAgICBpZiAoIXplcm8pIHsKLSAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwg
c2l6ZSk7Ci0gICAgfQotICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4oemVy
by5nZXQoKSwgc2l6ZSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTE1hbmFnZXIuY3BwCmluZGV4IGU2NmUwMGFkYjI4NzVhZGY2OWExOTdmY2M2OTIz
MTZkYTZmOTZlNmUuLmQyOTlhMTlmYTg2NjM5NzU1MmRkNmRlNzg4MGNjYTQzMzgyZjI4YTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwCkBAIC0y
OCw5ICsyOCwxMyBAQAogI2lmIEVOQUJMRShXRUJHTCkKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTE1hbmFnZXIuaCIKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogCisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKKyNlbHNlCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKKyNlbmRpZgogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTE1hbmFnZXImIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpCkBAIC01Niw3ICs2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKIH0KICNlbmRpZgogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6YWRkQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRD
b250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJU
KGNvbnRleHQpOwogICAgIGlmICghY29udGV4dCkKQEAgLTY2LDcgKzcwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQKICAgICBtX2NvbnRleHRzLmFwcGVuZChjb250ZXh0KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnJlbW92ZUNvbnRleHQoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlcjo6cmVtb3ZlQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKiBjb250ZXh0KQog
ewogICAgIGlmICghbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oCmluZGV4IDBl
Zjg2ZGM2ZGU3ZjIxZDVlOGU5MTIwZTlhMzJiMGE4YjFmMWY3MzEuLmQxNDgzNDEwZDAyM2Y4MzAz
NmQ5Nzg1NjQzNWZhZTU1ODRiMDQ2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmgKQEAgLTM2LDE1ICszNiwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNvbnN0IHVuc2lnbmVkIE1heENvbnRleHRzID0gMTY7CiAKKyNpZiBVU0UoQU5HTEUpCitj
bGFzcyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOworI2Vsc2UKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOworI2VuZGlmCiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
ciB7CiAgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlcj47CiBwdWJsaWM6CisjaWYgVVNFKEFOR0xFKQorICAgIHVzaW5nIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0wgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOworI2Vsc2UKKyAgICB1c2luZyBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5k
aWYKKwogICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXImIHNoYXJlZE1h
bmFnZXIoKTsKICAgICAKLSAgICB2b2lkIGFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsK
KyAgICB2b2lkIGFkZENvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCopOworICAgIHZv
aWQgcmVtb3ZlQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKik7CiAgICAgCiAgICAg
dm9pZCByZWN5Y2xlQ29udGV4dElmTmVjZXNzYXJ5KCk7CiAgICAgYm9vbCBoYXNUb29NYW55Q29u
dGV4dHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRzLnNpemUoKSA+PSBNYXhDb250ZXh0czsg
fQpAQCAtNTksNyArNjksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMTWFuYWdlcigpID0gZGVmYXVsdDsKIAotICAgIFZlY3RvcjxHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCo+IG1fY29udGV4dHM7CisgICAgVmVjdG9yPFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0wqPiBtX2NvbnRleHRzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAppbmRleCA1ZDU1OTZmMDljZDIyYmUwMWE3YTVmNmRjOTU4
ODBlMTQyMmJiZjE4Li40MmVjMDFkN2UwNmQxNWI1NDczODIzNTI5NjdjYmM5NjBkNmY2ODg2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAt
OTIsNyArOTIsNiBAQCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OkdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlcihHcmFwaGljc0NvbnRleHRHTAogewogfQogCi0vLyBGSVhNRTog
QmVsb3cgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgogCiBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0R0w+IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CkBAIC0xMjYsNiArMTI1LDgg
QEAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMPiBjcmVhdGVXZWJQcm9jZXNzR3JhcGhpY3NDb250
ZXh0R0woY29uc3QgR3JhcGhpY3NDb250ZXgKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAorLy8g
RklYTUU6IEJlbG93IGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlciB0byBzaW1wbGlmeSB0aGUgYmFzZSBjbGFzcy4KKwogI2lmIFVT
RShBTkdMRSkKIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKICAgICA6IEdyYXBoaWNz
Q29udGV4dEdMKGF0dHJpYnV0ZXMpCkBAIC00MjIsMTYgKzQyMywxNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCiB7CiB9CiAKKyNpZiAhVVNFKEFOR0xF
KQogYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0
CiB7Ci0jaWYgVVNFKEFOR0xFKQotICAgIHJldHVybiBtX2lzRm9yV2ViR0wyOwotI2VsaWYgVVNF
KE9QRU5HTF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogICAgIHJldHVybiB0cnVlOwogI2Vsc2UK
ICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KKyNlbmRpZgogCiBQbGF0Zm9ybUxheWVyKiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CkBAIC00NjIs
MTEgKzQ2MywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sKQogewogfQogCisjaWYgIVVTRShBTkdMRSkKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVz
dGluZyBldmVudCkKIHsKICAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5n
OjpHUFVTdGF0dXNGYWlsdXJlKQogICAgICAgICBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgPSB0cnVl
OwogfQorI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JE
aXNwbGF5KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIu
aAppbmRleCBlNDY2MmI2ODNlYTQ1YjZmMTk2NmIzMTk3MzM5MzMwM2FhZjg2MDk1Li43Zjg5MmM1
NDliMzM4NmZjMzg1ZjJmZTg3NDJkMjY1MjViZDY5ZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oCkBAIC0yNywxNSArMjcsMjUgQEAKIAogI2lmIEVO
QUJMRShXRUJHTCkKIAorI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TEFOR0xFLmgiCisjZWxzZQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wgeworI2lmIFVTRShBTkdMRSkKK3VzaW5nIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ckJhc2UgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOworI2Vsc2UKK3VzaW5nIEdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlckJhc2UgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKKworY2xh
c3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDogcHVibGlj
IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2UgewogcHVibGljOgogICAgIHN0YXRp
YyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyPiBjcmVhdGUoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIH5HcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXIoKTsKIAorICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJh
c2Ugb3ZlcnJpZGVzLgogI2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGNvcHlUZXh0dXJlRnJv
bU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkg
ZmluYWw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAppbmRleCAx
MjE1MGIxZDUwZTViYzg5Mzc0ZWFhODExZTIzMmIzY2M1MGYzMTUxLi4zYjRiNzU4MDI3ZjY5NjRl
MDA5ZWIyZTU3MjBkNGEzYzFiY2NlZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0
MkQuY3BwCkBAIC00OCw3ICs0OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52
YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEdMOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNp
emUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoIWlt
YWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy93YWsvV2ViQ29yZVRocmVhZC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsv
V2ViQ29yZVRocmVhZC5tbQppbmRleCA5NTQ0YjUxYzI3OGRmNTY5ZWE0YWIwYmZlZjdlZjc0NGFj
NTJjNzM1Li42ZDc3MDdkNDBjMzJmMjg0MjljM2QzMjQ1MTVhNWNjNjk3NzYxYmRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tCkBAIC0z
MCw3ICszMCw3IEBACiAKICNpbXBvcnQgIkNvbW1vblZNLmgiCiAjaW1wb3J0ICJGbG9hdGluZ1Bv
aW50RW52aXJvbm1lbnQuaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisj
aW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAj
aW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNpbXBvcnQgIlRocmVhZEdsb2Jh
bERhdGEuaCIKQEAgLTc3LDEzICs3NywxMyBAQCB2b2lkIFJlbGVhc2VXZWJUaHJlYWRHbG9iYWxT
dGF0ZSgpCiAgICAgLy8gSW4gc2luZ2xlLXRocmVhZGVkIGVudmlyb25tZW50cyB3ZSBkbyBub3Qg
bmVlZCB0byB1bnNldCB0aGUgY29udGV4dCwgYXMgdGhlcmUgc2hvdWxkIG5vdCBiZSBhY2Nlc3Mg
ZnJvbQogICAgIC8vIG11bHRpcGxlIHRocmVhZHMuCiAgICAgQVNTRVJUKFdlYlRocmVhZElzRW5h
YmxlZCgpKTsKLSAgICB1c2luZyBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciA9IFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlv
cjsKKyAgICB1c2luZyBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciA9IFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOwogICAg
IC8vIEZvciB3ZWIgdGhyZWFkLCBqdXN0IHJlbGVhc2UgdGhlIGNvbnRleHQgYXMgd2Uga25vdyB3
ZSB3aWxsIHNlZSBjYWxscyB0byBpdCBhZ2Fpbi4KICAgICAvLyBGb3Igbm9uLXdlYiB0aHJlYWRz
LCBlLmcuIHRoaXJkLXBhcnR5IGNsaWVudCB0aHJlYWRzLCB3ZSBkb24ndCBrbm93IGlmIHdlIGV2
ZXIgc2VlIGFub3RoZXIgY2FsbCBmcm9tIHRoZQogICAgIC8vIHRocmVhZCwgc28gd2UgYWxzbyBy
ZWxlYXNlIHRoZSB0aHJlYWQgcmVzb3VyY2VzLgogICAgIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJl
aGF2aW9yIHJlbGVhc2VCZWhhdmlvciA9CiAgICAgICAgIFdlYlRocmVhZElzQ3VycmVudCgpID8g
UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6OlJlbGVhc2VDdXJyZW50Q29udGV4dCA6IFJl
bGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VzOwotICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2Vz
KHJlbGVhc2VCZWhhdmlvcik7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVsZWFzZVRocmVhZFJlc291cmNlcyhyZWxlYXNlQmVoYXZpb3IpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMLmNwcAppbmRleCBhYzk1OTUyMGEyZTNkZmFkOWZjZDgyYjM5MmYxMGE5YTVh
NjA0ODQwLi44NGIyZTY4NDVkMDc0OWNkYWExZTc4Yjg1MzBkOGY4ZWE1YTBlMDVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTC5jcHAKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFs
PFdlYkNvcgogICAgICAgICAgICAgLy8gSGVyZSB3ZSBkbyBub3QgdHJ5IHRvIHBsYXkgYmFjayBw
ZW5kaW5nIGNvbW1hbmRzIGZvciBpbWFnZUJ1ZmZlci4gQ3VycmVudGx5IHRoaXMgY2FsbCBpcyBv
bmx5IG1hZGUgZm9yIGVtcHR5CiAgICAgICAgICAgICAvLyBpbWFnZSBidWZmZXJzIGFuZCB0aGVy
ZSdzIG5vIGdvb2Qgd2F5IHRvIGFkZCBkaXNwbGF5IGxpc3RzLgogICAgICAgICAgICAgaWYgKHBp
eGVsQnVmZmVyKQotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWlu
dFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdl
QnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICAgICAg
ICAgICAgICBHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhjb250ZXh0QXR0cmlidXRl
cywgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwgaW1h
Z2VCdWZmZXItPmNvbnRleHQoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKS5jbGVhclJlY3QoeyBJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+YmFja2VuZFNpemUoKSB9KTsKICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgImZsdXNo
IiBpbXBsZW1lbnRhdGlvbiBpbiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIG92ZXJsb2FkcyBvcmRl
cmluZyBhbmQgZWZmZWN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2Vz
UmVxdWVzdC5jcHAKaW5kZXggNWE2Y2U2NWU3NDQ3ZDI0ZTFlNzczNjBmMmQ4Y2ZlNjRlYTg4YjMy
YS4uMGRhN2I5NWQxNGU5YWRmY2RkMzY2OTM5OTMzZDgwMGYwMGJmOGZiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVz
b3VyY2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAKQEAgLTMwLDcgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgiCiAjaW5jbHVkZSAiU3Ry
ZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0R0wuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuaD4KICNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CiAKQEAgLTU2
LDcgKzU2LDcgQEAgdm9pZCBTY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q6OmZy
ZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlcygpCiAgICAgaWYgKHNfcmVxdWVzdHMpCiAgICAgICAg
IHJldHVybjsKICAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRp
c3BhdGNoKFtdIHsKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
bGVhc2VUaHJlYWRSZXNvdXJjZXMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlJl
bGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVz
b3VyY2VzKTsKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVsZWFz
ZVRocmVhZFJlc291cmNlcyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpSZWxlYXNl
VGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6VGVybWluYXRlQW5kUmVsZWFzZVRocmVhZFJlc291cmNl
cyk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCA4ODIwODM1MmM2MWE5MzA5
M2I2OTJkOGI0OTA3ZWRjOGQxZDMxODBmLi44NTQzZjE5MmM2MmM4NzNjNzkxM2MxNmNkYjE2OGFh
NTgwNzgzOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yNTMsNyArMjUzLDYgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w+IGNyZWF0ZUdyYXBoaWNz
Q29udGV4dEdMKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEIGhvc3RXaW5kb3dEaXNwbGF5SUQpIGNvbnN0IGZpbmFs
OwogI2VuZGlmCiAKLQogICAgIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3Np
dGluZ1RyaWdnZXJzKCkgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDb21wb3NpdGluZ1RyaWdnZXJGbGFncz4oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445268</attachid>
            <date>2021-11-29 05:12:52 -0800</date>
            <delta_ts>2021-11-29 05:34:28 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211129151249.patch</filename>
            <type>text/plain</type>
            <size>544810</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5hMjc3NmJmMzcwMzNkNDc5NGRjNTk0YTJlNDdlZjNkNmNk
ZmI4ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MDUsNiArMTQwNSw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0FOR0xFSGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGls
aXRpZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4
MDExODYuLjE1ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
N2I2ZDU2MTQ2OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVj
MmQ1MzE4YWIzOTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEz
Niw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvaXNvL0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09WVFRDdWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTky
OTQ5ODk1MjBjMjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVy
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlNGQ5ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li44OTdiNTA1OTIw
YzViNWZjZjNmOTQzNjY4NjgwNmU2NzZlMGQ4ZGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBA
CiAJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAv
KiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAq
LzsgfTsKIAkJN0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRl
eHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYw
OTRERDI3MEM0NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAv
KiBBTkdMRVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJm
b3JtYW5jZUdQVVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFu
Y2VHUFVSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIz
MDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRl
eHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVE
Mjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYw
Q0UgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0No
ZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAy
MTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBH
cmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVG
MjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBB
MThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEw
MzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFB
QyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xDVkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ix
NjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4
MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1
Nyw4IEBACiAJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhD
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCOTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAw
NjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0
QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJ
CTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJ
CQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJ
CQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
ICovLAorCQkJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmggKi8sCiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xF
U2V0dGluZy5jcHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFy
eUFOR0xFU2V0dGluZy5oICovLAogCQkJKTsKQEAgLTI4NDU3LDYgKzI4NDYyLDcgQEAKIAkJCQkz
NzIxNDkzMzE4RjBCNkQ2MDAxNTZFREMgLyogb3BlbnR5cGUgKi8sCiAJCQkJNDlFOTExQjIwRUY4
NkQyNzAwOUQwQ0FGIC8qIHRyYW5zZm9ybXMgKi8sCiAJCQkJQkM2MzVFOTEyNjRDNDc2MDAwMEVG
MzNBIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uY3BwICovLAorCQkJCTdCOTVDRkU5Mjc1NEZG
NkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmggKi8sCiAJCQkJNzI5OUJDNjQy
M0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLywKIAkJCQkwRjdF
NDc1MzI1RUVCNzlCMDAxM0Y5MDkgLyogQU5HTEVXZWJLaXRCcmlkZ2UuY3BwICovLAogCQkJCTBG
N0U0NzU0MjVFRUI3OUIwMDEzRjkwOSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oICovLApAQCAtMzAw
MTAsOCArMzAwMTYsOCBAQAogCQkJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxp
dGllcy5oICovLAogCQkJCTdCOEVENUVGMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5t
bSAqLywKIAkJCQk3QjEwMzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xD
Vi5oICovLAotCQkJCTdCMTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuY3BwICovLAotCQkJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuaCAqLywKKwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyog
R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBD
OEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5
ODY4NzAwOTQ3RkY5IC8qIEltYWdlUm90YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0
RjIyQTk4Njg3MDA5NDdGRjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkw
NzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApA
QCAtMzQyNTksNyArMzQyNjUsNyBAQAogCQkJCTdDMzMwQTAyMURGOEZBQzYwMEQzMzk1QyAvKiBH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCRERBMzFG
Mjc0RkEwMjEwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRHTENvY29hLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QjEwMzM5RTI1NDk3MjE3MDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhDMUFDIC8qIEdyYXBoaWNz
Q29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0IxMDMzOUYyNTQ5NzIxRTAw
QzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0JCMzRBNDgyNTM3NzZDQTAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFw
aGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlD
N0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM0ODkwLDYgKzM0ODk2LDcgQEAKIAkJCQlCQzYwRDdDMTBEMjlBNDYzMDBC
OTkxOEYgLyogSlNET01FeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDNDVDOUQ2MUUz
RkNCRjgwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4Mzk5NDcxMDFGNTBCNkZBMDBFOUQ4NkIgLyogSlNET01GaWxlU3lzdGVtLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3Qjk1Q0ZFQjI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUwODg4RDUxMTQ4ODQ4QTAwQUY0MjY1IC8q
IEpTRE9NRm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzM2QzAzMEVCMDc2RDYwMDc0
MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRDBDQkUy
NjcyRTFCNjAwNzRFMTgzIC8qIEpTRE9NR2xvYmFsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNTk2Miw2ICszNTk2OSw3IEBACiAJCQkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMz
IC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREM4MTI1
MUYxMkQwMDNFRjI2OSAvKiBOdW1iZXJJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
NTY5RDEyMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3Qjk1Q0ZFRDI3NTRGRjdDMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTQwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamNfaGVhZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxNTBEN0UyQjgyMDA3QzM5ODMgLyogb2JqY19p
bnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTcwRDdFMkI4MjAwN0MzOTgzIC8q
IG9iamNfcnVudGltZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAppbmRleCBjMjA0NWM5ZDRlYzUz
YjNiNTkxNWZhNWY3NGRjNjVkNTNjM2ZmYTJmLi43MWEzOGFmMDZiMzU5MTI2M2M3NDQyYmRiNjg1
MGU2ZjYzNDU1OWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKQEAgLTEzNTEsNiArMTM1MSw3IEBAIHB1YmxpYzoKICAg
ICAvLyBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgogICAgIHN0YXRpYyBib29sIHBhY2tJbWFn
ZURhdGEoSW1hZ2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCwgRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIHVu
c2lnbmVkIHNvdXJjZUltYWdlV2lkdGgsIHVuc2lnbmVkIHNvdXJjZUltYWdlSGVpZ2h0LCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBz
b3VyY2VVbnBhY2tBbGlnbm1lbnQsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHBhaW50VG9DYW52
YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiwgUGl4ZWxCdWZmZXImJiwgY29u
c3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0Jik7CiBwcm90ZWN0ZWQ6CiAg
ICAgaW50IG1fY3VycmVudFdpZHRoIHsgMCB9OwogICAgIGludCBtX2N1cnJlbnRIZWlnaHQgeyAw
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRHTFN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA1ZThhNWRlN2IyZjRhMDU2MmQxYzZi
ODQ4M2I0ZDdlOWNlZTFkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMU3RhdGUuaApAQCAtMCwwICsxLDc5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hUcmFpdHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgR3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZSB7CisgICAgR0NHTHVpbnQgYm91bmRSZWFkRkJPIHsgMCB9Owor
ICAgIEdDR0x1aW50IGJvdW5kRHJhd0ZCTyB7IDAgfTsKKyAgICBHQ0dMZW51bSBhY3RpdmVUZXh0
dXJlVW5pdCB7IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCB9OworCisgICAgdXNpbmcgQm91
bmRUZXh0dXJlTWFwID0gSGFzaE1hcDxHQ0dMZW51bSwKKyAgICAgICAgc3RkOjpwYWlyPEdDR0x1
aW50LCBHQ0dMZW51bT4sCisgICAgICAgIEludEhhc2g8R0NHTGVudW0+LAorICAgICAgICBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50PiwKKyAgICAgICAgUGFpckhh
c2hUcmFpdHM8V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sIFdU
Rjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+PgorICAgID47CisgICAg
Qm91bmRUZXh0dXJlTWFwIGJvdW5kVGV4dHVyZU1hcDsKKyAgICBHQ0dMdWludCBjdXJyZW50Qm91
bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gYm91bmRUZXh0dXJlKGFjdGl2ZVRleHR1cmVVbml0
KTsgfQorICAgIEdDR0x1aW50IGJvdW5kVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29u
c3QKKyAgICB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1cmVNYXAuZmluZCh0
ZXh0dXJlVW5pdCk7CisgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmZpcnN0OworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBHQ0dMdWludCBjdXJyZW50Qm91bmRUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBib3VuZFRhcmdldChhY3RpdmVUZXh0dXJlVW5pdCk7IH0KKyAgICBHQ0dMZW51
bSBib3VuZFRhcmdldChHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKKyAgICB7CisgICAgICAg
IGF1dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0dXJlVW5pdCk7CisgICAg
ICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5kKCkpCisgICAgICAgICAgICBy
ZXR1cm4gaXRlcmF0b3ItPnZhbHVlLnNlY29uZDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgdm9pZCBzZXRCb3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQsIEdDR0x1aW50
IHRleHR1cmUsIEdDR0xlbnVtIHRhcmdldCkKKyAgICB7CisgICAgICAgIGJvdW5kVGV4dHVyZU1h
cC5zZXQodGV4dHVyZVVuaXQsIHN0ZDo6bWFrZV9wYWlyKHRleHR1cmUsIHRhcmdldCkpOworICAg
IH0KKworICAgIHVzaW5nIFRleHR1cmVTZWVkQ291bnQgPSBIYXNoQ291bnRlZFNldDxHQ0dMdWlu
dCwgSW50SGFzaDxHQ0dMdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
R0NHTHVpbnQ+PjsKKyAgICBUZXh0dXJlU2VlZENvdW50IHRleHR1cmVTZWVkQ291bnQ7Cit9Owor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCmluZGV4IDc4OWZlNmI1MDY4NGI4
NmU2ZjBmYjVlZTFhYzM5ODk5NTU3OTExYzYuLjRkNDUzMjAyOTE4ZDM3NTZmOGM3NWEzYTAzNzM0
NjgzOTY0MGZkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKQEAgLTI5LDExICsyOSwxMSBA
QAogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCiAKICNpbmNsdWRlICJBTkdMRUhlYWRl
cnMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FeHRlbnNp
b25zR0xBTkdMRTo6RXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNv
bnRleHQpCitFeHRlbnNpb25zR0xBTkdMRTo6RXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250
ZXh0R0xBTkdMRSogY29udGV4dCkKICAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNp
b25zKGZhbHNlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUu
aAppbmRleCAwYTYxZWZjMDk2YzFjZmVjYTk5OTNmOWVjYWYxYWM3NzJiODVhNjZlLi5jOTc4ZTJm
OWY2NGI5ZjYxNWMzYjNhODVjNDNhM2NhMDU0ZWQ3NWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgK
QEAgLTMyLDEzICszMiwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKIAogY2xh
c3MgRXh0ZW5zaW9uc0dMQU5HTEUgOiBwdWJsaWMgRXh0ZW5zaW9uc0dMIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMg
dG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGltcGxlbWVudGF0
aW9ucy4KLSAgICBleHBsaWNpdCBFeHRlbnNpb25zR0xBTkdMRShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCopOworICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQg
YnkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRSBpbXBsZW1lbnRhdGlvbnMuCisgICAgZXhwbGljaXQg
RXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSopOwogICAgIHZpcnR1YWwg
fkV4dGVuc2lvbnNHTEFOR0xFKCk7CiAKICAgICAvLyBFeHRlbnNpb25zR0wgbWV0aG9kcy4KQEAg
LTY0LDggKzY0LDggQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZXF1ZXN0YWJs
ZUV4dGVuc2lvbnM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZW5hYmxlZEV4dGVuc2lvbnM7CiAK
LSAgICAvLyBXZWFrIHBvaW50ZXIgYmFjayB0byBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KLSAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogbV9jb250ZXh0OworICAgIC8vIFdlYWsgcG9pbnRl
ciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuCisgICAgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRSogbV9jb250ZXh0OwogCiAgICAgLy8gV2hldGhlciB0aGUgV2ViR0wgMS4wLXJlbGF0ZWQg
ZmxvYXRpbmctcG9pbnQgcmVuZGVyYWJpbGl0eSBleHRlbnNpb25zIGhhdmUgYmVlbiBlbmFibGVk
LgogICAgIGJvb2wgbV93ZWJnbENvbG9yQnVmZmVyRmxvYXRSR0IgeyBmYWxzZSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250
ZXh0R0xBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAppbmRleCBmYTYwNTRjZjk1ZDEyYzk1NzdkMTQ4YmNk
NDA0MGRmYTJiN2E1MDljLi43YjFjOTYyNzljZWVhNjc5YzkyMDllNTVhOTY3NzQ3N2FjYjRmNjJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcApAQCAtMjcsMTIgKzI3LDEyIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShBTkdMRSkK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUuaCIKIAogI2luY2x1ZGUgIkFOR0xFSGVhZGVycy5oIgogI2luY2x1ZGUgIkFOR0xF
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMQU5HTEUuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMTWFuYWdlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTQwLDE5ICs0MCwxNCBAQAogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJU
ZW1wb3JhcnlBTkdMRVNldHRpbmcuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFy
RXhwcmVzc2lvbi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5
Lmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8
d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAotCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoQVZGT1VOREFUSU9OKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oIgogI2VuZGlmCiAKIC8vIFRoaXMg
b25lIGRlZmluaXRpb24gc2hvcnQtY2lyY3VpdHMgdGhlIG5lZWQgZm9yIGdsMmV4dC5oLCB3aGlj
aApAQCAtNzYsOCArNzEsNyBAQCBzdGF0aWMgdm9pZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVs
cyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeAogfQogI2VuZGlmCiAK
LQotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJl
VGFyZ2V0KCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJU
ZXh0dXJlVGFyZ2V0KCkKIHsKICAgICBpZiAobV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCA9
PSAtMSkKICAgICAgICAgRUdMX0dldENvbmZpZ0F0dHJpYihwbGF0Zm9ybURpc3BsYXkoKSwgcGxh
dGZvcm1Db25maWcoKSwgRUdMX0JJTkRfVE9fVEVYVFVSRV9UQVJHRVRfQU5HTEUsICZtX2RyYXdp
bmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTsKQEAgLTkzLDcgKzg3LDcgQEAgR0NHTGVudW0gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkKICAgICByZXR1
cm4gMDsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZm
ZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJn
ZXQpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewog
ICAgIHN3aXRjaCAoZHJhd2luZ1RhcmdldCkgewogICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTEw
NSw3ICs5OSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdlCiAgICAgcmV0dXJuIC0xOwogfQog
Ci1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldEZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKK0dDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRGb3JE
cmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCiB7CiAgICAgc3dpdGNoIChkcmF3
aW5nVGFyZ2V0KSB7CiAgICAgY2FzZSBURVhUVVJFXzJEOgpAQCAtMTE3LDcgKzExMSw3IEBAIEdD
R0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFy
Z2V0Rm9yRHJhd2luZ1RhcmdldChHCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFzZVRocmVhZFJlc291
cmNlQmVoYXZpb3IgcmVsZWFzZUJlaGF2aW9yKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHJl
bGVhc2VCZWhhdmlvcikKIHsKICAgICBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsK
IApAQCAtMTYxLDcgKzE1NSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbGVh
c2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpCiAgICAgcmV0dXJu
IEVHTF9SZWxlYXNlVGhyZWFkKCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCkKK3N0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNG
b3JQYWludFJlc3VsdHMoKQogewogICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwogICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQ
aXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KSk7CkBAIC0xODcsMTQgKzE4MSwxNCBAQCBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCiAgICAgcmV0
dXJuIHBpeGVsQnVmZmVyOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxp
ZGF0ZUF0dHJpYnV0ZXMoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZUF0
dHJpYnV0ZXMoKQogewogICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IGNvbnRleHRBdHRyaWJ1
dGVzKCkuYWxwaGEgPyBHTF9SR0JBOCA6IEdMX1JHQjg7CiAKICAgICB2YWxpZGF0ZURlcHRoU3Rl
bmNpbChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25OYW1lKTsKIH0KIAotYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
IHsKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBjb25zdCBpbnQg
d2lkdGggPSBzaXplLndpZHRoKCk7CkBAIC0yNzQsNyArMjY4LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICByZXR1
cm4gbXVzdFJlc3RvcmVGQk87CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0
dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdMdWludCBpbnRlcm5hbERlcHRoU3Rl
bmNpbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBhdXRv
IGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKIApAQCAtMzAwLDcgKzI5NCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVl
ZGVkKEdMdWludCBpbnRlcm5hCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNl
c3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBUZW1wb3JhcnlBTkdMRVNldHRpbmcg
c2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKICAgICBUZW1wb3JhcnlB
TkdMRVNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwpAQCAtMzMxLDcg
KzMyNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc29sdmVNdWx0aXNhbXBs
aW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjCiAgICAgICAgIGdsOjpCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVCdWZmZXIpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzM5LDE0ICszMzMsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGUK
ICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NH
TGludD4gdmFsdWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGdsOjpHZXRJbnRlZ2VydlJvYnVzdEFOR0xFKHBuYW1lLCB2YWx1ZS5idWZT
aXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0xl
bnVtIHByZWNpc2lvblR5cGUsIEdDR0xTcGFuPEdDR0xpbnQsIDI+IHJhbmdlLCBHQ0dMaW50KiBw
cmVjaXNpb24pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25UeXBlLCBHQ0dM
U3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM1NCw3ICszNDgsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQo
R0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTAogICAgIGdsOjpHZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UuZGF0YSwgcHJlY2lzaW9uKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQogewogICAgIGlmICghbV9pc0ZvcldlYkdM
MikKICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zR0xBTkdM
RSY+KGdldEV4dGVuc2lvbnMoKSkuYWRqdXN0V2ViR0wxVGV4dHVyZUludGVybmFsRm9ybWF0KGlu
dGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUpOwpAQCAtMzY0LDEyICszNTgsMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xlbnUKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKICAgICB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRy
IG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+
KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NH
TGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZv
cm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NH
TFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNzksMTIgKzM3MywxMiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTAogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5j
dXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0
ciBvZmZzZXQpCiB7CiAgICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2Zm
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9j
YXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBs
ZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRU
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBpbnQgYm9yZGVyLCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zOTMsMTIgKzM4
NywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2Uy
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgRwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0
ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBp
bWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4o
b2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQs
IGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRh
dGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
KEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6
ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC00MDcsMTIgKzQwMSwx
MiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2Uy
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbAogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50
IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5l
YXIsIEdDR0xjbGFtcGYgekZhcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MjAsNyArNDE0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xhbXBmIHpGYXIpCiAg
ICAgZ2w6OkRlcHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0
PGZsb2F0Pih6RmFyKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
RGVwdGgoR0NHTGNsYW1wZiBkZXB0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJEZXB0aChHQ0dMY2xhbXBmIGRlcHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQyOCwyNCArNDIyLDI0IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBkZXB0aCkKICAgICBnbDo6Q2xl
YXJEZXB0aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7CiB9CiAKLUV4dGVuc2lvbnNHTCYg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQorRXh0ZW5zaW9uc0dMJiBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKCkKIHsKICAgICBpZiAoIW1fZXh0
ZW5zaW9ucykKICAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xB
TkdMRT4odGhpcyk7CiAgICAgcmV0dXJuICptX2V4dGVuc2lvbnM7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48
R0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgcmVhZG5QaXhlbHNJbXBsKHgsIHksIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5idWZTaXplLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
LCBkYXRhLmRhdGEsIGZhbHNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVhZG5QaXhlbHMoR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICByZWFkblBp
eGVsc0ltcGwoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAwLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdDR0x2b2lkKj4ob2Zmc2V0KSwgdHJ1
ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxzSW1wbChH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6
ZWkqIGxlbmd0aCwgR0NHTHNpemVpKiBjb2x1bW5zLCBHQ0dMc2l6ZWkqIHJvd3MsIEdDR0x2b2lk
KiBkYXRhLCBib29sIHJlYWRpbmdUb1BpeGVsQnVmZmVyT2JqZWN0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpyZWFkblBpeGVsc0ltcGwoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBsZW5ndGgsIEdDR0xzaXplaSogY29s
dW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhl
bEJ1ZmZlck9iamVjdCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC00ODIsOSArNDc2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2kKICNl
bmRpZgogfQogCi0vLyBUaGUgY29udGVudHMgb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21t
b24gZm9sbG93LCBwb3J0ZWQgdG8gdXNlIEFOR0xFLgorLy8gVGhlIGNvbnRlbnRzIG9mIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEVDb21tb24gZm9sbG93LCBwb3J0ZWQgdG8gdXNlIEFOR0xFLgogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBj
aGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNp
bEV4dGVuc2lvbikKIHsKICAgICBFeHRlbnNpb25zR0wmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNp
b25zKCk7CiAgICAgLy8gRklYTUU6IFNpbmNlIHRoZSBjb25zdHJ1Y3RvcnMgb2YgdmFyaW91cyBw
bGF0Zm9ybXMgYXJlIG5vdCBzaGFyZWQsIHdlIGluaXRpYWxpemUgdGhpcyBoZXJlLgpAQCAtNTIy
LDcgKzUxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhT
dGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpCiAgICAgfQogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnByZXBhcmVUZXh0dXJlKCkKIHsKICAgICBpZiAobV9sYXllckNvbXBvc2l0
ZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTUzMyw3ICs1MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgcHJlcGFyZVRleHR1cmVJbXBsKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnByZXBhcmVUZXh0dXJlSW1wbCgpCiB7CiAg
ICAgQVNTRVJUKCFtX2xheWVyQ29tcG9zaXRlZCk7CiAKQEAgLTU3Niw3ICs1NzAsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogI2VuZGlmCiB9
CiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZWFkUmVuZGVyaW5nUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiB7CiAgICAgU2NvcGVkUmVz
dG9yZVJlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgZmJvQmluZGluZyhtX2lzRm9yV2ViR0wyLCBtX3N0
YXRlLmJvdW5kUmVhZEZCTyk7CiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFz
KSB7CkBAIC01ODcsNyArNTgxLDcgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKICAgICByZXR1cm4gcmVh
ZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYgKHdpZHRo
ID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCiAgICAgICAg
IHJldHVybjsKQEAgLTY3Myw3ICs2NjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBnbDo6Rmx1c2goKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0
dXJlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVt
IHRleHR1cmUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNjgyLDcgKzY3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFj
dGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKICAgICBnbDo6QWN0aXZlVGV4dHVyZSh0ZXh0
dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAg
ICBBU1NFUlQoc2hhZGVyKTsKQEAgLTY5Miw3ICs2ODYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMTwogICAgIGdsOjpBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBBU1NF
UlQocHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTcwMSw3ICs2
OTUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdQogICAgIGdsOjpCaW5kQXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IGJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTcwOSw3ICs3MDMsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCBidWZmZQogICAgIGdsOjpCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVy
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdD
R0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTczMCw3ICs3MjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0CiAgICAg
fQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdD
R0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC03MzksNyArNzMzLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QKIH0KIAogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVy
ZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzQ4LDcgKzc0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0CiAg
ICAgZ2w6OkJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3Jl
ZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwg
R0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc1Niw3ICs3NTAsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xh
bXBmIGdyZWVuLCBHQ0dMYwogICAgIGdsOjpCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihH
Q0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEVxdWF0aW9u
KEdDR0xlbnVtIG1vZGUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzY0LDcgKzc1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKICAgICBnbDo6QmxlbmRFcXVhdGlvbiht
b2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNl
cGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0Is
IEdDR0xlbnVtIG1vZGVBbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03NzMsNyArNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVt
IG0KIH0KIAogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVu
dW0gc2ZhY3RvciwgR0NHTGVudW0gZGZhY3RvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzgxLDcgKzc3
NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBz
ZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogICAgIGdsOjpCbGVuZEZ1bmMoc2ZhY3RvciwgZGZh
Y3Rvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFy
YXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwg
R0NHTGVudW0gZHN0QWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVu
Y1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNB
bHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzg5LDcgKzc4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0g
ZHN0UkdCCiAgICAgZ2w6OkJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBo
YSwgZHN0QWxwaGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJE
YXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVzYWdlKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwg
R0NHTHNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVzYWdlKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc5Nyw3ICs3OTEsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNp
emVpcHRyIHNpemUsIEdDRwogICAgIGdsOjpCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNh
Z2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xl
bnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdl
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNSw3ICs3
OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVt
IHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaQogICAgIGdsOjpCdWZmZXJEYXRhKHRhcmdl
dCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEsIHVzYWdlKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zm
c2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MTMsNyArODA3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnRwdHIgb2Zmc2V0LAogICAgIGdsOjpCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBk
YXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNw
YW48R0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtODI1LDcgKzgxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09Q
RVJBVElPTik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJT
dWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50
cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXpl
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51
bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0
LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MzMsMTQgKzgyNywx
NCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dM
ZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cgogICAgIGdsOjpDb3B5QnVmZmVyU3ViRGF0YShy
ZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMU3BhbjxHQ0dMaW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0SW50ZXJuYWxm
b3JtYXRpdlJvYnVzdEFOR0xFKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBkYXRhLmJ1
ZlNpemUsIG51bGxwdHIsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxl
cywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC04NDgsNyArODQyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0MKICAgICBnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTg1Nyw3ICs4NTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQwog
ICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0
dXJlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04NjYsNyArODYwLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTHNpemVpIGxldmVscywgR0MKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1f
c3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCwgaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQg
Ym9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtODc0LDEyICs4NjgsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmEK
ICAgICBnbDo6VGV4SW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscy5i
dWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgdGV4SW1hZ2UzRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGlu
dCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGlu
dCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC04ODcsMTIgKzg4MSwxMiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVs
LCBpbnQgeG9mZgogICAgIGdsOjpUZXhTdWJJbWFnZTNEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzLmJ1ZlNpemUsIHBpeGVscy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleFN1YkltYWdlM0QodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgdHlw
ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQp
LCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGlu
dCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBk
YXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVy
LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05MDAs
MTIgKzg5NCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgRwogICAgIGdsOjpDb21wcmVzc2Vk
VGV4SW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6ZSwgZGF0YS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleElt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50
IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xzaXplaSBp
bWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGNvbXByZXNzZWRUZXhJbWFnZTNE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9y
ZGVyLCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2
b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhv
ZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50
IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05MTMs
MTIgKzkwNywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbAogICAgIGdsOjpDb21wcmVzc2Vk
VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhv
ZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQg
eG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4U3ViSW1h
Z2UzRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9j
YXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi1WZWN0b3I8R0NHTGludD4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xl
bnVtIHBuYW1lKQorVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFj
dGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDR0x1
aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIFZlY3RvcjxHQ0dM
aW50PiByZXN1bHQodW5pZm9ybUluZGljZXMuc2l6ZSgpLCAwKTsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7CkBAIC05MjksNyArOTIzLDcgQEAgVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2cKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9P
UEVSQVRJT047CkBAIC05MzcsNyArOTMxLDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQogICAgIHJldHVy
biBnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBH
Q0dMY2xhbXBmIGIsIEdDR0xjbGFtcGYgYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dM
Y2xhbXBmIGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtOTQ1LDcgKzkzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYKICAgICBnbDo6
Q2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk1NCw3ICs5NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKICAgICBjaGVja0dQVVN0YXR1
cygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NH
TGludCBzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhclN0ZW5jaWwoR0NHTGlu
dCBzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTk2Miw3ICs5NTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0
ZW5jaWwoR0NHTGludCBzKQogICAgIGdsOjpDbGVhclN0ZW5jaWwocyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29s
ZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwgR0NHTGJvb2xl
YW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29sZWFuIGFscGhhKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk3MCw3ICs5NjQs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4g
cmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTAogICAgIGdsOjpDb2xvck1hc2socmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
aWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFT
U0VSVChzaGFkZXIpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC05ODgsNyAr
OTgyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC05OTcsNyArOTkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBn
bDo6Q29tcGlsZVNoYWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTJERGlyZWN0
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMDUsNyArOTk5
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMjIs
NyArMTAxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHCiAgICAgICAgIGdsOjpCaW5kRnJh
bWVidWZmZXIoZnJhbWVidWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMzks
NyArMTAzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihmcmFtZWJ1ZmZlclRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA0Nyw3ICsxMDQx
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9k
ZSkKICAgICBnbDo6Q3VsbEZhY2UobW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBmdW5jKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDU1LDcgKzEwNDksNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKICAgICBnbDo6RGVw
dGhGdW5jKGZ1bmMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1h
c2soR0NHTGJvb2xlYW4gZmxhZykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhN
YXNrKEdDR0xib29sZWFuIGZsYWcpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTA2Myw3ICsxMDU3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFuIGZsYWcpCiAgICAgZ2w6OkRlcHRoTWFz
ayhmbGFnKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVy
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsK
ICAgICBBU1NFUlQoc2hhZGVyKTsKQEAgLTEwNzMsNyArMTA2Nyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBs
YXRmb3JtR0xPCiAgICAgZ2w6OkRldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA4MSw3ICsxMDc1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXAp
CiAgICAgZ2w6OkRpc2FibGUoY2FwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTA4OSw3ICsxMDgzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogICAgIGdsOjpEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dM
aW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA5OCw3ICsxMDkyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0
LCBHQ0dMc2l6ZWkKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTEwNyw3ICsxMTAxLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGUKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjplbmFibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMTUsNyArMTEwOSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCiAgICAgZ2w6OkVuYWJs
ZShjYXApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTEyMyw3ICsxMTE3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NH
THVpbnQgaW5kZXgpCiAgICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZmluaXNoKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xMTMxLDcgKzExMjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmaW5pc2goKQogICAgIGdsOjpGaW5pc2goKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpmbHVzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTEzOSw3ICsxMTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Zmx1c2goKQogICAgIGdsOjpGbHVzaCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0
dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVy
YnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTQ3LDcgKzExNDEsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtCiAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRh
cmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFj
aG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dM
aW50IGxldmVsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTExNTYsNyArMTE1MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0CiAgICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUo
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51
bSBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcm9udEZhY2UoR0NHTGVudW0g
bW9kZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMTY0LDcgKzExNTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkKICAgICBnbDo6RnJvbnRGYWNlKG1vZGUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRh
cmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMTcyLDcgKzExNjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5l
cmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6OkdlbmVyYXRlTWlwbWFwKHRhcmdl
dCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYklt
cGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlQXR0cmliSW1wbChQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZv
KQogewogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX1ZBTFVFKTsKQEAgLTExOTcsMTIgKzExOTEsMTIgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJ
bmZvJiBpbmZvKQogewogICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGlu
ZGV4LCBpbmZvKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0
aXZlSW5mbyYgaW5mbykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5p
Zm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZl
SW5mbyYgaW5mbykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjI4LDEyICsxMjIyLDEyIEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIHJldHVybiBnZXRBY3RpdmVVbmlmb3JtSW1w
bChwcm9ncmFtLCBpbmRleCwgaW5mbyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzaXpl
aSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVjdCogc2hhZGVycykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHNpemVpIG1heENvdW50LCBHQ0dMc2l6ZWkqIGNvdW50LCBQ
bGF0Zm9ybUdMT2JqZWN0KiBzaGFkZXJzKQogewogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKQEAgLTEyNDUsNyArMTIzOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzCiAgICAgZ2w6OkdldEF0dGFjaGVkU2hhZGVycyhwcm9n
cmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoraW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEF0dHJpYkxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewog
ICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTI1NywxMiArMTI1MSwx
MiBAQCBpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgUwogICAgIHJldHVybiBnbDo6R2V0QXR0cmliTG9j
YXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAotaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKICAgICByZXR1cm4gZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFt
ZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI4Myw3ICsxMjc3LDcgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKICAgICBy
ZXR1cm4gbW92ZWRBbkVycm9yOwogfQogCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0RXJyb3IoKQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RXJyb3Io
KQogewogICAgIGlmICghbV9zeW50aGV0aWNFcnJvcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8v
IE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBs
aXN0IGluIGNhc2UKQEAgLTEyOTksNyArMTI5Myw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRFcnJvcigpCiAgICAgcmV0dXJuIGdsOjpHZXRFcnJvcigpOwogfQogCi1T
dHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKQEAgLTEzMDcsNyArMTMwMSw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKG5hbWUpKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gbW9kZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0xMzE1LDcgKzEzMDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpo
aW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKICAgICBnbDo6SGludCh0YXJnZXQs
IG1vZGUpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIWJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTMyNiw3ICsxMzIwLDcgQEAgR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQogICAgIHJldHVybiBnbDo6SXNCdWZmZXIoYnVmZmVyKTsKIH0KIAotR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCitH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0VuYWJsZWQoR0NHTGVudW0gY2Fw
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKQEAgLTEzMzQsNyArMTMyOCw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQogICAgIHJldHVybiBnbDo6SXNFbmFibGVk
KGNhcCk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1l
YnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCitHQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZm
ZXIpCiB7CiAgICAgaWYgKCFmcmFtZWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpA
QCAtMTM0NSw3ICsxMzM5LDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAgICByZXR1cm4g
Z2w6OklzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK0dD
R0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CkBAIC0xMzU2LDcgKzEzNTAsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4gZ2w6
OklzUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1H
TE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJidWZmZXIpCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKQEAgLTEzNjcsNyArMTM2MSw3IEBAIEdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRl
cmJ1ZmZlCiAgICAgcmV0dXJuIGdsOjpJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwogfQog
Ci1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1No
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIXNoYWRlcikKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTM3OCw3ICsxMzcyLDcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQog
ICAgIHJldHVybiBnbDo6SXNTaGFkZXIoc2hhZGVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCitH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1RleHR1cmUoUGxhdGZvcm1HTE9i
amVjdCB0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwpAQCAtMTM4OSw3ICsxMzgzLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgcmV0dXJuIGds
OjpJc1RleHR1cmUodGV4dHVyZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTM5Nyw3ICsxMzkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0aCkKICAgICBnbDo6TGlu
ZVdpZHRoKHdpZHRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1By
b2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJU
KHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNDA2LDcgKzE0
MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCiAgICAgZ2w6OkxpbmtQcm9ncmFtKHByb2dyYW0pOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWko
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQxNCw3ICsxNDA4LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQg
cGFyYW0pCiAgICAgZ2w6OlBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NH
TGZsb2F0IHVuaXRzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwb2x5Z29uT2Zmc2V0
KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDIyLDcgKzE0MTYsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3Is
IEdDR0xmbG9hdCB1bml0cykKICAgICBnbDo6UG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNs
YW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTQzMCw3ICsxNDI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292
ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXIKICAgICBnbDo6U2FtcGxl
Q292ZXJhZ2UodmFsdWUsIGludmVydCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2Npc3NvcihHQ0dMaW50
IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzgsNyAr
MTQzMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHCiAgICAgZ2w6OlNjaXNzb3IoeCwgeSwg
d2lkdGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRl
clNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAK
QEAgLTE0NTEsNyArMTQ0NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRl
clNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nCiAgICAgZ2w6OlNo
YWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZzaGFkZXJTb3VyY2VMZW5n
dGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhHQ0dM
ZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1
aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTQ1OSw3ICsxNDUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG0KICAgICBn
bDo6U3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLCBH
Q0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDY3LDcgKzE0NjEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xl
bnVtIGZ1bmMsCiAgICAgZ2w6OlN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBt
YXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NH
THVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE1hc2soR0NH
THVpbnQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNDc1LDcgKzE0NjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQogICAgIGdsOjpTdGVuY2lsTWFzayhtYXNrKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShH
Q0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1hc2spCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ4Myw3
ICsxNDc3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBh
cmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogICAgIGdsOjpTdGVuY2lsTWFza1Nl
cGFyYXRlKGZhY2UsIG1hc2spOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NH
TGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0OTEsNyArMTQ4NSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFp
bCwgR0NHTGVudW0KICAgICBnbDo6U3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVt
IGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFj
ZSwgR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0OTksNyAr
MTQ5Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRl
KEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDCiAgICAgZ2w6OlN0ZW5jaWxPcFNlcGFy
YXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhQYXJhbWV0
ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTA3
LDcgKzE1MDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJm
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDRwogICAgIGdsOjpUZXhQYXJhbWV0
ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
aW50IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJpKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUxNSw3ICsxNTA5
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyaSh0YXJn
ZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUy
Myw3ICsxNTE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKICAgICBnbDo6VW5pZm9ybTFmKGxvY2F0aW9u
LCB2MCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MzEsNyArMTUyNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUsIGFy
cmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQg
djAsIEdDR0xmbG9hdCB2MSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xNTM5LDcgKzE1MzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxv
YQogICAgIGdsOjpVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5
KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKQEAgLTE1NDgsNyArMTU0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsCiAgICAgZ2w6OlVuaWZvcm0yZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJh
eS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NTYsNyArMTU1MCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hCiAgICAgZ2w6OlVuaWZvcm0zZihsb2NhdGlvbiwg
djAsIHYxLCB2Mik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSAzKSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1NjUsNyAr
MTU1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm0zZnYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2
MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2
MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTczLDcgKzE1Njcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtNGYobG9jYXRpb24s
IHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAgICAgQVNTRVJUKCEoYXJy
YXkuYnVmU2l6ZSAlIDQpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTU4
Miw3ICsxNTc2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmwKICAgICBnbDo6VW5pZm9ybTRm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjApCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTU5MCw3ICsxNTg0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCiAgICAgZ2w6
OlVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1OTgsNyArMTU5Miw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48Y29uc3QgR0NHTGluCiAgICAgZ2w6OlVuaWZvcm0xaXYobG9jYXRpb24sIGFy
cmF5LmJ1ZlNpemUsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYwNiw3ICsxNjAwLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdD
R0xpbnQgdjEKICAgICBnbDo6VW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFy
cmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MTUsNyArMTYwOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGluCiAgICAgZ2w6OlVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBh
cnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2MjMsNyArMTYxNyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxCiAgICAgZ2w6OlVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2
Mik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGludD4gYXJyYXkpCiB7CiAgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTYzMiw3ICsxNjI2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW4KICAgICBnbDo6VW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXku
YnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwg
R0NHTGludCB2MiwgR0NHTGludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQg
djIsIEdDR0xpbnQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTY0MCw3ICsxNjM0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEK
ICAgICBnbDo6VW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJy
YXkpCiB7CiAgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMTY0OSw3ICsxNjQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW4KICAgICBnbDo6VW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFy
cmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY1Nyw3ICsxNjUxLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgYXJyYXku
YnVmU2l6ZSAvIDQsIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkK
IHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgOSkpOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0xNjY2LDcgKzE2NjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRy
YQogICAgIGdsOjpVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gOSwg
dHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VS
VCghKGFycmF5LmJ1ZlNpemUgJSAxNikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CkBAIC0xNjc1LDcgKzE2NjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYQogICAgIGdsOjpV
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRyYW5zcG9zZSwg
YXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjgzLDcgKzE2NzcsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKICAgICBnbDo6VXNlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKQEAgLTE2OTMsNyAr
MTY4Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgZ2w6OlZhbGlkYXRlUHJvZ3JhbShwcm9ncmFt
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NH
THVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNzAxLDcgKzE2OTUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWlu
dCBpbmRleCwgR0NHTGZsb2F0IHYwKQogICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NH
THVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0LCAxPiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNzA5LDcgKzE3MDMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdD
R0xTcGFuPGNvbnN0IEdDRwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRh
dGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihH
Q0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQg
djAsIEdDR0xmbG9hdCB2MSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xNzE3LDcgKzE3MTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZgogICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgMj4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTcyNSw3ICsxNzE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cK
ICAgICBnbDo6VmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgsIEdD
R0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAs
IEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3MzMsNyArMTcyNyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1
aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5KQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc0MSw3ICsxNzM1LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0cKICAgICBnbDo6VmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRh
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NH
THVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdD
R0xmbG9hdCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliNGYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIs
IEdDR0xmbG9hdCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNzQ5LDcgKzE3NDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZgog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0LCA0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzU3LDcgKzE3NTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0
IEdDRwogICAgIGdsOjpWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50
IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6
ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBz
dHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NjUsNyArMTc1OSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwKICAgICBnbDo6VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwg
bm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PGludHB0cl90PihvZmZzZXQpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xl
bnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwg
R0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRy
IG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0xNzczLDcgKzE3NjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLAogICAgIGds
OjpWZXJ0ZXhBdHRyaWJJUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgc3RyaWRlLCByZWludGVy
cHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTc4MSw3ICsxNzc1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0
aCwgR0MKICAgICBnbDo6Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLVBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkK
K1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVmVydGV4QXJy
YXkoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMTc5NCw3ICsxNzg4LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQogICAgIHJldHVybiBhcnJheTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9i
amVjdCBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlVmVydGV4QXJy
YXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKICAgICBpZiAoIWFycmF5KQogICAgICAgICBy
ZXR1cm47CkBAIC0xODA2LDcgKzE4MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6
RGVsZXRlVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkp
CitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRleEFycmF5KFBsYXRm
b3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwpAQCAtMTgxOCw3ICsxODEyLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICByZXR1
cm4gZ2w6OklzVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTgyOCw3ICsxODIyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgICAgIGdsOjpCaW5kVmVy
dGV4QXJyYXlPRVMoYXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+IHZhbHVlKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwg
R0NHTFNwYW48R0NHTGJvb2xlYW4+IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4MzYsNyArMTgzMCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxH
Q0dMYm9vbGVhbj4KICAgICBnbDo6R2V0Qm9vbGVhbnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUu
YnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1l
dGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODQ1LDcgKzE4Mzks
NyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJp
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dM
U3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRG
bG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTg1Myw3ICsx
ODQ3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHUKICAgICBnbDo6R2V0RmxvYXR2Um9idXN0
QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNpemUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQogICAg
IAotR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjQoR0NHTGVu
dW0gcG5hbWUpCitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcjY0
KEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE4NjIsNyArMTg1Niw3IEBAIEdDR0xpbnQ2NCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQogICAgIHJl
dHVybiB2YWx1ZTsKIH0KIAotR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJ
bnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKK0dDR0xpbnQ2NCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWlu
dCBpbmRleCkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0xODcxLDcgKzE4NjUsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4
KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgR0NHTGlu
dCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE4ODIsNyAr
MTg3Niw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyCiAgICAgcmV0dXJuIHZhbHVlOwogfQog
Ci1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBu
YW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCkBAIC0xODkxLDcgKzE4ODUsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtCiAgICAg
cmV0dXJuIHZhbHVlOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
bWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBHQ0dMc2l6ZWkgY291
bnQsIGNvbnN0IFN0cmluZyYgbG9nKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBHQ0dMc2l6ZWkg
Y291bnQsIGNvbnN0IFN0cmluZyYgbG9nKQogewogICAgIFVOVVNFRF9QQVJBTShzaGFkZXJzKTsK
ICAgICBVTlVTRURfUEFSQU0oY291bnQpOwpAQCAtMTkxMSw3ICsxOTA1LDcgQEAgU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyc1syXSwKICAgICByZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7CiB9CiAK
LVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFBy
b2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJv
Z3JhbSk7CiAKQEAgLTE5MzQsNyArMTkyOCw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogICAgIHJl
dHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIGNvdW50LCBTdHJpbmcoaW5mby5kYXRh
KCksIHNpemUpKTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQorR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE5NDMsNyArMTkzNyw3IEBAIEdD
R0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1HQ0dMaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U2hh
ZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgQVNT
RVJUKHNoYWRlcik7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CkBAIC0xOTUzLDcgKzE5NDcsNyBA
QCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlckluZm9M
b2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKQEAg
LTE5NzMsMTIgKzE5NjcsMTIgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogICAgIHJldHVybiBnZXRVbm1h
bmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9y
bUdMT2JqZWN0KQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlclNvdXJj
ZShQbGF0Zm9ybUdMT2JqZWN0KQogewogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCi1H
Q0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCiB7
CiAgICAgR0NHTGZsb2F0IHZhbHVlID0gMC5mOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCkBAIC0xOTg3LDcgKzE5ODEsNyBAQCBHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbgogICAgIHJl
dHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4
UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKQEAgLTE5OTYsNyArMTk5MCw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIwMDUsNyArMTk5OSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xpbnQgbG9jCiAgICAgZ2w6OkdldFVuaWZvcm1mdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxv
Y2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIwMTQsNyArMjAwOCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jCiAgICAgZ2w6OkdldFVuaWZvcm1pdlJvYnVzdEFOR0xF
KHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0x1aW50PiB2YWx1ZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0x1aW50PiB2YWx1ZSkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MDIzLDcgKzIwMTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3Jt
dWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsbwogICAgIGdsOjpHZXRVbmlm
b3JtdWl2Um9idXN0QU5HTEUocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIG51bGxwdHIsIHZh
bHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUp
CitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAKQEAgLTIwMzMsNyArMjAyNyw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNv
CiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAotR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQorR0NHTHNp
emVpcHRyIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dM
dWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDQzLDcgKzIwMzcsNyBAQCBHQ0dMc2l6ZWlw
dHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dMdWlu
dCBpbmRleCwgR0NHTAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKK1BsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlQnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNTMsNyArMjA0Nyw3IEBA
IFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigp
CiAgICAgcmV0dXJuIG87CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA2Myw3ICsyMDU3LDcgQEAgUGxhdGZv
cm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQog
ICAgIHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVQcm9ncmFtKCkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Y3JlYXRlUHJvZ3JhbSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDcxLDcgKzIwNjUsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKCkKICAgICByZXR1cm4gZ2w6
OkNyZWF0ZVByb2dyYW0oKTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwODEsNyArMjA3NSw3IEBAIFBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpCiAgICAgcmV0dXJuIG87CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBlKQorUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwODks
NyArMjA4Myw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBlKQogICAgIHJldHVybiBnbDo6Q3JlYXRlU2hhZGVyKCh0
eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhf
U0hBREVSKTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlVGV4dHVyZSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjEwMCw3ICsyMDk0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCiAgICAgcmV0dXJuIG87CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlQnVmZmVyKFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTIxMDgsNyArMjEwMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKICAgICBn
bDo6RGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1H
TE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMTI1LDcgKzIxMTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVy
KQogICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTIxMzMsNyArMjEyNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogICAg
IGdsOjpEZWxldGVQcm9ncmFtKHByb2dyYW0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMTQxLDcgKzIxMzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJi
dWZmZXIpCiAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU2hhZGVy
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIxNDksNyArMjE0Myw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAg
ICBnbDo6RGVsZXRlU2hhZGVyKHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVy
ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yMTYxLDcgKzIxNTUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKICAgICBtX3N0YXRlLnRleHR1cmVTZWVk
Q291bnQucmVtb3ZlQWxsKHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiB7CiAgICAgLy8g
TmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxp
c3QgdG8KICAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBzbyBhIGNhbGxlciB0
byBnZXRFcnJvciB3aWxsIGdldApAQCAtMjE3MCwyNSArMjE2NCwyNSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikKICAgICBt
X3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Zm9yY2VDb250ZXh0TG9zdCgpCiB7CiAgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0
b3IobV9jbGllbnRzKSkKICAgICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlY3ljbGVDb250ZXh0KCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQoKQogewogICAgIGZvciAoYXV0byog
Y2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+cmVjeWNs
ZUNvbnRleHQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hD
b250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKQogewogICAgIGZvciAoYXV0byog
Y2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+ZGlzcGF0
Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmly
c3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50
IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIwMCw3ICsyMTk0
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChH
Q0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LAogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dM
ZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpk
cmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjEyLDcg
KzIyMDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0
YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdQogICAgIGNoZWNrR1BVU3RhdHVzKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3Io
R0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlz
b3IpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjIyMyw3ICsyMjE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXMKICAgICAgICAgZ2w6
OlZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7CiB9CiAKLUdDR0x1aW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKK0dDR0x1aW50
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKQogewogICAgIEFT
U0VSVChwcm9ncmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjIzMiw3
ICsyMjI2LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1C
bG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwKICAgICByZXR1cm4gZ2w6OkdldFVu
aWZvcm1CbG9ja0luZGV4KHByb2dyYW0sIHVuaWZvcm1CbG9ja05hbWUudXRmOCgpLmRhdGEoKSk7
CiB9CiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0lu
ZGV4KQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRl
eCkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTIyNTIsNyArMjI0Niw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyCiAgICAgcmV0
dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRp
bmcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVp
bnQgdW5pZm9ybUJsb2NrQmluZGluZykKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyNjMsNyArMjI1Nyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMCiAKIC8vIFF1ZXJ5IEZ1bmN0aW9ucwogCi1QbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVF1ZXJ5KCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIyNzMsNyArMjI2Nyw3IEBAIFBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKICAg
ICByZXR1cm4gbmFtZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5R
dWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmJlZ2luUXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IHF1ZXJ5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIyODEsNyArMjI3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJlZ2luUXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5CiAg
ICAgZ2w6OkJlZ2luUXVlcnkodGFyZ2V0LCBxdWVyeSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyODksNyArMjI4Myw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKICAg
ICBnbDo6RW5kUXVlcnkodGFyZ2V0KTsKIH0KIAotR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lKQorR0NH
THVpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnlPYmplY3R1aShHQ0dMdWludCBp
ZCwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgR0NHTHVpbnQgdmFsdWUgPSAwOwogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMzAwLDcgKzIyOTQsNyBAQCBHQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aShHQ0dMdWludCBpZCwgR0NHTGVu
dW0gcG5hbWUpCiAKIC8vIFRyYW5zZm9ybSBGZWVkYmFjayBGdW5jdGlvbnMKIAotUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2so
KQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVUcmFuc2Zv
cm1GZWVkYmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0yMzEwLDcgKzIzMDQsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgcmV0dXJuIG5h
bWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZl
ZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2spCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3Qg
dHJhbnNmb3JtRmVlZGJhY2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjMxOCw3ICsyMzEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zv
cm0KICAgICBnbDo6RGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzKDEsICZ0cmFuc2Zvcm1GZWVkYmFj
ayk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9y
bUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2spCitHQ0dMYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xP
YmplY3QgdHJhbnNmb3JtRmVlZGJhY2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjMyNiw3ICsyMzIwLDcgQEAgR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZv
cm1HTE9iamVjdCB0cmFuc2YKICAgICByZXR1cm4gZ2w6OklzVHJhbnNmb3JtRmVlZGJhY2sodHJh
bnNmb3JtRmVlZGJhY2spOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
VHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRyYW5z
Zm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3Jt
RmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRi
YWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTIzMzQsNyArMjMyOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRU
cmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPCiAgICAgZ2w6OkJp
bmRUcmFuc2Zvcm1GZWVkYmFjayh0YXJnZXQsIHRyYW5zZm9ybUZlZWRiYWNrKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51
bSBwcmltaXRpdmVNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM0Miw3ICsyMzM2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51
bSBwcmltaXRpdmVNb2RlKQogICAgIGdsOjpCZWdpblRyYW5zZm9ybUZlZWRiYWNrKHByaW1pdGl2
ZU1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1G
ZWVkYmFjaygpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuZFRyYW5zZm9ybUZlZWRi
YWNrKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yMzUwLDcgKzIzNDQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRU
cmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3Mo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3Ms
IEdDR0xlbnVtIGJ1ZmZlck1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM2NSwxMyArMjM1OSwx
MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbQogICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzKHByb2dyYW0sIHBvaW50ZXJzVG9WYXJ5aW5ncy5zaXplKCksIHBvaW50ZXJzVG9WYXJ5
aW5ncy5kYXRhKCksIGJ1ZmZlck1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR0NHTHNpemVpIGJ1ZlNp
emUgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OlRSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HX01BWF9MRU5HVEgsICZidWZTaXplKTsK
KyAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OlRS
QU5TRk9STV9GRUVEQkFDS19WQVJZSU5HX01BWF9MRU5HVEgsICZidWZTaXplKTsKICAgICBpZiAo
IWJ1ZlNpemUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjM4Nyw3ICsyMzgxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3IKICAgICBpbmZvLnR5cGUgPSB0eXBlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1
aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwg
UGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM5NSw3ICsyMzg5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBp
bmRleCwgUGwKICAgICBnbDo6QmluZEJ1ZmZlckJhc2UodGFyZ2V0LCBpbmRleCwgYnVmZmVyKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xp
bnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdD
R0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEs
IEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBH
Q0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkw
LCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVu
dW0gZmlsdGVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI0MDMsNyArMjM5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMCiAgICAg
Z2w6OkJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRz
dFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IGxheWVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZl
clRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIFBsYXRm
b3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NHTGludCBsYXllcikKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDExLDcg
KzI0MDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1
cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtCiAgICAgZ2w6OkZyYW1lYnVmZmVyVGV4
dHVyZUxheWVyKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdD
R0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxOSw3ICsyNDEz
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y28KICAgICBnbDo6SW52YWxpZGF0ZUZyYW1lYnVm
ZmVyKHRhcmdldCwgYXR0YWNobWVudHMuYnVmU2l6ZSwgYXR0YWNobWVudHMuZGF0YSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBHQ0dMaW50
IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MjcsNyAr
MjQyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFt
ZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuCiAgICAgZ2w6OkludmFsaWRhdGVTdWJG
cmFtZWJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQzNSw3ICsyNDI5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCiAgICAgZ2w6OlJlYWRCdWZm
ZXIoc3JjKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdD
R0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ1Miw3ICsy
NDQ2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLAogICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm4gLTE7CkBAIC0yNDYwLDcgKzI0NTQsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgYwogICAgIHJldHVybiBnbDo6R2V0RnJhZ0RhdGFMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MXVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NjgsNyAr
MjQ2Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCiAgICAgZ2w6OlVuaWZvcm0xdWkobG9jYXRpb24sIHYw
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1
aW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI0NzYsNyArMjQ3MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50CiAgICAgZ2w6
OlVuaWZvcm0ydWkobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1
aW50IHYxLCBHQ0dMdWludCB2MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTI0ODQsNyArMjQ3OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50CiAgICAgZ2w6OlVu
aWZvcm0zdWkobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dM
dWludCB2MSwgR0NHTHVpbnQgdjIsIEdDR0x1aW50IHYzKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWlu
dCB2MSwgR0NHTHVpbnQgdjIsIEdDR0x1aW50IHYzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0OTIsNyArMjQ4Niw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVp
bnQgdjAsIEdDR0x1aW50CiAgICAgZ2w6OlVuaWZvcm00dWkobG9jYXRpb24sIHYwLCB2MSwgdjIs
IHYzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTI1MDAsNyArMjQ5NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1CiAgICAgZ2w6OlVuaWZvcm0xdWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUsIGRhdGEu
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdWludD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSAy
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MDksNyArMjUwMyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1CiAgICAgZ2w6OlVuaWZvcm0ydWl2KGxvY2F0aW9uLCBk
YXRhLmJ1ZlNpemUgLyAyLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTN1aXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgQVNT
RVJUKCEoZGF0YS5idWZTaXplICUgMykpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CkBAIC0yNTE4LDcgKzI1MTIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM3VpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGdsOjpV
bmlmb3JtM3Vpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gMywgZGF0YS5kYXRhKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1
aW50PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVmU2l6ZSAlIDQpKTsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjUyNyw3ICsyNTIxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48
Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9ybTR1aXYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAv
IDQsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRh
dGEuYnVmU2l6ZSAlIDYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjUz
Niw3ICsyNTMwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJp
eDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHQKICAgICBnbDo6VW5pZm9ybU1h
dHJpeDJ4M2Z2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA2LCB0cmFuc3Bvc2UsIGRhdGEuZGF0
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1h
dHJpeDN4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVmU2l6ZSAl
IDYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjU0NSw3ICsyNTM5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4MmZ2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHQKICAgICBnbDo6VW5pZm9ybU1hdHJpeDN4MmZ2KGxv
Y2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA2LCB0cmFuc3Bvc2UsIGRhdGEuZGF0YSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
ZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDJ4NGZ2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVmU2l6ZSAlIDgpKTsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjU1NCw3ICsyNTQ4LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xib29sZWFuIHQKICAgICBnbDo6VW5pZm9ybU1hdHJpeDJ4NGZ2KGxvY2F0aW9uLCBkYXRh
LmJ1ZlNpemUgLyA4LCB0cmFuc3Bvc2UsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRh
KQogewogICAgIEFTU0VSVCghKGRhdGEuYnVmU2l6ZSAlIDgpKTsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQpAQCAtMjU2Myw3ICsyNTU3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHQKICAgICBnbDo6VW5pZm9ybU1hdHJpeDR4MmZ2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA4
LCB0cmFuc3Bvc2UsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFT
U0VSVCghKGRhdGEuYnVmU2l6ZSAlIDEyKSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTI1NzIsNyArMjU2Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6
OlVuaWZvcm1NYXRyaXgzeDRmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9z
ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtTWF0cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0
YS5idWZTaXplICUgMTIpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjU4
MSw3ICsyNTc1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHQKICAgICBnbDo6VW5pZm9ybU1h
dHJpeDR4M2Z2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyAxMiwgdHJhbnNwb3NlLCBkYXRhLmRh
dGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGko
R0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQg
dykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50
IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU4OSw3
ICsyNTgzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRp
KEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQKICAgICBnbDo6VmVydGV4QXR0cmli
STRpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dCwgND4gdmFsdWVzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJ
NGl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50LCA0PiB2YWx1ZXMpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5
Nyw3ICsyNTkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
STRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0MKICAgICBnbDo6VmVydGV4QXR0
cmliSTRpdihpbmRleCwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dM
dWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWlu
dCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MDUsNyArMjU5OSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1
aW50IHgsIEdDR0x1CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWkoaW5kZXgsIHgsIHksIHosIHcp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxMyw3ICsyNjA3LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEcKICAgICBnbDo6VmVydGV4QXR0cmliSTR1aXYoaW5kZXgsIHZh
bHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1Jhbmdl
RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NH
THNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NH
THVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yNjIxLDcgKzI2MTUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFy
dCwgRwogICAgIGdsOjpEcmF3UmFuZ2VFbGVtZW50cyhtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwg
dHlwZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob2Zmc2V0KSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBi
dWZzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxj
b25zdCBHQ0dMZW51bT4gYnVmcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yNjI5LDcgKzI2MjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykKICAg
ICBnbDo6RHJhd0J1ZmZlcnMoYnVmcy5idWZTaXplLCBidWZzLmRhdGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NH
TGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dM
aW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHZhbHVlcykKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjM3LDcgKzI2
MzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KEdDR0xl
bnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLAogICAgIGdsOjpDbGVhckJ1ZmZlcml2KGJ1
ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1
ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdi
dWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY0NSw3ICsyNjM5LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVm
ZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIKICAgICBnbDo6Q2xlYXJCdWZmZXJ1aXYoYnVmZmVyLCBk
cmF3YnVmZmVyLCB2YWx1ZXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpjbGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjUzLDcgKzI2NDcsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NH
TGludCBkcmF3YnVmZmVyLAogICAgIGdsOjpDbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwgZHJhd2J1ZmZl
ciwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMZmxvYXQg
ZGVwdGgsIEdDR0xpbnQgc3RlbmNpbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0
IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY2MSw3ICsyNjU1LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJh
d2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmaShidWZmZXIsIGRyYXdidWZmZXIsIGRlcHRo
LCBzdGVuY2lsKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVl
cnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjY5LDcgKzI2NjMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1
ZXJ5KQogICAgIGdsOjpEZWxldGVRdWVyaWVzKDEsICZxdWVyeSk7CiB9CiAKLUdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkp
CitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1F1ZXJ5KFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjY3Nyw3ICsyNjcxLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKICAgICBy
ZXR1cm4gZ2w6OklzUXVlcnkocXVlcnkpOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
KQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRRdWVyeShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjY4Nyw3ICsyNjgxLDcgQEAgUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmEKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGxhdGZvcm1HTE9iamVjdD4o
dmFsdWUpOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTYW1wbGVyKCkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2FtcGxlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0yNjk3LDcgKzI2OTEsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKCkKICAgICByZXR1cm4gbmFtZTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNhbXBs
ZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MDUsNyArMjY5OSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
KQogICAgIGdsOjpEZWxldGVTYW1wbGVycygxLCAmc2FtcGxlcik7CiB9CiAKLUdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1w
bGVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTYW1wbGVyKFBsYXRm
b3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0yNzEzLDcgKzI3MDcsNyBAQCBHQ0dMYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2Ft
cGxlcikKICAgICByZXR1cm4gZ2w6OklzU2FtcGxlcihzYW1wbGVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cihHQ0dMdWludCB1bml0LCBQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjcyMSw3ICsyNzE1LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5p
dCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGUKICAgICBnbDo6QmluZFNhbXBsZXIodW5pdCwgc2Ft
cGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0
ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRm
b3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjcyOSw3
ICsyNzIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW4KICAgICBnbDo6U2FtcGxlclBhcmFt
ZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpzYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMZmxvYXQgcGFyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjczNyw3ICsyNzMxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBH
Q0dMZW4KICAgICBnbDo6U2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsK
IH0KIAotR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1l
dGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGZsb2F0
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgR0NHTGZsb2F0IHZhbHVlID0g
MC5mOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNzQ3LDcgKzI3NDEsNyBA
QCBHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJm
KFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGlu
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Z2V0U2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBH
Q0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjc1Nyw3ICsyNzUxLDcgQEAgR0NHTGludCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1w
bGVyLAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZlbmNlU3luYyhHQ0dMZW51bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykK
K0dDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZlbmNlU3luYyhHQ0dMZW51bSBjb25k
aXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTI3NjUsNyArMjc1OSw3IEBAIEdDR0xzeW5jIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dM
Yml0ZmllbGQgZmxhCiAgICAgcmV0dXJuIGdsOjpGZW5jZVN5bmMoY29uZGl0aW9uLCBmbGFncyk7
CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMoR0NHTHN5
bmMgc3luYykKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU3luYyhHQ0dM
c3luYyBzeW5jKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTI3NzMsNyArMjc2Nyw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1N5bmMoR0NHTHN5bmMgc3luYykKICAgICByZXR1cm4gZ2w6Oklz
U3luYyhzeW5jKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3lu
YyhHQ0dMc3luYyBzeW5jKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTeW5j
KEdDR0xzeW5jIHN5bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjc4MSw3ICsyNzc1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlU3luYyhHQ0dMc3luYyBzeW5jKQogICAgIGdsOjpEZWxldGVTeW5jKHN5bmMp
OwogfQogCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMo
R0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCitH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGllbnRXYWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0x1aW50NjQgdGltZW91dCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfV0FJVF9GQUlMRUQ7CkBA
IC0yNzg5LDcgKzI3ODMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xp
ZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYQogICAgIHJldHVybiBn
bDo6Q2xpZW50V2FpdFN5bmMoc3luYywgZmxhZ3MsIHRpbWVvdXQpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQg
ZmxhZ3MsIEdDR0xpbnQ2NCB0aW1lb3V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp3
YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbnQ2NCB0aW1l
b3V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTI3OTcsNyArMjc5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRT
eW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGluCiAgICAgZ2w6Oldh
aXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCitHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xl
bnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0yODA3LDcgKzI4MDEsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKICAgICBy
ZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJh
bnNmb3JtRmVlZGJhY2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYXVzZVRyYW5z
Zm9ybUZlZWRiYWNrKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yODE1LDcgKzI4MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCkKICAgICBnbDo6UGF1c2VUcmFuc2Zvcm1GZWVk
YmFjaygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zv
cm1GZWVkYmFjaygpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc3VtZVRyYW5zZm9y
bUZlZWRiYWNrKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yODIzLDcgKzI4MTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlJlc3VtZVRyYW5zZm9ybUZlZWRi
YWNrKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5n
ZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZl
ciwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBp
bmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6
ZWlwdHIgc2l6ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yODMxLDcgKzI4MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUAogICAg
IGdsOjpCaW5kQnVmZmVyUmFuZ2UodGFyZ2V0LCBpbmRleCwgYnVmZmVyLCBvZmZzZXQsIHNpemUp
OwogfQogCi1WZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiB1bmlmb3JtTmFtZXMpCitWZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHVuaWZvcm1OYW1lcykKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI4NDQsMTQgKzI4MzgsMTQgQEAgVmVjdG9yPEdD
R0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZv
cm1HTE9iamVjdCBwcm8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBH
Q0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xp
bnQ+IHBhcmFtcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBwYXJhbXMpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGdsOjpHZXRBY3RpdmVVbmlm
b3JtQmxvY2tpdlJvYnVzdEFOR0xFKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwg
cGFyYW1zLmJ1ZlNpemUsIG51bGxwdHIsIHBhcmFtcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGludD4gZmlyc3RzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNv
dW50cywgR0NHTHNpemVpIGRyYXdjb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bXVsdGlEcmF3QXJyYXlzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4gZmlyc3RzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTHNpemVpIGRy
YXdjb3VudCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yODU5LDcgKzI4NTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
dWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdAogICAgIGds
OjpNdWx0aURyYXdBcnJheXNBTkdMRShtb2RlLCBmaXJzdHMuZGF0YSwgY291bnRzLmRhdGEsIGRy
YXdjb3VudCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xl
bnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3Qg
R0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3Vu
dHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg2Nyw3ICsyODYxLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9k
ZSwgR0NHTFMKICAgICBnbDo6TXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmly
c3RzLmRhdGEsIGNvdW50cy5kYXRhLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0FOR0xF
KEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMc2l6ZWkgZHJhd2Nv
dW50KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0FOR0xF
KEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMc2l6ZWkgZHJhd2Nv
dW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTI4ODAsNyArMjg3NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0VsZW1lbnRzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uCiAgICAgZ2w6Ok11
bHRpRHJhd0VsZW1lbnRzQU5HTEUobW9kZSwgY291bnRzLmRhdGEsIHR5cGUsIHBvaW50ZXJzLmRh
dGEoKSwgZHJhd2NvdW50KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVs
dGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4gb2Zmc2V0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBpbnN0YW5jZUNvdW50cywgR0NH
THNpemVpIGRyYXdjb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zm
c2V0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBpbnN0YW5jZUNvdW50cywgR0NHTHNpemVp
IGRyYXdjb3VudCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yODkzLDcgKzI4ODcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDRwogICAg
IGdsOjpNdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0
eXBlLCBwb2ludGVycy5kYXRhKCksIGluc3RhbmNlQ291bnRzLmRhdGEsIGRyYXdjb3VudCk7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSgpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSgpCiB7CiAgICAgc2l6ZV90IG9sZGVzdEZyYW1lQ29tcGxldGlvbkZlbmNlID0gbV9vbGRlc3RG
cmFtZUNvbXBsZXRpb25GZW5jZSsrICUgbWF4UGVuZGluZ0ZyYW1lczsKICAgICBib29sIHN1Y2Nl
c3MgPSB0cnVlOwpAQCAtMjkxNCw2ICsyOTA4LDkzIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFtZSgpCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2ltdWxhdGVFdmVudEZvclRlc3Rpbmco
U2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nIGV2ZW50KQoreworICAgIGlmIChldmVudCA9PSBTaW11
bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkNvbnRleHRDaGFuZ2UpIHsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuZGlzcGxheVdhc1JlY29uZmln
dXJlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChldmVudCA9PSBTaW11bGF0
ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1cmUpIHsKKyAgICAgICAgbV9mYWlsTmV4
dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBwYWludFRvQ2FudmFzKGNvbnRl
eHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXIuYmFja2Vu
ZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVhZENvbXBvc2l0ZWRSZXN1
bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIHBhaW50
VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFn
ZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0KCkpOworfQorCitzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBSZWFkaW5nIHByZW11bHRpcGxp
ZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcyBsb3NzeS4K
KyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byByZXN1bHRzID0gcmVhZFJlbmRlcmluZ1Jl
c3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1bHRzICYmICFyZXN1bHRzLT5zaXplKCku
aXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1bHRzLT5mb3JtYXQoKS5waXhlbEZvcm1h
dCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0cy0+Zm9ybWF0KCkucGl4ZWxGb3JtYXQg
PT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgUGl4ZWxCdWZm
ZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJvd0J5dGVzIGFuZCBpbi1wbGFjZSBjb252
ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXplID0gcmVzdWx0cy0+c2l6ZSgpOworICAg
ICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6ZS53aWR0aCgpICogNDsKKyAgICAgICAg
dWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRhdGEoKTsKKyAgICAgICAgdWludDhfdCog
Ym90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAxKSAqIHJvd1N0cmlkZTsKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChuZXcgdWludDhfdFtyb3dTdHJpZGVdKTsK
KyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9wICs9IHJvd1N0cmlkZSwgYm90dG9tIC09
IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5KHRlbXAuZ2V0KCksIGJvdHRvbSwgcm93
U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0b20sIHRvcCwgcm93U3RyaWRlKTsKKyAg
ICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCksIHJvd1N0cmlkZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRp
bmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiByZWFkUmVuZGVy
aW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlYWRDb21wb3NpdGVkUmVzdWx0cygp
OworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXh0dXJlU2VlZChHQ0dM
dWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuY291
bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgVVNFKEFO
R0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
R3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1OWYzMWMwNzJj
MzBhMWY2ZWE1MGFiZWJjOTJhY2U3NDMwYmZiMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmgK
QEAgLTAsMCArMSw0NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBV
U0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oIgorI2lu
Y2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKworI2lmIFBMQVRG
T1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWlu
LmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykK
KyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0LmgiCisjZW5kaWYKKwor
I2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29zaWEgeworY2xhc3MgR0NHTExheWVyOwor
fQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uc0dMOwor
Y2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2VC
dWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOwor
I2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRzIHRo
YXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3Bs
YXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0OworICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZm
ZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGljIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0
dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOwor
ICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2lu
Z1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKKyAgICBlbnVtIGNsYXNzIFJlbGVhc2VU
aHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAgICAgLy8gUmVsZWFzZXMgY3VycmVudCBjb250
ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFk
LgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCisgICAgICAgIC8vIFJlbGVhc2VzIGFs
bCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgY2FsbHMgZG9u
ZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlVGhyZWFkUmVzb3VyY2VzLAorICAgICAg
ICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVy
IGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisgICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCisg
ICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMKKyAgICB9OworICAgIHN0
YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVo
YXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlz
YW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOworCisg
ICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlvbiB3aXRob3V0IGNoZWNraW5nIHRoZSBuYW1l
IC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAgaW50IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIC8v
IENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2luZyB0aHJvdWdoIEFOR0xFLgorICAgIHZvaWQg
Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0KTsKKworICAgIC8vIEVxdWl2YWxl
bnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRp
b24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
Y29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRl
cy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFj
dGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkgZmluYWw7CisgICAgdm9pZCBhdHRhY2hTaGFk
ZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikgZmlu
YWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwgR0NHTHVp
bnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBiaW5k
RnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAg
ICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dM
Y2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpIGZpbmFsOwor
ICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKSBmaW5hbDsKKyAgICB2b2lkIGJs
ZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEp
IGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRm
YWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdC
LCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkg
ZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRy
LCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRh
cmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKSBmaW5h
bDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9m
ZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIEdDR0xlbnVt
IGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29sb3IoR0NH
TGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1w
ZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpIGZp
bmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDR0xpbnQgcykgZmluYWw7CisgICAgdm9pZCBj
b2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4g
Ymx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFsOworICAgIHZvaWQgY29tcGlsZVNoYWRlcihQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQg
Ym9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFs
OworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBkZXB0
aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7CisgICAgdm9pZCBkZXB0aE1hc2soR0NHTGJvb2xl
YW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdD
R0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9pZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9i
amVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxlKEdDR0xlbnVt
IGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQg
aW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50
IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdD
R0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAg
dm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkgZmluYWw7CisgICAg
dm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lkIGZsdXNoKCkgZmluYWw7CisgICAgdm9pZCBm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1l
bnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7
CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGlu
dCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkgZmluYWw7
CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpIGZpbmFsOworICAgIGJv
b2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBib29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAg
IGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50
IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7CisgICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1w
bChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7
CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNo
YWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGdldEJvb2xlYW52KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQg
Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5h
bDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZpbmFsOworICAgIHZvaWQgZ2V0RmxvYXR2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dM
aW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgdm9pZCBnZXRJ
bnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpIGZpbmFsOwor
ICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdD
R0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmlu
YWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZv
cm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5nIGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZv
cm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25zdCBTdHJpbmcmKTsKKyAgICBHQ0dMaW50IGdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkg
ZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVt
IHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2Jq
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBz
aGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25UeXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiBy
YW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291
cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIFN0cmluZyBnZXRTdHJpbmcoR0NHTGVu
dW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0IGdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRUZXhQYXJhbWV0
ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIHZvaWQgZ2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50
PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRVbmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTHVpbnQ+IHZhbHVlKSBmaW5h
bDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdDR0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGhp
bnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVh
biBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0Vu
YWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0ZyYW1lYnVmZmVy
KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzUHJvZ3JhbShQbGF0
Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm1HTE9iamVj
dCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgoR0NHTGZsb2F0KSBmaW5hbDsKKyAgICB2b2lk
IGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgcGl4ZWxTdG9y
ZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgcG9seWdv
bk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpIGZpbmFsOworICAgIHZv
aWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxH
Q0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCByZWFkblBpeGVscyhHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHJl
bmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHNh
bXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkgZmluYWw7
CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3Jt
R0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0NH
TGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spIGZpbmFsOworICAgIHZvaWQg
c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50
IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBzdGVuY2lsTWFzayhHQ0dMdWlu
dCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFj
ZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFp
bCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5j
aWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWls
LCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7Cisg
ICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
TGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhTdWJJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBH
Q0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAg
dm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9m
ZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9m
ZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lk
IHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOwor
ICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xm
bG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdikgZmluYWw7CisgICAgdm9pZCB1
bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB4LCBHQ0dMaW50IHkpIGZpbmFsOwor
ICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
aW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
ZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiB2KSBmaW5h
bDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaXYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikgZmluYWw7CisgICAgdm9pZCB1bmlmb3Jt
NGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQg
eiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdD
R0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
dmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5h
bDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAg
ICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7
CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdD
R0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQg
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRl
eCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeikgZmluYWw7CisgICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykg
ZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NH
TGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQp
IGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAgdm9pZCByZXNoYXBlKGludCB3
aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdD
R0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHBy
aW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29y
KEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdM
T2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhB
cnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1ZlcnRleEFy
cmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgYmluZFZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVu
dW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNl
dCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyKSBmaW5hbDsKKyAgICB2b2lk
IGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NH
TFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdD
R0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEs
IEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0
WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpIGZpbmFsOworICAgIHZvaWQg
ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5
ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKSBmaW5hbDsKKyAgICB2b2lk
IGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0
IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAgdm9pZCByZWFkQnVmZmVyKEdDR0xl
bnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxH
Q0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2
b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZp
bmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxl
dmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5hbDsKKyAgICB2b2lkIHRleEltYWdlM0QoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBi
b3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAg
ICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKSBmaW5hbDsK
KyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBj
b3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
eG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZv
aWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2Vk
VGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zm
c2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdD
R0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6
ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdD
R0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1h
Z2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgR0NHTGludCBnZXRGcmFnRGF0
YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKSBm
aW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAp
IGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2
MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyKSBmaW5hbDsKKyAgICB2
b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYx
LCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTF1aXYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2
b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50
PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTR1aXYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtTWF0
cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4
NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBk
YXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQs
IDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KSBmaW5h
bDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYklQ
b2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xz
aXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSYW5n
ZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdD
R0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOwor
ICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpIGZpbmFs
OworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1
ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNs
ZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZnYo
R0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVm
ZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2ls
KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVF1ZXJ5KCkgZmluYWw7CisgICAg
dm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQg
YmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpIGZpbmFs
OworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KSBmaW5hbDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFs
OworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwg
R0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlU2FtcGxl
cigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBs
ZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZv
cm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZp
bmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICBHQ0dMZmxvYXQg
Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBw
bmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMc3luYyBmZW5j
ZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpIGZpbmFsOworICAg
IEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykgZmluYWw7CisgICAgdm9pZCBkZWxldGVTeW5j
KEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBjbGllbnRXYWl0U3luYyhHQ0dMc3luYywg
R0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIHZvaWQg
d2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQp
IGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2koR0NHTHN5bmMsIEdDR0xlbnVtIHBuYW1lKSBm
aW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmlu
YWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlk
KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xP
YmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkgZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpIGZpbmFsOworICAgIHZvaWQgZW5k
VHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFy
eWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZpbmFsOworICAgIHZvaWQgZ2V0VHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lkIHBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKSBm
aW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9p
ZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyUmFuZ2UoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xp
bnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZpbmFsOworICAgIFZlY3RvcjxHQ0dMdWludD4g
Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsKKyAgICBWZWN0b3I8R0NHTGludD4gZ2V0QWN0
aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVp
bnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50
IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0QWN0aXZlVW5pZm9y
bUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihH
Q0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykgZmluYWw7CisgICAgdm9pZCBtdWx0aURyYXdB
cnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBv
dmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVt
IG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMs
IEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVu
dHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywg
R0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVp
IGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtdWx0aURyYXdFbGVtZW50c0luc3RhbmNl
ZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBH
Q0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVy
cmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZUJ1ZmZlcigpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdM
T2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0
ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlU2hhZGVy
KEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVRleHR1cmUoKSBm
aW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAg
ICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZv
aWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0
ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxh
dGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51
bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3Qo
KSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdldEV4dGVuc2lvbnMoKSBmaW5hbDsKKyAgICB2
b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZykgb3Zl
cnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZl
ciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJl
c3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHZvaWQgc2V0Q29udGV4dFZp
c2liaWxpdHkoYm9vbCkgZmluYWw7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQ
dHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkgZmlu
YWw7CisjZW5kaWYKKyAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGZvcmNlQ29udGV4dExvc3QoKTsKKyAgICB2b2lkIHJlY3ljbGVDb250ZXh0KCk7Cisg
ICAgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7CisgICAgc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwor
ICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBh
aW50aW5nKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIGRpc3BsYXlXYXNSZWNv
bmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgIHVuc2lnbmVkIHRleHR1cmVTZWVkKEdDR0x1aW50IHRl
eHR1cmUpOworCisgICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkZWZh
dWx0RGlzcGxheSA9IEVHTF9ERUZBVUxUX0RJU1BMQVk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBsb3dQb3dlckRpc3BsYXkg
PSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTEpOworICAgIGNvbnN0ZXhwciBzdGF0
aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgaGlnaFBlcmZvcm1hbmNlRGlzcGxheSA9IEVHTF9DQVNU
KEVHTE5hdGl2ZURpc3BsYXlUeXBlLCAtMik7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKKyAgICAv
LyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgdGhhdCBldmVudHVh
bGx5IGNhbGwgT3BlbkdMLgorICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVu
dHJ5IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgor
ICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAg
Ly8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlv
biBhdHRyaWJ1dGVzLAorICAgIC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFz
LCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCisgICAgLy8gY291bGQgbm90IGJlIGhvbm9y
ZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMCisgICAgLy8gaW1wbGVt
ZW50YXRpb24uCisgICAgdm9pZCB2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNr
ZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOworICAgIHZvaWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7
CisKKyAgICB2b2lkIHJlYWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkqIGxlbmd0aCwgR0NHTHNpemVpKiBjb2x1
bW5zLCBHQ0dMc2l6ZWkqIHJvd3MsIEdDR0x2b2lkKiBkYXRhLCBib29sIHJlYWRpbmdUb1BpeGVs
QnVmZmVyT2JqZWN0KTsKKworICAgIC8vIERpZCB0aGUgbW9zdCByZWNlbnQgZHJhd2luZyBvcGVy
YXRpb24gbGVhdmUgdGhlIEdQVSBpbiBhbiBhY2NlcHRhYmxlIHN0YXRlPworICAgIHZvaWQgY2hl
Y2tHUFVTdGF0dXMoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5k
ZXJpbmdSZXN1bHRzKCk7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZENvbXBv
c2l0ZWRSZXN1bHRzKCk7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFBpeGVs
c0ZvclBhaW50UmVzdWx0cygpOworCisgICAgYm9vbCByZXNoYXBlRkJPcyhjb25zdCBJbnRTaXpl
Jik7CisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZUltcGwoKTsKKyAgICB2b2lkIHJlc29sdmVNdWx0
aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgPSBJbnRSZWN0KCkpOworICAgIHZv
aWQgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0NHTHVpbnQgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICBib29sIHJl
c2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGJv
b2wgYWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKKyAgICBib29sIGJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2
b2lkKiBwYnVmZmVyKTsKKyAgICBzdGF0aWMgYm9vbCBtYWtlQ3VycmVudChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMRGlzcGxheSwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCk7CisjZW5kaWYK
KyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGNvbnRleHQgc2hvdWxkIGJlIGxvc3QgZHVlIHRvIHRp
bWVvdXQuCisgICAgYm9vbCB3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKSBXQVJOX1VOVVNFRF9S
RVRVUk47CisKKyAgICAvLyBQbGF0Zm9ybSBzcGVjaWZpYyBiZWhhdmlvciBmb3IgcmVsZWFzZVJl
c291cmNlcygpOworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNl
cygpOworCisgICAgR0NHTHVpbnQgbV90ZXh0dXJlIHsgMCB9OworICAgIEdDR0x1aW50IG1fZmJv
IHsgMCB9OworICAgIEdDR0x1aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9OworICAgIEdD
R0x1aW50IG1faW50ZXJuYWxDb2xvckZvcm1hdCB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVy
bmFsRGVwdGhTdGVuY2lsRm9ybWF0IHsgMCB9OworICAgIEdDR0x1aW50IG1fbXVsdGlzYW1wbGVG
Qk8geyAwIH07CisgICAgR0NHTHVpbnQgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlciB7
IDAgfTsKKyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgeyAwIH07CisgICAg
Ly8gRm9yIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjp0cnVlIHdpdGhvdXQgbXVsdGlzYW1wbGluZy4K
KyAgICBHQ0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlclRleHR1cmUgeyAwIH07CisgICAg
Ly8gQXR0YWNoZXMgbV90ZXh0dXJlIHdoZW4gbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJl
IGlzIG5vbi16ZXJvLgorICAgIEdDR0x1aW50IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPIHsg
MCB9OworICAgIC8vIFF1ZXJpZWQgYXQgZGlzcGxheSBzdGFydHVwLgorICAgIEVHTGludCBtX2Ry
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0IHsgLTEgfTsKKyAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5
IHN5bnRoZXNpemVHTEVycm9yKCkuCisgICAgTGlzdEhhc2hTZXQ8R0NHTGVudW0+IG1fc3ludGhl
dGljRXJyb3JzOworICAgIGJvb2wgbV9pc0ZvcldlYkdMMiB7IGZhbHNlIH07CisgICAgdW5zaWdu
ZWQgbV9zdGF0dXNDaGVja0NvdW50IHsgMCB9OworICAgIGJvb2wgbV9mYWlsTmV4dFN0YXR1c0No
ZWNrIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdXNlRmVuY2VTeW5jRm9yRGlzcGxheVJhdGVMaW1p
dCA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heFBlbmRpbmdGcmFtZXMg
PSAzOworICAgIHNpemVfdCBtX29sZGVzdEZyYW1lQ29tcGxldGlvbkZlbmNlIHsgMCB9OworICAg
IFNjb3BlZEdMRmVuY2UgbV9mcmFtZUNvbXBsZXRpb25GZW5jZXNbbWF4UGVuZGluZ0ZyYW1lc107
CisgICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBtX3N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxFeHRlbnNpb25zR0xBTkdMRT4gbV9leHRlbnNpb25zOworCisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47Cisg
ICAgRUdMRGlzcGxheSBtX2Rpc3BsYXlPYmogeyBudWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmogeyBudWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTENvbmZpZyBtX2NvbmZpZ09iaiB7IG51bGxwdHIgfTsKKyAgICAvLyBCYWNr
aW5nIHN0b3JlIGZvciB0aGUgdGhlIGJ1ZmZlciB3aGljaCBpcyBldmVudHVhbGx5IHVzZWQgZm9y
IGRpc3BsYXkuCisgICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gZmFsc2UsIHRo
aXMgaXMgdGhlIGRyYXdpbmcgYnVmZmVyIGJhY2tpbmcgc3RvcmUuCisgICAgLy8gV2hlbiBwcmVz
ZXJ2ZURyYXdpbmdCdWZmZXIgPT0gdHJ1ZSwgdGhpcyBpcyBibGl0dGVkIHRvIGR1cmluZyBkaXNw
bGF5IHByZXBhcmUuCisgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9kaXNwbGF5QnVm
ZmVyQmFja2luZzsKKyAgICB2b2lkKiBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyIHsgbnVsbHB0ciB9
OworI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGJvb2wgbV9zd2l0Y2hlc0dQVU9uRGlz
cGxheVJlY29uZmlndXJhdGlvbiB7IGZhbHNlIH07CisgICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNl
R1BVUmVxdWVzdCBtX2hpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3Q7CisjZW5kaWYKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgR0NHTHVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZSB7
IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybWVkaWF0ZVRleHR1cmUgeyAwIH07CisjZW5kaWYK
KyNpZiBVU0UoTklDT1NJQSkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3NpYTo6R0NHTExheWVy
PiBtX25pY29zaWFMYXllcjsKKyNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPiBtX3RleG1hcExheWVyOwor
I2VuZGlmCisKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CisjaWYgVVNFKE5J
Q09TSUEpCisgICAgZnJpZW5kIGNsYXNzIE5pY29zaWE6OkdDR0xMYXllcjsKKyNlbGlmIFVTRShU
RVhUVVJFX01BUFBFUikKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9y
bUxheWVyOworI2VuZGlmCit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRH
TENhaXJvLmNwcAppbmRleCBjY2NiNTcyNGE0Y2Q5MmZmMGJmOGU3MzgzYzVkOWZlNjg5ZDc3Yjg2
Li40ZDU5Y2IxMmM1ZTQ0NzUzN2RlMGFlZTIxMGRlMDAyY2JkNzlmZTI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENh
aXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRHTENhaXJvLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBz
b3VyY2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3Qg
SW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFw
aGljc0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVy
LCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7
CiAgICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2Fu
dmFzU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCmluZGV4IGY3OWYyMmUzMTNl
YTExNzM4OWM1ZjQwOWRkMGY0OTRhZTE1YWViOTMuLmFmNGMxN2Q1MWZhNTlmNDY4OGRmNDM5NjUz
NTE4ZjVjYTBkYWFmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCkBAIC01MDYsNyArNTA2LDcg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBp
eGVsQnVmZmVyLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFBpeGVsQnVm
ZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQoIXBpeGVsQnVmZmVyLnNpemUoKS5pc0VtcHR5
KCkpOwogICAgIGlmIChjYW52YXNTaXplLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdM
Q29jb2EuaAppbmRleCAyNTU1ZmYwODMyOGUzNDY5Y2Q3YTRhMjk3ZGJlZjc5MGY2MzA1Mjg4Li40
Njg2MGJkODJlYjhjYWY4ZTc5MWExYjRkOTUzMGY4M2U4MGNmMDQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29h
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3ND
b250ZXh0R0xDb2NvYS5oCkBAIC0yNywxNSArMjcsMjMgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkK
IAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5oIgogI2luY2x1ZGUgIklPU3VyZmFjZS5oIgogCisjaWYgRU5BQkxF
KFZJREVPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTENvY29hIDogcHVi
bGljIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0R0xDb2NvYT4gY3JlYXRlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYmKTsKICAgICB+R3JhcGhpY3NDb250ZXh0R0xDb2NvYSgpOworICAgIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0OworICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgcGxhdGZvcm1Db25maWcoKSBjb25zdDsK
ICAgICBJT1N1cmZhY2UqIGRpc3BsYXlCdWZmZXIoKTsKICAgICB2b2lkIG1hcmtEaXNwbGF5QnVm
ZmVySW5Vc2UoKTsKIApAQCAtNDksMTQgKzU3LDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFj
aElPU3VyZmFjZUZyb21TaGFyZWRUZXh0dXJlKHZvaWQqIGhhbmRsZSk7CiAjZW5kaWYKIAotICAg
IC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIG92ZXJyaWRlcy4KKyAgICAvLyBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFIG92ZXJyaWRlcy4KICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5
VGV4dHVyZUZyb21NZWRpYShNZWRpYVBsYXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwg
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJv
b2wgZmxpcFkpIGZpbmFsOwogI2VuZGlmCisjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShD
T0NPQSkKKyAgICBHcmFwaGljc0NvbnRleHRHTENWKiBhc0NWKCkgZmluYWw7CisjZW5kaWYKIAog
cHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYg
RU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShDT0NPQSkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0R0xDVkNvY29hPiBtX2N2OworI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTsKKyNlbmRpZgogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3
MTc2ZGM1Mzc1NDA3MmM3N2VjYjIxOWUzOS4uNDU5YWY3Y2IxMDlmNjE4Y2Q3NGE0Y2YzYTA1NWUy
ZTZhZTg3ZDk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0
OCw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIK
ICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3
IEBAIGJvb2wgcGxhdGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRl
eHRQcmVkaWN0YWJsZSgpID09IHRydWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGlu
IHNpbmdsZS10aHJlYWRlZCBtYW5uZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFi
bGUoKSA9PSBmYWxzZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBs
ZSB0aHJlYWRzIGJ1dCBhbHdheXMgc2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRh
aW5zIG51bGxwdHIgYW5kIG51bGxwdHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEUqIGN1cnJlbnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRD
b250ZXh0UHJlZGljdGFibGUoKQogewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNw
bGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyYgYXR0cnMpCiAgICAgfQogCiAgICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5H
TEUncyAlcyBiYWNrZW5kLiIsIGF0dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsK
LSAgICBFR0xOYXRpdmVEaXNwbGF5VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlZmF1bHREaXNwbGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2
ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBp
ZiAoYXR0cnMudXNlTWV0YWwpIHsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVH
TF9QTEFURk9STV9BTkdMRV9UWVBFX0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMu
YXBwZW5kKEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSAr
MTU3LDExIEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZl
cmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxv
d1Bvd2VyKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VS
X1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5k
KEVHTF9MT1dfUE9XRVJfQU5HTEUpOwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpsb3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVE
aXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAg
ICB9IGVsc2UgaWYgKHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXM6OlBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNw
bGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAg
ICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAg
ICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBl
cmZvcm1hbmNlRGlzcGxheTsKKyAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpoaWdoUGVyZm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQog
ICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwx
MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2Uo
KQogfQogCiBHcmFwaGljc0NvbnRleHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTog
QmVsb3cgaXMgZnVuY3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0Nv
bnRleHRHTENvY29hIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJzKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0Nv
bnRleHRHTChhdHRycykKIHsKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9u
ID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2
LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVF
bmFibGVkKGV4dGVuc2lvbik7CiAgICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVz
ZU1ldGFsKSB7Ci0gICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBv
YmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAg
ICAgICAvLyBHcmFwaGljc0NvbnRleHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90
dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wg
c3luYyBvYmplY3RzIGFyZSBub3Qgc2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGlu
YS1lcmEgZHJpdmVycywgc28KICAgICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRo
b2Qgb2YgdGhyb3R0bGluZy4gT3BlbkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAg
ICAgICAvLyBzb21lIHNvcnQgb2YgaW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEw
LDEwIEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKIAotICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCAoJXApLiIsIHRoaXMpOworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFICglcCkuIiwgdGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdy
YXBoaWNzQ29udGV4dEdMQU5HTEUoKQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VD
b250ZXh0Q3VycmVudCgpKSB7CkBAIC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJy
ZW50Q29udGV4dCAhPSB0aGlzKTsKICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0g
LTE7Ci0gICAgTE9HKFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wg
KCVwKS4iLCB0aGlzKTsKKyAgICBMT0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFICglcCkuIiwgdGhpcyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6aXNWYWxpZCgpIGNvbnN0CkBAIC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6OmlzVmFsaWQoKSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAK
LVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtTGF5
ZXIoKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFp
bE5leHRTdGF0dXNDaGVjaykgewogICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBH
UFUgaGFzIHJlc2V0ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyAr
NTA2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQog
ICAgIHJlc3RhcnRTdGF0dXMgPSAwOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIGlmICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJh
dGlvbikKQEAgLTUyMCw3ICs1MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
ZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIGlmIChtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9u
KQpAQCAtNTI5LDcgKzUyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3Bs
YXlXYXNSZWNvbmZpZ3VyZWQoKQogICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24oKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlC
dWZmZXJCYWNraW5nKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3Bs
YXlCdWZmZXJCYWNraW5nKCkKIHsKICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkuaXNFbXB0eSgpKTsKICAgICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5v
dyBiZWZvcmUgYWxsb2NhdGluZyBhIG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNl
IG1lbW9yeSBwcmVzc3VyZS4KQEAgLTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxv
Y2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29s
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNr
aW5nKCkKIHsKICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0
eSgpKTsKICAgICBhdXRvIGJhY2tpbmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYs
NyArNTc2LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tp
bmcoV1RGTW92ZShiYWNraW5nKSwgcGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFj
a2luZywgdm9pZCogcGJ1ZmZlcikKIHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRp
bmcgcmVzdG9yZUJpbmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdp
bmdUYXJnZXQodGV4dHVyZVRhcmdldCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0g
VEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRy
PElPU3VyZmFjZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjptYWtlQ3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNw
bGF5LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5
IGRpc3BsYXksIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJy
ZW50Q29udGV4dCA9IG51bGxwdHI7CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5
LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5
OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQ
YnVmZmVyQXR0YWNobWVudFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VS
ZWYgc3VyZmFjZSwgR0NHTHVpbnQgcGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlm
ICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVU
YXJnZXQoKSkgewogICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVk
LiIsIHN0YXRpY19jYXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KQEAgLTY2NywyNCArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpk
ZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYK
IAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1faXNGb3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGlu
ZyBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpD
b250ZXh0Q2hhbmdlKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6
c2hhcmVkTWFuYWdlcigpLmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVT
dGF0dXNGYWlsdXJlKSB7Ci0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnByZXBhcmVGb3JEaXNwbGF5KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFy
ZUZvckRpc3BsYXkoKQogewogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0
dXJuOwpAQCAtNzI0LDE1ICs3MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlcGFyZUZvckRpc3BsYXkoKQogCiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRl
eHRHTENWKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRH
TENWKiBHcmFwaGljc0NvbnRleHRHTENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0g
ICAgICAgIG1fY3YgPSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7Cisg
ICAgICAgIG1fY3YgPSBHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAg
ICAgcmV0dXJuIG1fY3YuZ2V0KCk7CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29t
cG9zaXRlZFJlc3VsdHMoKQogewogICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFp
bi5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRp
c3BsYXlCdWZmZXIuaGFuZGxlKQpAQCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMo
KQogfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxl
KCkKK1JlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRDb21w
b3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIg
PSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1
cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0
cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJl
c3VsdHNUb01lZGlhU2FtcGxlCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJy
ZW50Q29udGV4dCA9IG51bGxwdHI7CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBo
aWNzQ29udGV4dEdMQ29jb2E6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5
ZXIsIFBsYXRmb3JtRwogfQogI2VuZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNw
bGF5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxh
dGZvcm1EaXNwbGF5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1Q
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybUNvbmZpZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9jb25maWdPYmo7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZl
N2Q0YTg2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgot
Ci0jaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04p
Ci0KLSNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwv
c3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+Ci0KLSNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUy
RCB7Ci0gICAgImF0dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIg
dV95VGV4dHVyZVNpemU7IgotICAgICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAg
ICAidW5pZm9ybSBpbnQgdV9mbGlwWTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29v
cmRpbmF0ZTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAg
ICJ2b2lkIG1haW4oKSIKLSAgICAieyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bv
c2l0aW9uLCAwLCAxLjApOyIKLSAgICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9w
b3NpdGlvbiAqIC41ICsgLjU7IgotICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAg
ICAgICAgbm9ybWFsaXplZFBvc2l0aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsi
Ci0gICAgIiAgICB2X3lUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0g
ICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAg
ICJ9Il9zCi19OwotCi1zdGF0aWMgY29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0
dXJlUmVjdGFuZ2xlIHsKLSAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVu
aWZvcm0gdmVjMiB1X3lUZXh0dXJlU2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVy
ZVNpemU7IgotICAgICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZf
eVRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRp
bmF0ZTsiCi0gICAgInZvaWQgbWFpbigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24g
PSB2ZWM0KGFfcG9zaXRpb24sIDAsIDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9z
aXRpb24gPSBhX3Bvc2l0aW9uICogLjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAx
KSIKLSAgICAiICAgICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQ
b3NpdGlvbi55OyIKLSAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBv
c2l0aW9uICogdV95VGV4dHVyZVNpemU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRl
ID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsK
LQotY29uc3RleHByIGF1dG8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInBy
ZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVy
ZTsiCi0gICAgInVuaWZvcm0gc2FtcGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBt
YXQ0IHVfY29sb3JNYXRyaXg7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5h
dGU7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9p
ZCBtYWluKCkiCi0gICAgInsiCi0gICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9
IHRleHR1cmUyRCh1X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAg
ICB5dXYuZ2IgPSB0ZXh0dXJlMkQodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSku
cmc7IgotICAgICIgICAgeXV2LmEgPSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2
ICogdV9jb2xvck1hdHJpeDsiCi0gICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0
byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBt
ZWRpdW1wIGZsb2F0OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7Igot
ICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1h
dDQgdV9jb2xvck1hdHJpeDsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0
ZTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lk
IG1haW4oKSIKLSAgICAieyIKLSAgICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0g
dGV4dHVyZTJEUmVjdCh1X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAg
IiAgICB5dXYuZ2IgPSB0ZXh0dXJlMkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3Jk
aW5hdGUpLnJnOyIKLSAgICAiICAgIHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xv
ciA9IHl1diAqIHVfY29sb3JNYXRyaXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBp
eGVsUmFuZ2UgewotICAgIFVua25vd24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVu
dW0gY2xhc3MgVHJhbnNmZXJGdW5jdGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83
MDlfMiwKLSAgICBrSVRVX1JfNjAxXzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJ
X1AzLAotICAgIGtQM19ENjUsCi0gICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxS
YW5nZSBwaXhlbFJhbmdlRnJvbVBpeGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKHBpeGVsRm9ybWF0KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0
NEFZcENiQ3I4OgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0g
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBj
YXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAg
IGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgot
ICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1Jhbmdl
OgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1Jh
bmdlOgotI2lmIEhBVkUoQ09SRVZJREVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQot
ICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1Jh
bmdlOgotI2VuZGlmCi0gICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNl
IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNl
IGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlX0FSR0IyMTAxMDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjJZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklE
RU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICBy
ZXR1cm4gUGl4ZWxSYW5nZTo6RnVsbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4
ZWxSYW5nZTo6VW5rbm93bjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1Yg
dHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlm
ICghc3RyaW5nKQotICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwot
ICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83
MDlfMikpCi0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsK
LSAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1Jf
NjAxXzQpKQotICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7
Ci0gICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRF
XzI0ME1fMTk5NSkpCi0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8y
NDBNXzE5OTU7Ci0gICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JN
YXRyaXhfRENJX1AzKCkgJiYgQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRy
aXhfRENJX1AzKSkKLSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsK
LSAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19E
NjUoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUp
KQotICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChj
YW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAm
JiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkK
LSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0
dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xv
ciB7Ci0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCBy
OwotICAgICAgICAgICAgR0xmbG9hdCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAg
ICB9IHJnYjsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAg
ICAgICAgIEdMZmxvYXQgY2I7Ci0gICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHlj
YmNyOwotICAgIH07Ci0KLSAgICBjb25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xm
bG9hdCBnLCBHTGZsb2F0IGIpCi0gICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAg
IH0KLQotICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xm
bG9hdCBzY2FsZSkKLSAgICAgICAgOiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNj
YWxlfQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdM
ZmxvYXQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDog
LXZhbHVlOwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFs
VG8oY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVs
dGEpCi0gICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVs
dGEpCi0gICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVs
dGEpOwotICAgIH0KLX07Ci0KLXN0cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29u
c3RleHByIEdMZmxvYXRDb2xvciBibGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIEdMZmxvYXRDb2xvciB3aGl0ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IEdMZmxvYXRDb2xvciByZWQgICAgIHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdM
ZmxvYXRDb2xvciBncmVlbiAgIHswLCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBibHVlICAgIHswLCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRD
b2xvciBjeWFuICAgIHswLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xv
ciBtYWdlbnRhIHsxLCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5
ZWxsb3cgIHsxLCAxLCAwfTsKLX07Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdM
ZmxvYXQgcm93c1s0XVs0XTsKLQotICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdl
LCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBv
cGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJv
d3NbMF1bMF07Ci0gICAgfQotCi0gICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvcioo
Y29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6
OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xm
bG9hdCBjckNvZWZmaWNpZW50KQotICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVy
c2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8g
WSA9IEtyICogUiArIEtnICogRyArIEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICog
KDEgLSBLYikpCi0gICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBX
aGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRp
b24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAg
Ly8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRo
ZSBmb2xsb3dpbmc6Ci0gICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8g
QiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2Ip
KSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAg
IC8vCi0gICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMg
YSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2
ZQotICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4g
dGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQot
ICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdM
ZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsK
LSAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/
IDEuZiA6IDI1NS5mIC8gMjE5LmY7Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJh
bmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93
c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3Nb
MF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAg
IHJvd3NbMF1bM10gPSAwOwotCi0gICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAg
IHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50
KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1j
YmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2ll
bnQgLyBjZ0NvZWZmaWNpZW50KTsKLSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1b
MF0gPSB5U2NhbGluZ0ZhY3RvcjsKLSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3Ig
KiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dz
WzJdWzNdID0gMDsKLQotICAgIHJvd3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwot
ICAgIHJvd3NbM11bMl0gPSAwOwotICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmln
dXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0
byBbLTEyOCwgMTI4XQotICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRv
IGNvbnZlcnQgWSB0byBbMTYsIDI0MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJv
d051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93
TnVtYmVyXTsKLSAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJv
d1sxXTsKLSAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1sz
XTsKLQotICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5n
ZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1Owot
ICAgIH0KLX0KLQotY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3Iq
KGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRD
b2xvcigKLSAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNv
bG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAg
ICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsg
cm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVsw
XSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAq
IGNvbG9yLnJnYi5iICsgcm93c1syXVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZs
b2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFu
Z2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVz
aW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+Owot
ICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47
Ci0KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBz
dGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBk
ZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZp
Y2F0aW9uCi0gICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAg
Y29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdl
OjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0
cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsK
LQotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwg
IDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJs
YWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8g
MjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEs
ICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAx
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42
MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEu
NWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNv
bG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2
MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIu
NjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGlj
X2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8g
MjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAg
MjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1
ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Ymx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1
LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0K
LSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJ
VFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQv
cmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1h
dHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYg
fTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4
ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJy
LjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEu
NWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBj
b2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChy
NzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEu
NWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01h
dHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlF
cXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRl
byBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNz
ZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgs
IDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwg
ICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0
ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIu
NzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAv
IDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMs
ICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpt
YWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBH
TGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVy
aXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNh
dGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBj
b25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5n
ZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1h
dHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2Mjcg
fTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9y
KDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01h
dHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlF
cXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZp
ZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8g
MjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
NjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGdyZWVuIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRl
byBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1
LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4
NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01h
dHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlF
cXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZp
ZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19h
c3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8g
MjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigy
NTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2Ugd2hpdGUgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYs
IDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAg
ICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJs
dWUgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBG
dWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIw
MjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwg
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBj
b2xvciIpOwotCi0gICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50
cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVl
ZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMg
WUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4w
ODcsIDAuMjEyIH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1G
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0
aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAg
IDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNl
IGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRl
byBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3Nl
cnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAv
IDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRl
MjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwg
IlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIx
NiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUg
MjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAx
NTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFu
LCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVm
IC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRl
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJT
TVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAg
MjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1
ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYg
LyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50
YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJp
eCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9u
Y2VUb2tlbiwgXnsKLSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxS
YW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVv
TWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5n
ZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJp
eCk7Ci0gICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZp
ZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7
Ci0gICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGws
IFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAg
ICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJh
bnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAg
ICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNm
ZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBt
YXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJG
dW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAg
ICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFu
c2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsK
LSAgICB9KTsKLQotICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQ
aXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFu
Z2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6
OlVua25vd24pCi0gICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8g
aXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0p
OwotCi0gICAgLy8gQXNzdW1lIHVua25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToK
LSAgICBpZiAoaXRlcmF0b3IgPT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJh
dG9yID0gbWF0cmljZXMuZ2V0KCkuZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lU
VV9SXzYwMV80fSk7Ci0KLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5k
KCkpOwotICAgIHJldHVybiBpdGVyYXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENW
QU5HTEUoY29udGV4dCkgfTsKLSAgICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIHJldHVybiBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
Ojp+R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAh
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRl
eEJ1ZmZlcik7Ci0gICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7
Ci0gICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0R0xDVkFOR0xFOjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmIG93bmVyKQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBD
cmVhdGUgY29tcGF0aWJsZSBjb250ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1
dCBvbmUgdGhhdCBkb2VzIG5vdAotICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21w
YXRpYmlsaXR5LgotICAgIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAg
ICAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0Zvcldl
YkdMMiA/IDMgOiAyLAotICAgICAgICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBB
VElCTEVfQU5HTEUsCi0gICAgICAgIEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJ
RU5UX0FSUkFZU19FTkFCTEVEX0FOR0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVH
TF9DT05URVhUX0JJTkRfR0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xf
RkFMU0UsCi0gICAgICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkg
PSBvd25lci5wbGF0Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIu
cGxhdGZvcm1Db25maWcoKTsKLSAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29u
dGV4dChkaXNwbGF5LCBjb25maWcsIG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0
ZXMpOwotICAgIGlmIChjb250ZXh0ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47
Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRl
eHQpOwotCi0gICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXks
IGNvbnRleHRdIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50
KGRpc3BsYXksIEVHTF9OT19DT05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRp
c3BsYXksIGNvbnRleHQpOwotICAgIH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQg
PSBtX293bmVyLmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsK
LQotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1
c2VUZXh0dXJlMkQpIHsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5H
TEVfdGV4dHVyZV9yZWN0YW5nbGUiKTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdM
RSgiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0
RXJyb3IoKSAhPSBHTF9OT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIEdMaW50IHZlcnRleFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVY
X1NIQURFUik7Ci0gICAgR0xpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdM
X0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJv
Z3JhbSgpOwotICAgIGF1dG8gcHJvZ3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhT
aGFkZXIsIGZyYWdtZW50U2hhZGVyLCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVT
aGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNo
YWRlcik7Ci0gICAgICAgIGdsOjpEZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwot
ICAgIC8vIFRoZXNlIGFyZSB3cml0dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUu
Ci0gICAgR0xpbnQgdnNMZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRl
eHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5n
dGgoKTsKLSAgICBHTGludCBmc0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRT
aGFkZXJUZXh0dXJlMkQubGVuZ3RoKCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZS5sZW5ndGgoKTsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VU
ZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVy
VGV4dHVyZVJlY3RhbmdsZTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9
IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdt
ZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4
U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFk
ZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVu
Z3RoKTsKLSAgICBnbDo6Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21w
aWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dy
YW0sIHZlcnRleFNoYWRlcik7Ci0gICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFn
bWVudFNoYWRlcik7Ci0gICAgZ2w6OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExp
bmsgc3RhdHVzIGlzIGNoZWNrZWQgYWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwg
Y29tcGlsYXRpb24gYmVuZWZpdC4KLQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwot
ICAgIGdsOjpHZW5CdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVy
dGV4QnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAg
ICAgICBnbDo6RGVsZXRlQnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAg
ICBmbG9hdCB2ZXJ0aWNlc1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAx
LCAtMSwgLTEgfTsKLSAgICBnbDo6QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRl
eEJ1ZmZlcik7Ci0gICAgZ2w6OkJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVy
dGljZXMpLCB2ZXJ0aWNlcywgR0xfU1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVm
ZmVyID0gMDsKLSAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAg
YXV0byBmcmFtZWJ1ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewot
ICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7
Ci0KLSAgICBHTGludCBzdGF0dXMgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdM
RSh5dXZQcm9ncmFtLCBHTF9MSU5LX1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAg
aWYgKCFzdGF0dXMpIHsKLSAgICAgICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6
R2V0U2hhZGVyaXZSb2J1c3RBTkdMRSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAx
LCBudWxscHRyLCAmdnNTdGF0dXMpOwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAg
ICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxF
X1NUQVRVUywgMSwgbnVsbHB0ciwgJmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3Jh
cGhpY3NDb250ZXh0R0xDVkFOR0xFKCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAl
ZCwgJWQsICVkLiIsIHRoaXMsIHN0YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjb250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVy
dGV4QnVmZmVyQ2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVh
c2UoKTsKLSAgICBtX2Rpc3BsYXkgPSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7
Ci0gICAgbV9jb25maWcgPSBjb25maWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0
ZXhCdWZmZXI7Ci0gICAgbV9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1
cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1
X3lUZXh0dXJlIik7Ci0gICAgbV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5p
Zm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRy
aXhVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1
X2NvbG9yTWF0cml4Iik7Ci0gICAgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRV
bmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6
ZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVf
eVRleHR1cmVTaXplIik7Ci0gICAgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6
OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAg
bV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1
dlByb2dyYW0sICJhX3Bvc2l0aW9uIik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRo
ZSBjbGVhbnVwIHdoaWxlIHRoZSBwcm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6
OlVzZVByb2dyYW0oeXV2UHJvZ3JhbSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBv
aW50ZXIobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2Us
IDAsIDApOwotICAgIGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZm
ZXJSZWYgaW1hZ2UsIFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZ
IGZsaXBZKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0
MjB2JyBhbmQgJzQyMGYnIHBpeGVsIGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9y
ZSBwaXhlbCBmb3JtYXRzLgotICAgIE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJH
ZXRQaXhlbEZvcm1hdFR5cGUoaW1hZ2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhl
bEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdl
Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAg
ICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJp
UGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkg
ewotICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRl
b1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9y
dGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7
Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5l
d1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkg
PT0gbV9sYXN0RmxpcFkKLSAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAg
ICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxh
c3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1
dFRleHR1cmUpKSB7Ci0gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlm
aWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAg
IC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2Fz
IGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVu
dChtX2Rpc3BsYXksIG1fY29udGV4dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNp
emVfdCB3aWR0aCA9IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhl
aWdodCA9IENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0
KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQg
Y29udGFpbiB1bmluaXRpYWxpemVkIGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4g
Y2FzZXMKLSAgICAvLyBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAg
YXV0byBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1
cmUsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRl
eEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBm
b3JtYXQsIHR5cGUsIG51bGxwdHIpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgMCk7Ci0gICAgfSk7Ci0gICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0
IHRleHR1cmUuCi0gICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZl
bCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0
cik7Ci0KLSAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NP
TE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0g
ICAgR0xlbnVtIHN0YXR1cyA9IGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVG
RkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAg
ICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVy
ZVRvUGxhdGZvcm1UZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9y
IG91dHB1dFRleHR1cmUuIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQg
c2V0IHVwIHRoZSB0ZXh0dXJlcyBmb3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFu
ZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8g
eVBsYW5lSGVpZ2h0ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAg
ICBhdXRvIHV2UGxhbmVXaWR0aCA9IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAx
KTsKLSAgICBhdXRvIHV2UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1
cmZhY2UsIDEpOwotCi0gICAgR0xlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwot
ICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNs
ZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRl
eHR1cmVzKDEsICZ1dlRleHR1cmUpOwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUxKTsKLSAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRl
eHR1cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVY
VFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVv
VGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdM
X0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5k
bGUgPSBXZWJDb3JlOjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwg
bV9jb25maWcsIHZpZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5H
TEUsIEdMX1JHLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUs
IHN1cmZhY2UsIDEpOwotICAgIGlmICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBhdXRvIHV2SGFuZGxlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rp
c3BsYXksIHV2SGFuZGxlXSB7Ci0gICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0
YWNoSU9TdXJmYWNlKGRpc3BsYXksIHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5
VGV4dHVyZSA9IDA7Ci0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0
byB5VGV4dHVyZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBn
bDo6RGVsZXRlVGV4dHVyZXMoMSwgJnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZl
VGV4dHVyZShHTF9URVhUVVJFMCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRh
cmdldCwgeVRleHR1cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9X
UkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1
dG8geUhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9k
aXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURf
SElOVF9BTkdMRSwgR0xfUkVELCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05F
RF9CWVRFLCBzdXJmYWNlLCAwKTsKLSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBhdXRvIHlIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9
IG1fZGlzcGxheSwgeUhhbmRsZV0gewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElP
U3VyZmFjZShkaXNwbGF5LCB5SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0
aGUgZHJhd2luZyBwYXJhbWV0ZXJzLgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZv
cm1Mb2NhdGlvbiwgMCk7Ci0gICAgZ2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2Nh
dGlvbiwgMSk7Ci0gICAgZ2w6OlVuaWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBm
bGlwWSA9PSBGbGlwWTo6WWVzID8gMSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVy
ZVNpemVVbmlmb3JtTG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGds
OjpVbmlmb3JtMmYobV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgs
IHV2UGxhbmVIZWlnaHQpOwotCi0gICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxG
b3JtYXQocGl4ZWxGb3JtYXQpOwotICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVy
RnVuY3Rpb25Gcm9tU3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJH
ZXRBdHRhY2htZW50KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7
Ci0gICAgYXV0byBjb2xvck1hdHJpeCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5z
ZmVyRnVuY3Rpb24ocmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0
cml4NGZ2KG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1h
dHJpeCk7Ci0KLSAgICAvLyBEbyB0aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJh
eXMoR0xfVFJJQU5HTEVTLCAwLCA2KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwot
ICAgIG1fbGFzdFN1cmZhY2VTZWVkID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVy
ZVNlZWQuc2V0KG91dHB1dFRleHR1cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVy
ZSkpOwotICAgIG1fbGFzdEZsaXBZID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJy
b3IucmVsZWFzZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQz
YmJjZTk5NTExZDQzMDFmMTI1MWI3MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYg
RU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xDVi5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQ
b2ludGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOwotCi0vLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdM
RSBmbGF2b3VyIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBw
YXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCBmb3IgQU5HTEUgQ29jb2EuCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmlu
YWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHRHTENWQU5HTEU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdy
YXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZm
ZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0
dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0xDVkFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNp
Z25lZCBsYXN0VGV4dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2xhc3RUZXh0dXJlU2VlZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmIG1fb3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TERpc3BsYXkgbV9kaXNwbGF5IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0wgbV9jb250ZXh0IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0xDb25maWcgbV9jb25maWcgeyBudWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1f
ZnJhbWVidWZmZXIgeyAwIH07Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZl
ciB7IDAgfTsKLSAgICBHQ0dMaW50IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9Owot
ICAgIEdDR0xpbnQgbV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xp
bnQgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9y
TWF0cml4VW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25B
dHRyaWJ1dGVMb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZv
cm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9j
YXRpb24geyAtMSB9OwotCi0gICAgRmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAg
ICBVbnNhZmVQb2ludGVyPElPU3VyZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJf
dCBtX2xhc3RTdXJmYWNlU2VlZCB7IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0g
SGFzaE1hcDxHQ0dMdWludCwgdW5zaWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAg
bV9sYXN0VGV4dHVyZVNlZWQ7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0
NWM5NzViMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMQ1ZDb2NvYS5oIgorCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVT
RShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5j
bHVkZSAiRm91ckNDLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgor
I2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4
U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAg
InVuaWZvcm0gdmVjMiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4
dHVyZVNpemU7IgorICAgICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMy
IHZfeVRleHR1cmVDb29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29v
cmRpbmF0ZTsiCisgICAgInZvaWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRp
b24gPSB2ZWM0KGFfcG9zaXRpb24sIDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVk
UG9zaXRpb24gPSBhX3Bvc2l0aW9uICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9
PSAxKSIKKyAgICAiICAgICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6
ZWRQb3NpdGlvbi55OyIKKyAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXpl
ZFBvc2l0aW9uOyIKKyAgICAiICAgIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQ
b3NpdGlvbjsiCisgICAgIn0iX3MKK307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZl
cnRleFNoYWRlclRleHR1cmVSZWN0YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0
aW9uOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2
ZWMyIHVfdXZUZXh0dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2
YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91
dlRleHR1cmVDb29yZGluYXRlOyIKKyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAg
ICBnbF9Qb3NpdGlvbiA9IHZlYzQoYV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMy
IG5vcm1hbGl6ZWRQb3NpdGlvbiA9IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlm
ICh1X2ZsaXBZID09IDEpIgorICAgICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4w
IC0gbm9ybWFsaXplZFBvc2l0aW9uLnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUg
PSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4
dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7Igor
ICAgICJ9Il9zCit9OworCitjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVy
ZTJEIHsKKyAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBs
ZXIyRCB1X3lUZXh0dXJlOyIKKyAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7Igor
ICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lU
ZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5h
dGU7IgorICAgICJ2b2lkIG1haW4oKSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAg
ICAiICAgIHl1di5yID0gdGV4dHVyZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRl
KS5yOyIKKyAgICAiICAgIHl1di5nYiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1
cmVDb29yZGluYXRlKS5yZzsiCisgICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9G
cmFnQ29sb3IgPSB5dXYgKiB1X2NvbG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGlj
IGNvbnN0ZXhwciBhdXRvIHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAg
ICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3Qg
dV95VGV4dHVyZTsiCisgICAgInVuaWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisg
ICAgInVuaWZvcm0gbWF0NCB1X2NvbG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRl
eHR1cmVDb29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0
ZTsiCisgICAgInZvaWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAg
ICIgICAgeXV2LnIgPSB0ZXh0dXJlMkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGlu
YXRlKS5yOyIKKyAgICAiICAgIHl1di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZf
dXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIg
ICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisK
K2VudW0gY2xhc3MgUGl4ZWxSYW5nZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBG
dWxsLAorfTsKKworZW51bSBjbGFzcyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24s
CisgICAga0lUVV9SXzcwOV8yLAorICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8x
OTk1LAorICAgIGtEQ0lfUDMsCisgICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisK
K3N0YXRpYyBQaXhlbFJhbmdlIHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVs
Rm9ybWF0KQoreworICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVs
Rm9ybWF0VHlwZV80NDQ0QVlwQ2JDcjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0
NEFZcENiQ3IxNjoKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJp
UGxhbmFyOgorICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZp
ZGVvUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5h
clZpZGVvUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBs
YW5hclZpZGVvUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBC
aVBsYW5hclZpZGVvUmFuZ2U6CisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9G
T1JNQVRfVFlQRVMpCisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhC
aVBsYW5hclZpZGVvUmFuZ2U6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZp
ZGVvOworICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFu
Z2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJh
bmdlOgorICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6Cisg
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNl
IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAg
Y2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNp
ZiBIQVZFKENPUkVWSURFT19DT01QUkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNl
IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2Vu
ZGlmCisgICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBQaXhlbFJhbmdlOjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5z
ZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJp
bmcpCit7CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OlVua25vd247CisgICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNy
TWF0cml4X0lUVV9SXzcwOV8yKSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6
a0lUVV9SXzcwOV8yOworICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9JVFVfUl82MDFfNCkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6
OmtJVFVfUl82MDFfNDsKKyAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNi
Q3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rp
b25DVjo6a1NNUFRFXzI0ME1fMTk5NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1h
Z2VCdWZmZXJZQ2JDck1hdHJpeF9EQ0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VC
dWZmZXJZQ2JDck1hdHJpeF9EQ0lfUDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlv
bkNWOjprRENJX1AzOworICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllD
YkNyTWF0cml4X1AzX0Q2NSgpICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNy
TWF0cml4X1AzX0Q2NSkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19E
NjU7CisgICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhf
SVRVX1JfMjAyMCgpICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4
X0lUVV9SXzIwMjApKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1Jf
MjAyMDsKKyAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1
Y3QgR0xmbG9hdENvbG9yIHsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAg
ICAgICBHTGZsb2F0IHI7CisgICAgICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZs
b2F0IGI7CisgICAgICAgIH0gcmdiOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xm
bG9hdCB5OworICAgICAgICAgICAgR0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7
CisgICAgICAgIH0geWNiY3I7CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3Io
R0xmbG9hdCByLCBHTGZsb2F0IGcsIEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBi
IH0KKyAgICB7CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50
IGcsIGludCBiLCBHTGZsb2F0IHNjYWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAv
IHNjYWxlLCBiIC8gc2NhbGUgfQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUg
Pj0gMCA/IHZhbHVlIDogLXZhbHVlOworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBw
cm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhE
ZWx0YSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2Iu
cikgPCBhYnMobWF4RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2Iu
ZykgPCBhYnMobWF4RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2Iu
YikgPCBhYnMobWF4RGVsdGEpOworICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAg
IHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0
YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitz
dHJ1Y3QgWUNiQ3JNYXRyaXggeworICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0
ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxv
YXQgY3JDb2VmZmljaWVudCk7CisKKyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3Rl
eHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9
OworCitjb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2Us
IEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93
cyB7IH0KK3sKKyAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFs
bHkgdGFrZXMgdGhlIGZvcm06CisgICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgor
ICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkp
IC8gKDIgKiAoMSAtIEtyKSkKKyAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBh
cmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3Ig
KyBLZyArIEtiID0gMQorICAgIC8vCisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25z
IGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAo
MiAqICgxIC0gS3IpKSAqIENyCisgICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisg
ICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3Ip
ICogMikgKiAoS3IgLyBLZykgKiBDcgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFs
dWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdp
ZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBd
IHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5n
ZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0
aCBhIHdpZHRoIG9mIDI1Ni4KKworICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNv
ZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0g
cmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xm
bG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYg
OiAyNTUuZiAvIDIyNC5mOworCisgICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAg
IHJvd3NbMF1bMV0gPSAwOworICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIg
KiAoMSAtIGNyQ29lZmZpY2llbnQpOworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sx
XVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0
b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmlj
aWVudCk7CisgICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNy
Q29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dz
WzFdWzNdID0gMDsKKworICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dz
WzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAg
ICByb3dzWzJdWzJdID0gMDsKKyAgICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0g
PSAwOworICAgIHJvd3NbM11bMV0gPSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3Nb
M11bM10gPSAxOworCisgICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1h
dHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4g
dGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAg
Zm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7Cisg
ICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJv
d1swXTsKKyAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1sy
XTsKKyAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAx
MjggLyAyNTU7CisgICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAg
ICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRD
b2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNv
bG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9y
LnJnYi5iICsgcm93c1swXVszXSwKKyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsg
cm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93
c1sxXVszXSwKKyAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAq
IGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAg
ICk7Cit9CisKK3N0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VB
bmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0
cmFuc2ZlckZ1bmN0aW9uKQoreworICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJh
bmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxN
YXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TWF0cml4TWFwPiBtYXRyaWNlczsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tl
bjsKKworICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4g
dGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1
LmludC9yZWMvUi1SRUMtQlQuNjAxCisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBy
NjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAg
ICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5n
ZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19h
c3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAy
NTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwg
IDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJl
ZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAg
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19h
c3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAy
NTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2
LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpt
YWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChy
NjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJy
LjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2
LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5m
KSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIs
IDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRh
LCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdl
bnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBm
cm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgor
ICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisg
ICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJh
bmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNy
TWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYg
fTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
NiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJy
LjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVm
IC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29s
b3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3Io
MzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChy
NzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwg
MTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAg
IDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFu
IGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwg
InIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVm
IC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4
LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8g
MjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7
CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRo
ZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5p
bnQvcmVjL1ItUkVDLUJULjIwMjAKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0
MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07Cisg
ICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxS
YW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0
LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAg
IDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdo
aXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDEx
OSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAx
LjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVl
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwg
MTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAg
IDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5
YW4gY29sb3IiKTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIw
RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41
ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29s
b3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5m
KSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAg
MjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFn
ZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJl
IGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNp
ZmljYXRpb24KKyAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83Mjkx
NDYxLworICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRy
aXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0
YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwg
MC4wODcsIDAuMjEyIH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZp
ZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fz
c2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVm
IC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0
ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xm
bG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21w
dGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYp
LCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9y
KDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZp
ZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRF
IDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAy
MTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdl
bnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAx
MjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBi
bGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBH
TGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
c21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigx
NzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0
ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQy
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVs
bG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdM
ZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1
LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3Ii
KTsKKworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMu
Z2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25D
Vjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0
KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjpr
SVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVt
cGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVf
Ul83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxh
Y2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcw
OV8yKSwgcjcwOUZ1bGxNYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1h
cEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCks
IGJ0MjAyMFZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBL
ZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0
MjAyMEZ1bGxNYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQ
aXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwg
c21wdGUyNDBNVmlkZW9NYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1h
cEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5
OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBu
ZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUg
aXMgdW5rbm93bi4KKyAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7Cisg
ICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4
ZWxSYW5nZTo6RnVsbDsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5k
KHsgcmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0
cmFuc2ZlciBmdW5jdGlvbnMgYXJlIHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNl
cy5nZXQoKS5lbmQoKSkKKyAgICAgICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsg
cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJU
KGl0ZXJhdG9yICE9IG1hdHJpY2VzLmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3It
PnNlY29uZDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4g
R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYg
Y29udGV4dCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
PiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAo
IWN2LT5tX2NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsK
K30KKworR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
KCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFr
ZUN1cnJlbnQobV9kaXNwbGF5LCBtX2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6
OkRlbGV0ZUJ1ZmZlcnMoMSwgJm1feXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJh
bWVidWZmZXJzKDEsICZtX2ZyYW1lYnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9k
aXNwbGF5LCBtX2NvbnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBo
aWNzQ29udGV4dEdMQ1ZDb2NvYShHcmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6
IG1fb3duZXIob3duZXIpCit7CisgICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0
IHNoYXJlcyBzdGF0ZSB3aXRoIG93bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBo
YXZlIHJvYnVzdG5lc3Mgb3IgV2ViR0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQg
Y29udGV4dEF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJ
T04sCisgICAgICAgIG93bmVyLm1faXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NP
TlRFWFRfT1BFTkdMX0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFM
U0UsCisgICAgICAgIEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAg
ICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNP
VVJDRV9DSFJPTUlVTSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAg
IH07CisgICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7Cisg
ICAgRUdMQ29uZmlnIGNvbmZpZyA9IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29u
dGV4dCBjb250ZXh0ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5t
X2NvbnRleHRPYmosIGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xf
Tk9fQ09OVEVYVCkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6
Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51
cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAg
ICAgICBFR0xfRGVzdHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAg
ICBjb25zdCBib29sIHVzZVRleHR1cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVU
YXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShNQUNDQVRBTFlTVCkKKyAgICBpZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVx
dWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAg
ICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODgiKTsKKyAgICAgICAgaWYgKGdsOjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0g
Z2w6OkNyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNo
YWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQg
eXV2UHJvZ3JhbSA9IGdsOjpDcmVhdGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51
cCA9IG1ha2VTY29wZUV4aXQoW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dy
YW1dIHsKKyAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBn
bDo6RGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dy
YW0oeXV2UHJvZ3JhbSk7CisgICAgfSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3Ry
bGVuIG1pZ2h0IGJlIGNvbXBpbGUtdGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1
cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhT
aGFkZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNl
VGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4
dHVyZTJEIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNo
YWRlclRleHR1cmUyRCA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisg
ICAgZ2w6OlNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2Us
ICZ2c0xlbmd0aCk7CisgICAgZ2w6OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZy
YWdtZW50U2hhZGVyU291cmNlLCAmZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZl
cnRleFNoYWRlcik7CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAg
IGdsOjpBdHRhY2hTaGFkZXIoeXV2UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0
YWNoU2hhZGVyKHl1dlByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dy
YW0oeXV2UHJvZ3JhbSk7CisgICAgLy8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRz
IGZvciB0aGVvcmV0aWNhbCBwYXJhbGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1
aW50IHl1dlZlcnRleEJ1ZmZlciA9IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRl
eEJ1ZmZlcik7CisgICAgYXV0byB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhp
dChbeXV2VmVydGV4QnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZW
ZXJ0ZXhCdWZmZXIpOworICAgIH0pOworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0x
LCAxLCAtMSwgMSwgMSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVy
KEdMX0FSUkFZX0JVRkZFUiwgeXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShH
TF9BUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJB
Vyk7CisKKyAgICBHTHVpbnQgZnJhbWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZl
cnMoMSwgJmZyYW1lYnVmZmVyKTsKKyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VT
Y29wZUV4aXQoW2ZyYW1lYnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMo
MSwgJmZyYW1lYnVmZmVyKTsKKyAgICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAg
Z2w6OkdldFByb2dyYW1pdlJvYnVzdEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAx
LCBudWxscHRyLCAmc3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2
c1N0YXR1cyA9IDA7CisgICAgICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNo
YWRlciwgR0xfQ09NUElMRV9TVEFUVVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAg
IEdMaW50IGZzU3RhdHVzID0gMDsKKyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUo
ZnJhZ21lbnRTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMp
OworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVW
IHByb2dyYW0gZmFpbGVkIHRvIGxpbms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0
YXR1cywgZnNTdGF0dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVh
bnVwLnJlbGVhc2UoKTsKKyAgICB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAg
ICBmcmFtZWJ1ZmZlckNsZWFudXAucmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7
CisgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBt
X3l1dlZlcnRleEJ1ZmZlciA9IHl1dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0g
ZnJhbWVidWZmZXI7CisgICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlm
b3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVu
aWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZU
ZXh0dXJlIik7CisgICAgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlm
b3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZ
VW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9m
bGlwWSIpOworICAgIG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZv
cm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVy
ZVNpemVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0s
ICJ1X3V2VGV4dHVyZVNpemUiKTsKKyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24g
PSBnbDo6R2V0QXR0cmliTG9jYXRpb24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAv
LyBQcm9ncmFtIGlzIGRlbGV0ZWQgYnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmlu
YXJ5IHN0YXlzIGluIHVzZS4KKyAgICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBn
bDo6RW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9u
KTsKKyAgICBnbDo6VmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9j
YXRpb24sIDIsIEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwg
MCwgMCwgMCk7CisgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFt
ZWJ1ZmZlcik7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxC
dWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBv
dXRwdXRUZXh0dXJlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgRmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMg
Y3VycmVudGx5IG9ubHkgc3VwcG9ydHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4g
SW52ZXN0aWdhdGUgc3VwcG9ydGluZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBp
eGVsRm9ybWF0ID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAg
aWYgKHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJW
aWRlb1JhbmdlIC8vIE5PTElOVAorICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZv
cm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9f
Q09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9
IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAg
ICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhC
aVBsYW5hckZ1bGxSYW5nZQorI2VuZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4
dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVz
JykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNl
ID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJm
YWNlR2V0U2VlZChzdXJmYWNlKTsKKyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAg
ICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVk
ID09IG1fbGFzdFN1cmZhY2VTZWVkCisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRU
ZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAg
IC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRp
bWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVu
IG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5v
LW9wLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwg
IUdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1
ZmZlckdldFdpZHRoKGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdl
dEhlaWdodChpbWFnZSk7CisKKyAgICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7
CisKKyAgICAvLyBUaGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQg
Y29udGVudCBvbiBlYXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVh
clRleHR1cmVPbkVycm9yIGlzIG5vdCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVP
bkVycm9yID0gbWFrZVNjb3BlRXhpdChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LCBmb3JtYXQsIHR5cGVdIHsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG91dHB1dFRleHR1cmUpOworICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7
CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAg
ICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6Qmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAg
IGdsOjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1
ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6
OkNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMg
IT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXAp
IC0gVW5hYmxlIHRvIGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlz
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgMCk7CisKKyAgICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZv
ciB0aGUgdmlkZW8gc291cmNlLgorICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRX
aWR0aE9mUGxhbmUoc3VyZmFjZSwgMCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZh
Y2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0g
SU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhl
aWdodCA9IElPU3VyZmFjZUdldEhlaWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVu
dW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpOworCisgICAgR0x1aW50IHV2VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEs
ICZ1dlRleHR1cmUpOworICAgIGF1dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQo
W3V2VGV4dHVyZV0geworICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7
CisgICAgfSk7CisgICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpC
aW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBh
cmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9U
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBi
dWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJl
VGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0
aCwgdXZQbGFuZUhlaWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYg
KCF1dkhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVh
bnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAg
ICAgICAgV2ViQ29yZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwg
dXZIYW5kbGUpOworICAgIH0pOworCisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6
R2VuVGV4dHVyZXMoMSwgJnlUZXh0dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1h
a2VTY29wZUV4aXQoW3lUZXh0dXJlXSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAm
eVRleHR1cmUpOworICAgIH0pOworICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsK
KyAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRl
cmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURH
RSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6
Y3JlYXRlUGJ1ZmZlckFuZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRl
b1RleHR1cmVUYXJnZXQsIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQ
bGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOwor
ICAgIGlmICgheUhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRs
ZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7
CisgICAgICAgIGRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5k
bGUpOworICAgIH0pOworCisgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMu
CisgICAgZ2w6OlVuaWZvcm0xaShtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBn
bDo6VW5pZm9ybTFpKG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5p
Zm9ybTFpKG1feXV2RmxpcFlVbmlmb3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAx
IDogMCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwg
eVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVy
ZVNpemVVbmlmb3JtTG9jYXRpb24sIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAg
ICBhdXRvIHJhbmdlID0gcGl4ZWxSYW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7Cisg
ICAgYXV0byB0cmFuc2ZlckZ1bmN0aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHlu
YW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtD
VkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4
ID0gWUNiQ3JUb1JHQk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJh
bnNmZXJGdW5jdGlvbik7CisgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVu
aWZvcm1Mb2NhdGlvbiwgMSwgR0xfRkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRo
ZSBhY3R1YWwgZHJhd2luZy4KKyAgICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYp
OworCisgICAgbV9sYXN0U3VyZmFjZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQg
PSBuZXdTdXJmYWNlU2VlZDsKKyAgICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVy
ZSwgbV9vd25lci50ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkg
PSBmbGlwWTsKKyAgICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM0ZTM5NjBiNmQ3MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGlj
c0NvbnRleHRHTENWQ29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9V
TkRBVElPTikKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUg
PG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRl
eHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhp
cyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGlj
c0NvbnRleHRHTENvY29hLgorY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDog
cHVibGljIEdyYXBoaWNzQ29udGV4dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNz
Q29udGV4dEdMQ1ZDb2NvYSgpIGZpbmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1Rl
eHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBGbGlwWSkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hKEdyYXBoaWNzQ29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxh
c3RUZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
bGFzdFRleHR1cmVTZWVkLmdldCh0ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRl
eHRHTENvY29hJiBtX293bmVyOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5
IG1fZGlzcGxheSB7IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1f
Y29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmln
IG1fY29uZmlnIHsgbnVsbHB0ciB9OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVm
ZmVyIHsgMCB9OworICAgIFBsYXRmb3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07
CisgICAgR0NHTGludCBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dM
aW50IG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2
RmxpcFlVbmlmb3JtTG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVu
aWZvcm1Mb2NhdGlvbiB7IC0xIH07CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRl
TG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRp
b24geyAtMSB9OworICAgIEdDR0xpbnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsg
LTEgfTsKKworICAgIEZsaXBZIG1fbGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZl
UG9pbnRlcjxJT1N1cmZhY2VSZWY+IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0
U3VyZmFjZVNlZWQgeyAwIH07CisKKyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8
R0NHTHVpbnQsIHVuc2lnbmVkLCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRl
eHR1cmVTZWVkOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuY3BwCmluZGV4IGI4MzJhMTg2YTQyYzhiZTMyMmE0YzcwODFmNzVkY2Q0OTBjMjdmODgu
LjNmZDc0YmUyMDlhMTNjNTAxNmVmNTU3ZTIxYWI3YzU5ZmQ0OGNhZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwu
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
MiwyMiArMjMsMjg2MyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAotI2lmIEVOQUJMRShX
RUJHTCkKKyNpZiBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKLSNpbmNsdWRlICJFeHRl
bnNpb25zR0wuaCIKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAiVGVtcG9y
YXJ5T3BlbkdMU2V0dGluZy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgorI2luY2x1
ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisK
KyNpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisj
ZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
TElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5HTF9FUykK
KyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1
cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VGbGFnOworICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBz
aGFyZWROYW1lSGFzaDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAg
ICBzaGFyZWROYW1lSGFzaCA9IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+Owor
ICAgIH0pOworCisgICAgcmV0dXJuICpzaGFyZWROYW1lSGFzaDsKK30KKworc3RhdGljIHZvaWQg
c2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1l
SGFzaCkKK3sKKyAgICAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJO
YW1lSGFzaDsKK30KKworLy8gSGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xh
dG9yL2NvbXBpbGVyIHRvIGRvCisvLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBp
cyBhIHN0YXRpYyBtZXRob2QsIGJlZm9yZQorLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNl
dCBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIKKy8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2Vw
dCBieSB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KKwor
c3RhdGljIHVpbnQ2NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVf
dCBsZW5ndGgpCit7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Q1N0cmluZyBuYW1lQXNDU3RyaW5nID0gQ1N0cmluZyhuYW1lKTsKKworICAgIC8vIExvb2sgdXAg
bmFtZSBpbiBvdXIgbG9jYWwgbWFwLgorICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVI
YXNoTWFwRm9yU2hhZGVyID0gKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOworICAg
IFNoYWRlck5hbWVIYXNoOjppdGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFw
Rm9yU2hhZGVyLT5maW5kKG5hbWVBc0NTdHJpbmcpOworICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1
cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+ZW5kKCkpCisgICAgICAgIHJldHVybiBmaW5kUmVz
dWx0LT52YWx1ZTsKKworICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFz
aCgpOworCisgICAgLy8gQ29udmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNo
IGludG8gYSA2NC1iaXQgcmVzdWx0CisgICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhl
IHNpemUgb2Ygb3VyIHRhYmxlLiBPdmVyZmxvdyB3b3VsZAorICAgIC8vIG9ubHkgYmUgYSBwcm9i
bGVtIGlmIHdlJ3JlIGFscmVhZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCisgICAg
Ly8gd2UncmUgaG9waW5nIHRoYXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UK
KyAgICAvLyBkb24ndCBoYXZlIHRoYXQgbWFueSBzeW1ib2xzKS4KKworICAgIHVpbnQ2NF90IHJl
c3VsdCA9IGhhc2hWYWx1ZTsKKyAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50
TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNpemUoKSArIDEpOworCisgICAgY3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyLT5zZXQobmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCit7CisgICAgYXV0
byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBFeHRlbnNpb25zR0xPcGVuR0xD
b21tb24mIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgaWYgKGF0dHJzLnN0ZW5j
aWwpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tl
ZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBz
dGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBhdHRycy5kZXB0aCA9IHRydWU7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZhbHNlOworICAgICAgICBzZXRD
b250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgfQorICAgIGlmIChhdHRycy5hbnRpYWxpYXMg
JiYgIW1faXNGb3JXZWJHTDIpIHsKKyAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKCJH
TF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7CisgICAgICAgICAgICBhdHRycy5h
bnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJz
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQo
IkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisgICAgfQorfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCit7CisgICAgaWYgKG1fbGF5
ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKworI2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1Jf
VEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVy
KEdMX0RJVEhFUiwgR0xfRkFMU0UpOworI2VuZGlmCisKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0
ZXMoKS5hbnRpYWxpYXMpCisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nhcnko
KTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBzdGQ6OnN3YXAobV90ZXh0
dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2lu
dGVybWVkaWF0ZVRleHR1cmUpOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG1fZmJvKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSwgMCk7CisgICAgZ2xGbHVzaCgpOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJP
ID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8g
IT0gbV9mYm8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgZWxzZQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOworICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xf
VEVYVFVSRTApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3N0YXRlLmJv
dW5kVGFyZ2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRl
eHR1cmUoR0xfVEVYVFVSRTApIDogMCk7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5h
Y3RpdmVUZXh0dXJlVW5pdCk7CisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9m
Ym8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgOjpnbEZsdXNoKCk7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFk
UmVuZGVyaW5nUmVzdWx0cygpCit7CisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwor
ICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgeworICAgICAgICByZXNvbHZl
TXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG11c3RS
ZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5i
b3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgICAgICBpZiAobV9zdGF0
ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0g
dHJ1ZTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIH0KKyAgICB9CisgICAgYXV0byByZXN1
bHQgPSByZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7CisgICAgaWYgKG11c3RSZXN0b3JlRkJP
KQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQoreworICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9j
dXJyZW50SGVpZ2h0KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQod2lkdGggPj0gMCAm
JiBoZWlnaHQgPj0gMCk7CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKworICAgIG1fY3VycmVudFdpZHRoID0g
d2lkdGg7CisgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OworCisgICAgdmFsaWRhdGVBdHRy
aWJ1dGVzKCk7CisKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xf
U0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29w
ZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7CisgICAgCisgICAgYm9vbCBtdXN0UmVzdG9y
ZUZCTyA9IHJlc2hhcGVGQk9zKEludFNpemUod2lkdGgsIGhlaWdodCkpOworCisgICAgLy8gSW5p
dGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7
IDAsIDAsIDAsIDAgfSwgY2xlYXJEZXB0aCA9IDA7CisgICAgR0xpbnQgY2xlYXJTdGVuY2lsID0g
MDsKKyAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7IEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RS
VUUsIEdMX1RSVUUgfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVpbnQgc3RlbmNpbE1h
c2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZmOworICAgIEdMYml0
ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2
KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6OmdsQ2xlYXJDb2xvcigw
LCAwLCAwLCAwKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xv
ck1hc2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xf
VFJVRSk7CisKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlm
IChhdHRycy5kZXB0aCkgeworICAgICAgICA6OmdsR2V0RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZB
TFVFLCAmY2xlYXJEZXB0aCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKDEpOworICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAm
ZGVwdGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKKyAgICAgICAgY2xl
YXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlmIChhdHRycy5zdGVu
Y2lsKSB7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAm
Y2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgOjpn
bEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50
Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0JB
Q0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrQmFjaykp
OworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZmZmZmZik7
CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIDB4ZmZmZmZmZmYpOwor
ICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0KKworICAg
IDo6Z2xDbGVhcihjbGVhck1hc2spOworCisgICAgOjpnbENsZWFyQ29sb3IoY2xlYXJDb2xvclsw
XSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CisgICAgOjpn
bENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xv
ck1hc2tbM10pOworICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgOjpnbERlcHRoTWFz
ayhkZXB0aE1hc2spOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6
OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7CisgICAgfQorCisgICAgaWYgKG11c3RS
ZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworCisgICAgYXV0byBlcnJv
ciA9IDo6Z2xHZXRFcnJvcigpOworICAgIGlmIChlcnJvciAhPSBHTF9OT19FUlJPUikgeworICAg
ICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBPcGVuR0wgZXJyb3IgZHVyaW5nIEdyYXBo
aWNzQ29udGV4dEdMIGJ1ZmZlciBpbml0aWFsaXphdGlvbiAoJWQpLiIsIGVycm9yKTsKKyAgICAg
ICAgZm9yY2VDb250ZXh0TG9zdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgOjpn
bEZsdXNoKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrVmFyeWlu
Z3NQYWNraW5nKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0
IGZyYWdtZW50U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5j
b250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29u
dGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7CisgICAgY29uc3QgYXV0
byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIp
LT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6U2hhZGVyVmFyaWFibGU+IGNvbWJp
bmVkVmFyeWluZ3M7CisgICAgZm9yIChjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgOiB2ZXJ0ZXhF
bnRyeS52YXJ5aW5nTWFwKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3ltYm9sTmFtZSA9IHZl
cnRleFN5bWJvbC5rZXk7CisgICAgICAgIC8vIFRoZSB2YXJ5aW5nIG1hcCBpbmNsdWRlcyB2YXJp
YWJsZXMgZm9yIGVhY2ggaW5kZXggb2YgYW4gYXJyYXkgdmFyaWFibGUuCisgICAgICAgIC8vIFdl
IG9ubHkgd2FudCBhIHNpbmdsZSB2YXJpYWJsZSB0byByZXByZXNlbnQgdGhlIGFycmF5LgorICAg
ICAgICBpZiAoc3ltYm9sTmFtZS5lbmRzV2l0aCgiXSIpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgLy8gRG9uJ3QgY291bnQgYnVpbHQgaW4gdmFyeWluZ3MuCisgICAgICAgIGlm
IChzeW1ib2xOYW1lID09ICJnbF9GcmFnQ29vcmQiIHx8IHN5bWJvbE5hbWUgPT0gImdsX0Zyb250
RmFjaW5nIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Qb2ludENvb3JkIikKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50U3ltYm9sID0gZnJhZ21lbnRF
bnRyeS52YXJ5aW5nTWFwLmZpbmQoc3ltYm9sTmFtZSk7CisgICAgICAgIGlmIChmcmFnbWVudFN5
bWJvbCAhPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAuZW5kKCkpCisgICAgICAgICAgICBjb21i
aW5lZFZhcnlpbmdzLmFkZChzeW1ib2xOYW1lLCBmcmFnbWVudFN5bWJvbC0+dmFsdWUpOworICAg
IH0KKworICAgIHNpemVfdCBudW1WYXJ5aW5ncyA9IGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpOwor
ICAgIGlmICghbnVtVmFyeWluZ3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3RkOjp2
ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiB2YXJpYWJsZXM7CisgICAgdmFyaWFibGVzLnJlc2Vy
dmUoY29tYmluZWRWYXJ5aW5ncy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgdmFyeWlu
Z1N5bWJvbCA6IGNvbWJpbmVkVmFyeWluZ3MudmFsdWVzKCkpCisgICAgICAgIHZhcmlhYmxlcy5w
dXNoX2JhY2sodmFyeWluZ1N5bWJvbCk7CisKKyAgICBHQ0dMaW50IG1heFZhcnlpbmdWZWN0b3Jz
ID0gMDsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xHZXRJbnRlZ2VydihNQVhfVkFSWUlO
R19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOworI2Vsc2UKKyAgICBpZiAobV9pc0Zvcldl
YkdMMikKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMsICZt
YXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZWxzZSB7CisgICAgICAgIEdDR0xpbnQgbWF4VmFyeWlu
Z0Zsb2F0cyA9IDA7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9B
VFMsICZtYXhWYXJ5aW5nRmxvYXRzKTsKKyAgICAgICAgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtYXhW
YXJ5aW5nRmxvYXRzIC8gNDsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gc2g6OkNoZWNrVmFy
aWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5nVmVjdG9ycywgdmFyaWFibGVzKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lzaW9uc01hdGNoKFBsYXRm
b3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVy
KSBjb25zdAoreworICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhT
aGFkZXIpKTsKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRT
aGFkZXIpKTsKKyAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7CisgICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRy
eSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKworICAg
IEhhc2hNYXA8U3RyaW5nLCBzaDo6R0xlbnVtPiB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXA7CisK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdmVydGV4RW50cnkudW5pZm9ybU1hcCkgewor
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgp
Lm1hcHBlZE5hbWU7CisgICAgICAgIHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5hZGQoU3RyaW5n
KG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSksIGVudHJ5LnZhbHVlLmdl
dCgpLnByZWNpc2lvbik7CisgICAgfQorCisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGZy
YWdtZW50RW50cnkudW5pZm9ybU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFw
cGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7CisgICAgICAgIGNvbnN0IGF1
dG8mIHZlcnRleFN5bWJvbCA9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5maW5kKFN0cmluZyht
YXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpKTsKKyAgICAgICAgaWYgKHZl
cnRleFN5bWJvbCAhPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZW5kKCkgJiYgdmVydGV4U3lt
Ym9sLT52YWx1ZSAhPSBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24pCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0
YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZSh0
ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVy
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7Cisg
ICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5
bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dy
YW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRy
aWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBtYXBwZWROYW1l
ID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRF
LCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5n
ICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkp
OworICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG1hcHBlZE5hbWUu
dXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRC
dWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmlu
ZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVm
ZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgZmJvID0gYnVmZmVy
OworICAgIGVsc2UKKyAgICAgICAgZmJvID0gKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFz
ID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAgICBBU1NFUlQodGFyZ2V0ID09IEdMX0ZS
QU1FQlVGRkVSKTsKKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5i
b3VuZERyYXdGQk8pOworICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pIHsKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAgIG1fc3Rh
dGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBmYm87CisgICAgfQorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJpbmRSZW5kZXJi
dWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVy
ZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4
dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NH
TGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1w
ZiBhbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9k
ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVt
IG1vZGVBbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBo
YSk7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xl
bnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBk
ZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5k
RnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBz
cmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JH
QiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUs
IEdDR0xlbnVtIHVzYWdlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2Up
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVt
IHRhcmdldCwgR0NHTFNwYW48Y29uc3Qgdm9pZD4gZGF0YSwgR0NHTGVudW0gdXNhZ2UpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bEJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSwgdXNhZ2UpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0
YSk7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisKKyAgICByZXR1cm4g
OjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywg
R0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBt
YXNrKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xDbGVhcihtYXNrKTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NHTGludCBzKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xD
bGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9y
TWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVl
LCBHQ0dMYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUdXJuIG9u
IG5hbWUgbWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3
ZQorICAgIC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1hcCBvd25lZCBieSB0aGlz
IGNvbnRleHQuCisgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gbV9jb21w
aWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICBTaEhhc2hGdW5jdGlvbjY0IHByZXZpb3VzSGFzaEZ1
bmN0aW9uID0gQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOworICAgIEFOR0xFUmVzb3VyY2Vz
Lkhhc2hGdW5jdGlvbiA9IG5hbWVIYXNoRm9yU2hhZGVyOworCisgICAgaWYgKCFuYW1lSGFzaE1h
cEZvclNoYWRlcnMpCisgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8
U2hhZGVyTmFtZUhhc2g+KCk7CisgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5h
bWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMo
QU5HTEVSZXNvdXJjZXMpOworCisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBt
X2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOworCisg
ICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0gcHJldmlvdXNIYXNoRnVuY3Rpb247Cisg
ICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIHNldEN1cnJl
bnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsKKworICAgIGlmICghdHJhbnNsYXRlZFNo
YWRlclNvdXJjZS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgQ1N0cmlu
ZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0Zjgo
KTsKKyAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRl
ckNTdHJpbmcuZGF0YSgpOworICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNs
YXRlZFNoYWRlckNTdHJpbmcubGVuZ3RoKCk7CisKKyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4g
b3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBz
b3VyY2UgLS0tXG4iLCBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBMT0coV2ViR0wsICItLS0gYmVnaW4gdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLVxuJXNc
bi0tLSBlbmQgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLSIsIHRyYW5zbGF0ZWRTaGFkZXJQ
dHIpOworCisgICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVy
UHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7CisgICAgCisgICAgOjpnbENvbXBpbGVTaGFk
ZXIoc2hhZGVyKTsKKyAgICAKKyAgICBpbnQgY29tcGlsZVN0YXR1czsKKyAgICAKKyAgICA6Omds
R2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOworCisg
ICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHNoYWRlcik7CisgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1
ZTsKKworICAgIC8vIFBvcHVsYXRlIHRoZSBzaGFkZXIgbG9nCisgICAgR0xpbnQgbGVuZ3RoID0g
MDsKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5n
dGgpOworCisgICAgaWYgKGxlbmd0aCkgeworICAgICAgICBHTHNpemVpIHNpemUgPSAwOworICAg
ICAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgICAgIDo6Z2xHZXRTaGFkZXJJ
bmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOworCisgICAgICAgIFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07CisgICAgICAgIGVudHJ5
LmxvZyA9IGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgp
LCBzaXplKSk7CisgICAgfQorCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgIT0gR0xfVFJVRSkgewor
ICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIExPRyhXZWJHTCwgIkVycm9y
OiBzaGFkZXIgdHJhbnNsYXRvciBwcm9kdWNlZCBhIHNoYWRlciB0aGF0IE9wZW5HTCB3b3VsZCBu
b3QgY29tcGlsZS4iKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNT
RVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgSGFzaE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46
Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAg
IGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICBj
b25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50cnkuc291cmNlLnV0ZjgoKTsK
KyAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRh
dGEoKTsKKyAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0cmluZy5s
ZW5ndGgoKTsKKworICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJj
ZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuIiwgc2hhZGVyU291
cmNlUHRyKTsKKworICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNl
UHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKKworICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRl
cik7CisKKyAgICBpbnQgY29tcGlsZVN0YXR1czsKKworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFk
ZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7CisKKyAgICBpZiAoY29tcGlsZVN0
YXR1cyA9PSBHTF9UUlVFKSB7CisgICAgICAgIGVudHJ5LmlzVmFsaWQgPSB0cnVlOworICAgICAg
ICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIExP
RyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsK
KyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisg
ICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsK
KyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJ
bnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAg
OjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0
ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2Uy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGlu
dCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgQVNT
RVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBp
ZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENv
cHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERy
YXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IDo6Z2xDdWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERlcHRoRnVuYyhmdW5jKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFuIGZsYWcpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbERlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAgICA6OmdsRGV0YWNo
U2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xEaXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWlu
dCBpbmRleCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dM
aW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUs
IGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0
cl90PihvZmZzZXQpKSk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRW5hYmxlKGNhcCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDR0x1aW50IGluZGV4KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZpbmlz
aCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmbHVzaCgpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZs
dXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0g
cmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRnJhbWVi
dWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJn
ZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVu
dW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0
YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGcm9udEZhY2UobW9kZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVt
IHRhcmdldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKK30KKworYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJv
Z3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsK
KyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xF
TkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOworICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0
cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBu
dWxsIHRlcm1pbmF0aW9uLgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQg
c2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIo
cHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5
cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1l
KHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIFN0cmluZyhuYW1lLmRhdGEo
KSwgbmFtZUxlbmd0aCkpOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgdW5pZm9y
bU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOworICAgIExPRyhXZWJHTCwgIlByb2dyYW0g
JWQgaXMgbWFwcGluZyBhY3RpdmUgYXR0cmlidXRlICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJv
Z3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4
KCkuZGF0YSgpKTsKKyNlbmRpZgorCisgICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOworICAg
IGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Cit7CisgICAgR0NHTGludCBzeW1ib2xDb3VudDsKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVy
UHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCA9PSBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICBnZXROb25CdWls
dEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9B
VFRSSUJVVEVTLCAmc3ltYm9sQ291bnQpOworICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dy
YW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIH0KKyAgICAKKyAgICBBY3RpdmVT
aGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+dmFsdWU7CisgICAgR0NH
THVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0
dHJpYnV0ZUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0
dHJpYnV0ZUluZGV4TWFwW2luZGV4XSA6IC0xOworCisgICAgcmV0dXJuIGdldEFjdGl2ZUF0dHJp
YkltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOworfQorCitib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsKKyAgICA6
OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZt
YXhVbmlmb3JtU2l6ZSk7CisKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heFVuaWZvcm1TaXpl
KTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0
aW9uLgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7Cisg
ICAgR0xlbnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGlu
ZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRh
KCkpOworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hB
REVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkp
OworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRh
KCksIG5hbWVMZW5ndGgpOworICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBh
Y3RpdmUgdW5pZm9ybSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlm
b3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7CisjZW5k
aWYKKyAgICAKKyAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7CisgICAgaW5mby50eXBlID0g
dHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0NH
TGludCBzeW1ib2xDb3VudDsKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dy
YW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3lt
Ym9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9VTklGT1JNUywgJnN5
bWJvbENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAuZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291
bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDR0x1aW50IHJhd0luZGV4
ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAu
c2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwW2lu
ZGV4XSA6IC0xOworICAgIAorICAgIHJldHVybiBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFt
LCByYXdJbmRleCwgaW5mbyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhD
b3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVjdCogc2hhZGVycykKK3sKKyAg
ICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFt
LCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQorCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRl
SGFzaGVkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB1aW50NjRfdCBudW1iZXIgPSBuYW1lSGFzaEZv
clNoYWRlcihuYW1lLnV0ZjgoKS5kYXRhKCksIG5hbWUubGVuZ3RoKCkpOworICAgIHJldHVybiBt
YWtlU3RyaW5nKCJ3ZWJnbF8iLCBoZXgobnVtYmVyLCBMb3dlcmNhc2UpKTsKK30KKworc3RkOjpv
cHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xJblNo
YWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xU
eXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
Y29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlw
ZSk7CisgICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1hcC5maW5kKG5hbWUpOworICAgIGlm
IChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBhdXRvJiBtYXBwZWROYW1lID0gc3ltYm9sRW50cnktPnZhbHVlLmdldCgp
Lm1hcHBlZE5hbWU7CisgICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBl
ZE5hbWUubGVuZ3RoKCkpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1h
cHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJv
bFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDR0xzaXplaSBj
b3VudCA9IDA7CisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyB9OworICAgIGdl
dEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworCisgICAgZm9y
IChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gbWFwcGVk
TmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5
cGUsIG5hbWUpOworICAgICAgICBpZiAobWFwcGVkTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBt
YXBwZWROYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hl
ZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCisgICAgYXV0byByZXN1bHQg
PSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgIT0gbV9s
aW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKKyAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVz
dWx0LT52YWx1ZTsKKyAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFk
ZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAg
ICAgIGlmIChtYXBwZWROYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUo
KTsKKyAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxp
bmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG1hcHBl
ZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOworICAgIH0KKwor
ICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5h
bWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNl
OiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21w
aWxlZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4g
YW55IHNoYWRlciBwcm9ncmFtLgorICAgICAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykK
KyAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFt
ZUhhc2g+KCk7CisgICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFz
aE1hcEZvclNoYWRlcnMuZ2V0KCkpOworCisgICAgICAgIGF1dG8gZ2VuZXJhdGVkTmFtZSA9IGdl
bmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKKworICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXIobnVsbHB0cik7CisKKyAgICAgICAgbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1h
cC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7CisKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE5h
bWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U3RyaW5n
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5
cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYg
c3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgZm9y
IChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgeworICAgICAgICBpZiAobmFt
ZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCisgICAgICAg
ICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9s
TmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1i
b2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgR0NHTHNpemVpIGNvdW50OworICAg
IFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXTsKKyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKyAgICAKKyAgICBmb3IgKEdDR0xzaXplaSBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5h
bFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOwor
ICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFt
ZS52YWx1ZSgpOworICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVs
ZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgorICAgIGF1dG8gcmVzdWx0ID0gbV9saW5r
ZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hh
ZGVyTWFwLmVuZCgpKSB7CisgICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFs
dWU7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNv
dXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAg
aWYgKG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUo
KTsKKyAgICAgICAgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChv
cmlnaW5hbE5hbWUpCisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Cisg
ICAgfQorCisgICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVU
RSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVj
aWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBi
ZWVuIGNvbXBpbGVkLAorICAgICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUg
dXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCisKKyAgICAgICAgY29uc3QgYXV0byYgY2FjaGVk
ID0gbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5maW5kKG5hbWUpOworICAgICAgICBpZiAo
Y2FjaGVkICE9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gY2FjaGVkLT52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFtZTsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgZm9yIChzaXplX3Qgc3ltYm9sVHlwZSA9IDA7IHN5bWJvbFR5cGUgPD0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihTSEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORyk7ICsrc3ltYm9sVHlwZSkgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAg
IFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXJzW2ldKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5z
eW1ib2xNYXAoc3RhdGljX2Nhc3Q8ZW51bSBBTkdMRVNoYWRlclN5bWJvbFR5cGU+KHN5bWJvbFR5
cGUpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xN
YXApIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQo
KS5tYXBwZWROYW1lLmNfc3RyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xF
bnRyeS5rZXk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5h
bWU7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYg
KCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0g
bWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBu
YW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAl
cyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsK
KyAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRm
OCgpLmRhdGEoKSk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmli
TG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKworICAgIHJldHVy
biA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30K
KworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOworCisgICAgLy8gU2V0
IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcg
aWYKKyAgICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBu
ZXZlciBjbGVhciB0aGUgZXJyb3IuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxv
b3AgdW50aWwgd2UgZ290IE5PX0VSUk9SLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAx
MDA7ICsraSkgeworICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICAg
ICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG1f
c3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7CisgICAgICAgIG1vdmVkQW5FcnJvciA9IHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKK30KKworR0NHTGVudW0gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKK3sKKyAgICBpZiAoIW1fc3ludGhldGljRXJy
b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJy
b3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCisgICAgICAgIC8vIHRoYXQg
ZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJv
dGgKKyAgICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMgdG8gb25seSByZXBvcnQg
ZWFjaCBlcnJvciBjb2RlIG9uY2UuCisgICAgICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9y
TGlzdCgpOworICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7Cisg
ICAgfQorCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdM
X0lOVkFMSURfT1BFUkFUSU9OOworCisgICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigpOworfQorCitT
dHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpn
bEdldFN0cmluZyhuYW1lKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpo
aW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsSGludCh0YXJnZXQsIG1v
ZGUpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIo
UGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNCdWZmZXIoYnVmZmVyKTsKK30K
KworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51
bSBjYXApCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2FwKTsKK30KKworR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVi
dWZmZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9n
cmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dy
YW0pOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJi
dWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJi
dWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNS
ZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAg
IGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4g
OjpnbElzU2hhZGVyKHNoYWRlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQoreworICAgIGlmICgh
dGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJ
c1RleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omxp
bmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbExpbmVXaWR0aCh3aWR0aCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisKKyAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwor
ICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIGlmIChjb3VudCA9PSAy
KQorICAgICAgICBtX2xpbmtlZFNoYWRlck1hcC5zZXQocHJvZ3JhbSwgc3RkOjptYWtlX3BhaXIo
c2hhZGVyc1swXSwgc2hhZGVyc1sxXSkpOworCisgICAgOjpnbExpbmtQcm9ncmFtKHByb2dyYW0p
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51
bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxv
YXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1
bml0cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdl
KEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU2FtcGxlQ292ZXJh
Z2UodmFsdWUsIGludmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNj
aXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworCisgICAgU2hhZGVy
U291cmNlRW50cnkgZW50cnk7CisKKyAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7CisKKyAgICBt
X3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBXVEZNb3ZlKGVudHJ5KSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xp
bnQgcmVmLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2sp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRl
KEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNr
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2sp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1hc2spCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwg
R0NHTGVudW0genBhc3MpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51
bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZh
bHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgYXJy
YXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIp
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2
MykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZT
aXplICUgNCkpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJy
YXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYw
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFp
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYw
LCBHQ0dMaW50IHYxKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVm
U2l6ZSAlIDIpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFy
cmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2ko
R0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYzKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCB0cmFuc3Bvc2UsIGFy
cmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUg
OSkpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gOSwgdHJh
bnNwb3NlLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXku
YnVmU2l6ZSAlIDE2KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAxNiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVz
ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZh
bGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHBy
b2dyYW0pOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9h
dCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgs
IGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdCwgMj4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXku
ZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYy
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGlu
ZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBH
Q0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYw
LCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFy
cmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6ZWQs
IEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQ
b2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmlld3BvcnQoeCwgeSwg
d2lkdGgsIGhlaWdodCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKK3sKKyAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygp
LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit7CisgICAgZ2V0
RXh0ZW5zaW9ucygpLmRlbGV0ZVZlcnRleEFycmF5T0VTKGFycmF5KTsKK30KKworR0NHTGJvb2xl
YW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVj
dCBhcnJheSkKK3sKKyAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmlzVmVydGV4QXJyYXlPRVMo
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJy
YXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuYmluZFZl
cnRleEFycmF5T0VTKGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlLmRhdGEpOworfQorCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgOjpnbEdldEJ1
ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVl
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYoR0NHTGVudW0g
cG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEZsb2F0dihwbmFtZSwg
dmFsdWUuZGF0YSk7Cit9CisKK0dDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBH
Q0dMaW50NjQgdmFsdWUgPSAwOworICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5n
IHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRp
bmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAu
CisgICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKKyAgICByZXR1cm4gdmFs
dWU7Cit9CisKK0dDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCit7CisgICAgVU5VU0VEX1BBUkFNKHBu
YW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0NHTGludDY0IHZhbHVlID0gMDsKKyAg
ICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dp
dGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBX
ZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAgIC8vIDo6Z2xHZXRJbnRlZ2Vy
NjRpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5h
bWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5UKQorICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsg
Ly8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCisgICAgOjpnbEdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUs
ICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVt
IHBuYW1lKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biAwOworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCit7CisgICAg
QVNTRVJUKEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1lIHx8IEFDVElWRV9VTklGT1JNUyA9PSBw
bmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgYXV0byYgcmVz
dWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICBp
ZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7CisgICAg
ICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBlKHBuYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnNldChw
cm9ncmFtLCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMoKSk7CisgICAgQWN0aXZlU2hhZGVyU3lt
Ym9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5m
aW5kKHByb2dyYW0pLT52YWx1ZTsKKworICAgIC8vIFJldHJpZXZlIHRoZSBhY3RpdmUgYXR0cmli
dXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEgbWFwcGluZyBvZgorICAgIC8vIG91
ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhlIHJlYWwgdW5maWx0ZXJlZCBpbmRl
eGVzIGluc2lkZSBPcGVuR0wuCisgICAgR0NHTGludCBhdHRyaWJ1dGVDb3VudCA9IDA7CisgICAg
OjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklCVVRFUywgJmF0dHJpYnV0ZUNv
dW50KTsKKyAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7
CisgICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAgICAgICAgZ2V0QWN0aXZlQXR0cmliSW1wbChw
cm9ncmFtLCBpLCBpbmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8i
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJl
ZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAv
LyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMuCisgICAgR0NHTGludCB1bmlmb3JtQ291bnQgPSAw
OworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX1VOSUZPUk1TLCAmdW5pZm9y
bUNvdW50KTsKKyAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCB1bmlmb3JtQ291bnQ7ICsraSkg
eworICAgICAgICBBY3RpdmVJbmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZVVuaWZvcm1JbXBs
KHByb2dyYW0sIGksIGluZm8pOworICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImds
XyIpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBzeW1ib2xDb3Vu
dHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBlbmQoaSk7CisgICAgfQorICAg
IAorICAgICp2YWx1ZSA9IHN5bWJvbENvdW50cy5jb3VudEZvclR5cGUocG5hbWUpOworfQorCitT
dHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXJzWzJdLCBHQ0dMc2l6ZWkgY291bnQsIGNvbnN0IFN0cmluZyYgbG9n
KQoreworICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRlckluZm9Mb2c6XG4lcyIsIGxvZy51
dGY4KCkuZGF0YSgpKTsKKworICAgIEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24gcmVnRXhw
KCJ3ZWJnbF9bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl0rIik7CisKKyAgICBTdHJpbmdCdWlsZGVy
IHByb2Nlc3NlZExvZzsKKyAgICAKKyAgICAvLyBBTkdMRSBpbnNlcnRzIGEgIiNleHRlbnNpb24i
IGxpbmUgaW50byB0aGUgc2hhZGVyIHNvdXJjZSB0aGF0CisgICAgLy8gY2F1c2VzIGEgd2Fybmlu
ZyBpbiBzb21lIGNvbXBpbGVycy4gVGhlcmUgaXMgbm8gcG9pbnQgc2hvd2luZworICAgIC8vIHRo
aXMgd2FybmluZyB0byB0aGUgdXNlciBzaW5jZSB0aGV5IGRpZG4ndCB3cml0ZSB0aGUgY29kZSB0
aGF0CisgICAgLy8gaXMgY2F1c2luZyBpdC4KKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiBhbmdsZVdhcm5pbmcgeyAiV0FSTklORzogMDoxOiBleHRlbnNpb24gJ0dMX0FS
Ql9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxuIl9zIH07CisgICAgaW50IHN0YXJ0RnJv
bSA9IGxvZy5zdGFydHNXaXRoKGFuZ2xlV2FybmluZykgPyBhbmdsZVdhcm5pbmcuZ2V0KCkubGVu
Z3RoKCkgOiAwOworICAgIGludCBtYXRjaGVkTGVuZ3RoID0gMDsKKworICAgIGRvIHsKKyAgICAg
ICAgaW50IHN0YXJ0ID0gcmVnRXhwLm1hdGNoKGxvZywgc3RhcnRGcm9tLCAmbWF0Y2hlZExlbmd0
aCk7CisgICAgICAgIGlmIChzdGFydCA9PSAtMSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIHN0YXJ0IC0g
c3RhcnRGcm9tKSk7CisgICAgICAgIHN0YXJ0RnJvbSA9IHN0YXJ0ICsgbWF0Y2hlZExlbmd0aDsK
KworICAgICAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWRTeW1ib2wgPSBsb2cuc3Vic3RyaW5nKHN0
YXJ0LCBtYXRjaGVkTGVuZ3RoKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBtYXBwZWRTeW1ib2wg
PSBtYXBwZWRTeW1ib2xOYW1lKHNoYWRlcnMsIGNvdW50LCBtYW5nbGVkU3ltYm9sKTsKKyAgICAg
ICAgTE9HKFdlYkdMLCAiRGVtYW5nbGluZzogJXMgdG8gJXMiLCBtYW5nbGVkU3ltYm9sLnV0Zjgo
KS5kYXRhKCksIG1hcHBlZFN5bWJvbC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcHJvY2Vzc2Vk
TG9nLmFwcGVuZChtYXBwZWRTeW1ib2wpOworICAgIH0gd2hpbGUgKHN0YXJ0RnJvbSA8IHN0YXRp
Y19jYXN0PGludD4obG9nLmxlbmd0aCgpKSk7CisKKyAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxv
Zy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKKworICAg
IExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBwcm9jZXNzZWRMb2cu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUlu
Zm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsK
KworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFt
LCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworICAgIGlmICghbGVuZ3RoKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICBWZWN0b3I8
R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0s
IGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgIEdDR0xzaXplaSBjb3VudDsKKyAg
ICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHBy
b2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5m
b0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Cit9CisKK0dD
R0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50IHZhbHVlID0g
MDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFt
ZSkKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKworICAg
IGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBERUxFVEVfU1RBVFVTOgorICAgIGNh
c2UgU0hBREVSX1RZUEU6CisgICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCAm
dmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgorICAgICAg
ICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgdmFs
dWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgorICAgICAgICBpZiAocmVzdWx0ICE9IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgdmFsdWUgPSBnZXRTaGFkZXJJbmZv
TG9nKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hBREVSX1NP
VVJDRV9MRU5HVEg6CisgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVu
Z3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKElOVkFMSURfRU5VTSk7CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgY29uc3QgYXV0
byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsg
CisKKyAgICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwor
ICAgIGlmICghZW50cnkuaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKKworICAg
IEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5m
byhsZW5ndGgpOworICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6
ZSwgaW5mby5kYXRhKCkpOworCisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyBz
aGFkZXIsIDAgfTsKKyAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBT
dHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAg
QVNTRVJUKHNoYWRlcik7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1h
cC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIHJldHVybiByZXN1bHQt
PnZhbHVlLnNvdXJjZTsKK30KKworR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
R0NHTGZsb2F0IHZhbHVlID0gMC5mOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBw
bmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgOjpnbEdldFRleFBhcmFtZXRl
cml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
R2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0x1aW50PiB2YWx1ZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgU3RyaW5nIG1hcHBlZE5h
bWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JN
LCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2NhdGlvbiBpcyBtYXBwaW5n
ICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkp
OworICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUu
dXRmOCgpLmRhdGEoKSk7Cit9CisKK0dDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2
KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMc2l6
ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhVVNFKE9QRU5HTF9FUykKKyAgICBpZiAodHlw
ZSA9PSBIQUxGX0ZMT0FUX09FUykKKyAgICAgICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRfQVJCOwor
I2VuZGlmCisKKyAgICBpZiAobV91c2luZ0NvcmVQcm9maWxlKSAgeworICAgICAgICAvLyBUaGVy
ZSBhcmUgc29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRl
ZCB3aGVuIHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGFk
YXB0IHRoZW0sIGFzIHdlIGRvIGluIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJE
KCkuCisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgQUxQSEE6CisgICAg
ICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkVEIHRvIGJhY2sgR0xfQUxQSEEsIHNvIGRvIGl0
IGhlcmUgYXMgd2VsbC4KKyAgICAgICAgICAgIGZvcm1hdCA9IFJFRDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIC8vIFdlIGFy
ZSB1c2luZyBHTF9SRyB0byBiYWNrIEdMX0xVTUlOQU5DRV9BTFBIQSwgc28gZG8gaXQgaGVyZSBh
cyB3ZWxsLgorICAgICAgICAgICAgZm9ybWF0ID0gUkc7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMg
d2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJp
bWFnZSBzaXplLgorICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlv
ZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmRhdGEpOworICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6
ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ29tcHJl
c3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNp
emVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOworICAgIG1fc3RhdGUudGV4
dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCitQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuQnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87
Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZy
YW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgx
LCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgp
OworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVS
ZW5kZXJidWZmZXIoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VY
VCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBlKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGds
Q3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFE
RVIgOiBHTF9WRVJURVhfU0hBREVSKTsKK30KKworUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xH
ZW5UZXh0dXJlcygxLCAmbyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChvKTsK
KyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
QnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVm
ZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJl
YWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBt
X3N0YXRlLmJvdW5kRHJhd0ZCTykgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVm
ZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCisgICAgICAgIC8vIG9wZXJh
dGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgorICAgICAgICBiaW5kRnJhbWVidWZmZXIoRlJB
TUVCVUZGRVIsIDApOworICAgIH0KKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJh
bWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQcm9n
cmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZv
cm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZy
ZW5kZXJidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9y
bUdMT2JqZWN0IHRleHR1cmUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3Rl
eHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgeworICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUu
Zmlyc3QgPT0gdGV4dHVyZTsKKyAgICB9KTsKKyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0
dXJlKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVtb3ZlQWxsKHRleHR1cmUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcihHQ0dM
ZW51bSBlcnJvcikKK3sKKyAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRv
IHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCB0bworICAgIC8vIHByZXNlcnZlIHRoZSBvcmRlciBv
ZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRvIGdldEVycm9yIHdpbGwgZ2V0CisgICAgLy8gYW55IGVy
cm9ycyBmcm9tIGdsRXJyb3IgYmVmb3JlIHRoZSBlcnJvciB3ZSBhcmUgc3ludGhlc2l6aW5nLgor
ICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fc3ludGhldGljRXJy
b3JzLmFkZChlcnJvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZvcmNl
Q29udGV4dExvc3QoKQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCisgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit7CisgICAgZm9yIChh
dXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5y
ZWN5Y2xlQ29udGV4dCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNw
YXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZv
aWQqIHBpeGVscykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgbV9z
dGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQo
R0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkg
cHJpbWNvdW50KQoreworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFuY2VkQU5H
TEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRw
dHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGdldEV4dGVuc2lvbnMoKS5k
cmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmlt
Y291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRp
dmlzb3IpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShp
bmRleCwgZGl2aXNvcik7Cit9CisKKyNpZiBIQVZFKE9QRU5HTF80KSAmJiBFTkFCTEUoV0VCR0wy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KEdD
R0x1aW50IGluZGV4KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xQcmltaXRpdmVSZXN0YXJ0SW5kZXgoaW5kZXgpOworfQorI2Vu
ZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0g
dGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBsZW5ndGgpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAg
VU5VU0VEX1BBUkFNKGRhdGEpOworICAgIFVOVVNFRF9QQVJBTSh1c2FnZSk7CisgICAgVU5VU0VE
X1BBUkFNKHNyY09mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNyY0RhdGEsIEdDR0x1aW50IHNy
Y09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwor
ICAgIFVOVVNFRF9QQVJBTShkc3RCeXRlT2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oc3JjRGF0
YSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0
aCk7Cit9CisKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRh
cmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGlu
dHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvcHlCdWZmZXJTdWJE
YXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6
ZSk7Cit9CisjZWxzZQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1
YkRhdGEoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyLCBHQ0dMaW50cHRyLCBHQ0dMc2l6
ZWlwdHIpCit7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMU3Bh
bjxHQ0dMdm9pZD4gZGF0YSkKK3sKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9F
U18zKQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBHQ0dMdm9pZCogcHRyID0gOjpnbE1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0LCBkYXRh
LmJ1ZlNpemUsIEdyYXBoaWNzQ29udGV4dEdMOjpNQVBfUkVBRF9CSVQpOworICAgIGlmICghcHRy
KQorICAgICAgICByZXR1cm47CisgICAgbWVtY3B5KGRhdGEuZGF0YSwgcHRyLCBkYXRhLmJ1ZlNp
emUpOworICAgIGlmICghOjpnbFVubWFwQnVmZmVyKHRhcmdldCkpCisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAg
IFVOVVNFRF9QQVJBTShkYXRhKTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworI2VuZGlmCit9CisKKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3Jj
WTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQg
ZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBH
Q0dMZW51bSBmaWx0ZXIpCit7CisgICAgVU5VU0VEX1BBUkFNKHNyY1gwKTsKKyAgICBVTlVTRURf
UEFSQU0oc3JjWTApOworICAgIFVOVVNFRF9QQVJBTShzcmNYMSk7CisgICAgVU5VU0VEX1BBUkFN
KHNyY1kxKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WDApOworICAgIFVOVVNFRF9QQVJBTShkc3RZ
MCk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFgxKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTEpOwor
ICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKKyAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1
cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCit7CisgICAgVU5VU0VEX1BBUkFNKHRh
cmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOworICAgIFVOVVNFRF9QQVJBTSh0
ZXh0dXJlKTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOworICAgIFVOVVNFRF9QQVJBTShsYXll
cik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1
ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50
cykKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oYXR0YWNo
bWVudHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3Vi
RnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0
YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFN
KGF0dGFjaG1lbnRzKTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkp
OworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3Jj
KQoreworICAgIFVOVVNFRF9QQVJBTShzcmMpOworfQorCisjaWYgSEFWRShPUEVOR0xfNCkgfHwg
SEFWRShPUEVOR0xfRVNfMykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVy
bmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
TGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IGRhdGEpCit7CisjaWYgVVNFKE9QRU5HTF9F
UykKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwg
ZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0
KTsKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTShw
bmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZlNpemUpOworICAgIFVOVVNFRF9QQVJBTShwYXJh
bXMpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVz
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZl
bHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMc2l6ZWkgZGVwdGgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVk
Q291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKyNlbHNlCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtLCBH
Q0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPEdDR0xpbnQ+KQoreworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0sIEdDR0xz
aXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NH
TGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCit7Cit9CisjZW5kaWYKKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNF
RF9QQVJBTShsZXZlbCk7CisgICAgVU5VU0VEX1BBUkFNKHhvZmZzZXQpOworICAgIFVOVVNFRF9Q
QVJBTSh5b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oem9mZnNldCk7CisgICAgVU5VU0VEX1BB
UkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOwor
ICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVT
RURfUEFSQU0obmFtZSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3sK
KyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh2MCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7CisgICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAgICBVTlVTRURfUEFSQU0odjEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIpCit7CisgICAgVU5VU0VEX1BB
UkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odjApOworICAgIFVOVVNFRF9QQVJBTSh2
MSk7CisgICAgVU5VU0VEX1BBUkFNKHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOworICAgIFVOVVNFRF9QQVJBTSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKKyAgICBV
TlVTRURfUEFSQU0odjIpOworICAgIFVOVVNFRF9QQVJBTSh2Myk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Cisg
ICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShk
YXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7CisgICAgVU5V
U0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VE
X1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVT
RURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRh
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5V
U0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJh
bnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBV
TlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAg
IFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9z
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShs
b2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFN
KGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJ
NGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xp
bnQgdykKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh4KTsK
KyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHopOworICAgIFVOVVNFRF9Q
QVJBTSh3KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
STRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQor
eworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVp
bnQgaW5kZXgsIEdDR0x1aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50IHosIEdDR0x1aW50IHcp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAg
VU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh6KTsKKyAgICBVTlVTRURfUEFSQU0o
dyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2
KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQorewor
ICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUs
IEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5V
U0VEX1BBUkFNKHNpemUpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RyaWRlKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVp
bnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXJ0KTsKKyAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyAgICBVTlVTRURfUEFSQU0o
Y291bnQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNw
YW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZnMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1
ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZm
ZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1
ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFS
QU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVm
ZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gdmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVO
VVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51bSBidWZm
ZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZm
ZXIpOworICAgIFVOVVNFRF9QQVJBTShkZXB0aCk7CisgICAgVU5VU0VEX1BBUkFNKHN0ZW5jaWwp
OworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVR
dWVyeSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BB
UkFNKHF1ZXJ5KTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
UXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkp
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKK3sK
KyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKHBu
YW1lKTsKKworICAgIHJldHVybiAwOworfQorCitHQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0UXVlcnlPYmplY3R1aShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5LCBHQ0dMZW51bSBw
bmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworICAgIFVOVVNFRF9QQVJBTShwbmFt
ZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2Ft
cGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Cit9CisKK0dDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
KQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5p
dCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQoreworICAgIFVOVVNFRF9QQVJBTSh1bml0KTsK
KyAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCit7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOwor
ICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKQoreworICAg
IFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIFVO
VVNFRF9QQVJBTShwYXJhbSk7Cit9CisKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51
bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFN
KHBuYW1lKTsKKyAgICByZXR1cm4gMC5mOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdD
R0xlbnVtIHBuYW1lKQorCit7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNF
RF9QQVJBTShwbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK0dDR0xzeW5jIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQg
ZmxhZ3MpCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbmRpdGlvbik7CisgICAgVU5VU0VEX1BBUkFN
KGZsYWdzKTsKKworICAgIHJldHVybiAwOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5
bmMpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTeW5jKEdDR0xzeW5jIHN5bmMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMp
OworfQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMo
R0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisgICAg
VU5VU0VEX1BBUkFNKHRpbWVvdXQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBm
bGFncywgR0NHTGludDY0IHRpbWVvdXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAg
IFVOVVNFRF9QQVJBTShmbGFncyk7CisgICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOworfQorCitH
Q0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBH
Q0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3luYyk7CisgICAgVU5VU0VEX1BB
UkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQoreworICAgIHJldHVy
biAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTShpZCk7Cit9
CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRi
YWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCit7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRy
YW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkKK3sK
KyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oaWQpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xl
bnVtIHByaW1pdGl2ZU1vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2ZU1vZGUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygp
Cit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
dmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dy
YW0pOworICAgIFVOVVNFRF9QQVJBTSh2YXJ5aW5ncyk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZl
ck1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9Q
QVJBTShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJh
bnNmb3JtRmVlZGJhY2soKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBv
ZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwor
ICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisgICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworfQorCitWZWN0
b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFt
ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh1bmlm
b3JtTmFtZXMpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPEdDR0xpbnQ+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBw
bmFtZSkKK3sKKyAgICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUo
KSwgMCk7CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKKyAgICBBU1NF
UlQocHJvZ3JhbSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZv
cm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcmVzdWx0LmRh
dGEoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFS
QU0ocG5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworR0NHTHVpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKQoreworICAgIFVOVVNF
RF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrTmFtZSk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0luZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVT
RURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAgIHJldHVybiBlbXB0eVN0cmluZygpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1
aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwor
ICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHVu
aWZvcm1CbG9ja0JpbmRpbmcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQoreworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAg
VU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKKyAgICBVTlVT
RURfUEFSQU0oZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BB
UkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2
ZVVuaWZvcm1CbG9ja2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0lu
ZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQoreworICAgIFVO
VVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgp
OworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0sIEdD
R0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0s
IEdDR0xlbnVtICwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKK3sK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQo
R0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGlu
dCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGlu
dCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdD
R0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
M0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZv
aWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdD
R0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQs
IEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6
ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBH
Q0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGlu
dCwgR0NHTHNpemVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCit7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dM
aW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwg
R0NHTHNpemVpLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwg
R0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwg
R0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikKK3sKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzQU5HTEUoR0NHTGVudW0s
IEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dM
c2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBH
Q0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVs
dGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwg
R0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5j
ZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6
ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
T1BFUkFUSU9OKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2Uy
RFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQg
Ym9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgdW5wYWNrQWxp
Z25tZW50KQoreworICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQgPT0gMSB8fCB1bnBhY2tBbGln
bm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0g
OCk7CisgICAgVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4gemVybzsKKyAgICB1bnNpZ25lZCBz
aXplID0gMDsKKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKKyAgICAgICAgUGl4
ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CisgICAgICAgIHBhcmFtcy5hbGlnbm1lbnQgPSB1bnBhY2tB
bGlnbm1lbnQ7CisgICAgICAgIEdDR0xlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0
ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJhbXMsICZzaXplLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19F
UlJPUikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHplcm8gPSBtYWtlVW5pcXVlQXJy
YXk8dW5zaWduZWQgY2hhcj4oc2l6ZSk7CisgICAgICAgIGlmICghemVybykgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1lbXNldCh6ZXJv
LmdldCgpLCAwLCBzaXplKTsKKyAgICB9CisgICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1ha2VH
Q0dMU3Bhbih6ZXJvLmdldCgpLCBzaXplKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTAzLDYgKzI5NDUsNiBAQCBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbgogICAgIHJldHVy
biByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
fQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYg
IVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXggNmM4MWVh
N2E4ODk1NDBkNTNlMDY1ZDQ1MzRiNDY5NTZmMjBjZmExZi4uNDA4OTJmNmY1YzE1MjVjYjQ0MWIx
YTEyZTJmODY0NDAzMjVmYjhmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgK
QEAgLTI1LDUzICsyNSwxNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShXRUJHTCkK
KyNpZiBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKKyNpbmNsdWRlICJBTkdMRVdlYktp
dEJyaWRnZS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4K
ICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5oIgotI2luY2x1ZGUgIklP
U3VyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ0EpCi0jaW5jbHVkZSAiUGxhdGZvcm1DQUxh
eWVyLmgiCi0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJBTkdMRVV0aWxpdGll
cy5oIgotI2Vsc2UKLSNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgotI2luY2x1ZGUgIkV4
dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0j
aW5jbHVkZSAiU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdC5oIgotI2VuZGlmCi0KLS8v
IEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBhdm9pZCB0aGUgbmFtZSBjb25mbGljdGlvbiBm
b3IgTk9fRVJST1IuCi0jaWYgUExBVEZPUk0oV0lOKQotI3VuZGVmIE5PX0VSUk9SCi0jZWxpZiBQ
TEFURk9STShHVEspCi0vLyBUaGlzIGRlZmluZSBpcyBmcm9tIHRoZSBYMTEgaGVhZGVycywgYnV0
IGl0J3MgdXNlZCBiZWxvdywgc28gd2UgbXVzdCB1bmRlZmluZSBpdC4KLSN1bmRlZiBWRVJTSU9O
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JK
Q19DTEFTUyBXZWJHTExheWVyOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQotCiAjaWYgVVNF
KE5JQ09TSUEpCiBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBHQ0dMTGF5ZXI7CkBAIC04MCw5
ICs0NCw3IEBAIGNsYXNzIEdDR0xMYXllcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RXh0ZW5zaW9uc0dMOwotI2lmIFVTRShBTkdMRSkKLWNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOwot
I2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogY2xhc3MgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM7CiAjZWxpZiBVU0UoT1BFTkdMKQogY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdM
OwpAQCAtOTcsNTAgKzU5LDE0IEBAIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXll
cjsKIAogdHlwZWRlZiBIYXNoTWFwPENTdHJpbmcsIHVpbnQ2NF90PiBTaGFkZXJOYW1lSGFzaDsK
IAorLy8gQmFzZSBjbGFzcyBmb3IgR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dHMgdGhhdCB1c2Ug
T3BlbkdMIG9yIE9wZW5HTCBFUy4KIGNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMCiB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKTsKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0jaWYgVVNFKEFOR0xFKQotICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0OwotICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgcGxhdGZvcm1Db25maWcoKSBjb25zdDsKLSAg
ICBHQ0dMZW51bSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOwotICAgIHN0YXRpYyBHQ0dM
ZW51bSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dM
ZW51bSBkcmF3aW5nVGFyZ2V0KTsKLSAgICBzdGF0aWMgR0NHTGludCBFR0xEcmF3aW5nQnVmZmVy
VGV4dHVyZVRhcmdldEZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCk7Ci0g
ICAgZW51bSBjbGFzcyBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciB7Ci0gICAgICAgIC8v
IFJlbGVhc2VzIGN1cnJlbnQgY29udGV4dCBhZnRlciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBj
YWxscyBkb25lIGluIHRoZSB0aHJlYWQuCi0gICAgICAgIFJlbGVhc2VDdXJyZW50Q29udGV4dCwK
LSAgICAgICAgLy8gUmVsZWFzZXMgYWxsIHRocmVhZCByZXNvdXJjZXMgYWZ0ZXIgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgotICAgICAgICBSZWxlYXNl
VGhyZWFkUmVzb3VyY2VzLAotICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBT
aG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCi0gICAg
ICAgIC8vIGJlZW4gcmVsZWFzZWQuCi0gICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRS
ZXNvdXJjZXMKLSAgICB9OwotICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMo
UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOwotI2VuZGlmCi0KLSAgICAvLyBXaXRoIG11
bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4K
LSAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7Ci0KLSAgICAvLyBHZXQgYW4gYXR0cmlidXRlIGxv
Y2F0aW9uIHdpdGhvdXQgY2hlY2tpbmcgdGhlIG5hbWUgLT4gbWFuZ2xlZG5hbWUgbWFwcGluZy4K
LSAgICBpbnQgZ2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgLy8gQ29tcGlsZSBhIHNoYWRlciB3aXRob3V0
IGdvaW5nIHRocm91Z2ggQU5HTEUuCi0gICAgdm9pZCBjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRm
b3JtR0xPYmplY3QpOwotCi0gICAgLy8gRXF1aXZhbGVudCB0byA6OmdsVGV4SW1hZ2UyRCgpLiBB
bGxvd3MgcGl4ZWxzPT0wIHdpdGggbm8gYWxsb2NhdGlvbi4KLSAgICB2b2lkIHRleEltYWdlMkRE
aXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwotCi0j
aWYgIVVTRShBTkdMRSkKLSAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0w
IGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KLSAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KLSAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1l
bnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNldHRpbmcuCiAgICAgYm9vbCB0ZXhJbWFnZTJE
UmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCBhbGlnbm1lbnQg
PSA0KTsKLSNlbmRpZgogCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3QgZmluYWw7
Ci0KICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBFbnRyeSBwb2ludHMgZm9yIFdlYkdMLgog
ICAgIC8vCkBAIC0yMDYsOSArMTMyLDcgQEAgcHVibGljOgogICAgIEdDR0xpbnQ2NCBnZXRJbnRl
Z2VyNjQoR0NHTGVudW0gcG5hbWUpIGZpbmFsOwogICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRp
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CiAgICAgR0NHTGludCBnZXRQ
cm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsK
LSNpZiAhVVNFKEFOR0xFKQogICAgIHZvaWQgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVl
KTsKLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQogICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKICAgICBTdHJpbmcgZ2V0VW5tYW5nbGVkSW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0WzJdLCBHQ0dMc2l6ZWksIGNvbnN0IFN0cmluZyYpOwogICAgIEdDR0xp
bnQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lKSBmaW5hbDsKQEAgLTI4NiwxMCArMjEwLDggQEAgcHVibGljOgogCiAgICAgdm9pZCB1c2VQ
cm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwogICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwotI2lmICFVU0UoQU5HTEUpCiAgICAgYm9vbCBjaGVj
a1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1H
TE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7CiAgICAgYm9vbCBwcmVjaXNpb25zTWF0Y2go
UGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRT
aGFkZXIpIGNvbnN0OwotI2VuZGlmCiAKICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NH
THVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsK
QEAgLTMxNywxMCArMjM5LDggQEAgcHVibGljOgogCiAgICAgLy8gPT09PT09PT09PSBXZWJHTDIg
ZW50cnkgcG9pbnRzLgogCi0jaWYgIVVTRShBTkdMRSkKICAgICB2b2lkIGJ1ZmZlckRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwgR0NHTHVpbnQg
c3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpOwogICAgIHZvaWQgYnVmZmVyU3ViRGF0YShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgZHN0Qnl0ZU9mZnNldCwgY29uc3Qgdm9pZCogc3JjRGF0
YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpOwotI2VuZGlmCiAgICAgdm9p
ZCBjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRh
cmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dM
c2l6ZWlwdHIgc2l6ZSkgZmluYWw7CiAKICAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZp
bmFsOwpAQCAtNDU2LDkgKzM3Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW1pdGl2ZVJlc3Rh
cnRJbmRleChHQ0dMdWludCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZv
aWQgZGlzcGxheVdhc1JlY29uZmlndXJlZCgpOwotI2VuZGlmCiAKICAgICB2b2lkIHNldENvbnRl
eHRWaXNpYmlsaXR5KGJvb2wpIGZpbmFsOwogCkBAIC00ODQsMTIgKzQwMSw4IEBAIHB1YmxpYzoK
ICAgICAvLyBhbGwgbWV0aG9kcyBpdCBjb250YWlucyBtYXkgbmVjZXNzYXJpbHkgYmUgc3VwcG9y
dGVkIG9uIHRoZQogICAgIC8vIGN1cnJlbnQgaGFyZHdhcmUuIE11c3QgY2FsbCBFeHRlbnNpb25z
R0w6OnN1cHBvcnRzKCkgdG8KICAgICAvLyBkZXRlcm1pbmUgdGhpcy4KLSNpZiAhVVNFKEFOR0xF
KQogICAgIC8vIFVzZSBjb3ZhcmlhbnQgcmV0dXJuIHR5cGUgZm9yIE9QRU5HTC9PUEVOR0xfRVMK
ICAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIGdldEV4dGVuc2lvbnMoKSBmaW5hbDsKLSNl
bHNlCi0gICAgRXh0ZW5zaW9uc0dMJiBnZXRFeHRlbnNpb25zKCkgZmluYWw7Ci0jZW5kaWYKIAog
ICAgIHZvaWQgc2ltdWxhdGVFdmVudEZvclRlc3RpbmcoU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5n
KSBvdmVycmlkZTsKIApAQCAtNDk3LDI4ICs0MTAsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBy
ZXBhcmVGb3JEaXNwbGF5KCkgb3ZlcnJpZGU7CiAKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShB
VkZPVU5EQVRJT04pCi0gICAgR3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOwotI2Vu
ZGlmCi0KLSAgICBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUs
IEdyYXBoaWNzQ29udGV4dCYpOwotCi0jaWYgVVNFKEFOR0xFKQotICAgIGNvbnN0ZXhwciBzdGF0
aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQ
TEFZOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZl
RGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5
cGUsIC0xKTsKLSAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQ
ZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwot
I2VuZGlmCi0jZW5kaWYKLQogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
R3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47Ci0gICAgRUdM
RGlzcGxheSBtX2Rpc3BsYXlPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTCBtX2NvbnRleHRPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTENvbmZpZyBtX2NvbmZpZ09iaiB7IG51bGxwdHIgfTsKLSNlbmRpZgorCiAgICAgR0NH
THVpbnQgbV90ZXh0dXJlIHsgMCB9OwogCiBwcml2YXRlOgpAQCAtNTQ3LDI0ICs0NDEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJ
bnRSZWN0JiA9IEludFJlY3QoKSk7CiAgICAgdm9pZCBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZm
ZXJJZk5lZWRlZChHQ0dMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKIAotI2lmIFVTRShBTkdMRSkKLSAgICBib29sIHJlc2hhcGVEaXNwbGF5
QnVmZmVyQmFja2luZygpOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYm9vbCBh
bGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpOwotICAgIGJvb2wgYmluZERpc3Bs
YXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGJhY2tpbmcsIHZvaWQq
IHBidWZmZXIpOwotICAgIHN0YXRpYyBib29sIG1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0xEaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKTsKLSAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOwotI2VuZGlmCi0jaWYgVVNFKEFOR0xFKQot
ICAgIC8vIFJldHVybnMgZmFsc2UgaWYgY29udGV4dCBzaG91bGQgYmUgbG9zdCBkdWUgdG8gdGlt
ZW91dC4KLSAgICBib29sIHdhaXRBbmRVcGRhdGVPbGRlc3RGcmFtZSgpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKLQotICAgIC8vIFBsYXRmb3JtIHNwZWNpZmljIGJlaGF2aW9yIGZvciByZWxlYXNlUmVz
b3VyY2VzKCk7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2Vz
KCk7Ci0jZW5kaWYKIAotI2lmICFVU0UoQU5HTEUpCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgVW5pcXVlUmVmPHNoOjpTaGFkZXJWYXJpYWJsZT4+IFNoYWRlclN5bWJvbE1hcDsKIAogICAg
IHN0cnVjdCBTaGFkZXJTb3VyY2VFbnRyeSB7CkBAIC02MzEsMTIgKzUwOCw4IEBAIHByaXZhdGU6
CiAgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VN
YXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkZXJOYW1lSGFzaD4gbmFt
ZUhhc2hNYXBGb3JTaGFkZXJzOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAKLSNpZiBVU0UoQU5H
TEUpCi0gICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxFeHRlbnNpb25zR0xBTkdMRT4gbV9leHRlbnNpb25zOwotI2VsaWYgVVNFKE9QRU5HTF9F
UykKKyNpZiBVU0UoT1BFTkdMX0VTKQogICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVu
R0xFUzsKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xPcGVuR0xFUz4gbV9leHRlbnNpb25zOwpAQCAtNjQ4
LDkgKzUyMSw3IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8VmVjdG9yPGZsb2F0Pj4gbV92ZXJ0
ZXhBcnJheTsKIAotI2lmICFVU0UoQU5HTEUpCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21w
aWxlcjsKLSNlbmRpZgogCiAgICAgR0NHTHVpbnQgbV9mYm8geyAwIH07CiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQpAQCAtNjU4LDU0ICs1MjksMTQgQEAgcHJpdmF0ZToKICAgICBHQ0dM
dWludCBtX2ludGVybWVkaWF0ZVRleHR1cmUgeyAwIH07CiAjZW5kaWYKIAotI2lmICFVU0UoQU5H
TEUpICYmIFVTRShPUEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKICAgICBHQ0dMdWludCBt
X2RlcHRoQnVmZmVyIHsgMCB9OwogICAgIEdDR0x1aW50IG1fc3RlbmNpbEJ1ZmZlciB7IDAgfTsK
ICNlbmRpZgogICAgIEdDR0x1aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9OwogCiAgICAg
R0NHTHVpbnQgbV9pbnRlcm5hbENvbG9yRm9ybWF0IHsgMCB9OwotI2lmIFVTRShBTkdMRSkKLSAg
ICBHQ0dMdWludCBtX2ludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0IHsgMCB9OwotI2VuZGlmCi0g
ICAgc3RydWN0IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUgewotICAgICAgICBHQ0dMdWludCBib3Vu
ZFJlYWRGQk8geyAwIH07Ci0gICAgICAgIEdDR0x1aW50IGJvdW5kRHJhd0ZCTyB7IDAgfTsKLSAg
ICAgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRTAgfTsKLQotICAgICAgICB1c2luZyBCb3VuZFRleHR1cmVNYXAgPSBIYXNoTWFwPEdDR0xl
bnVtLAotICAgICAgICAgICAgc3RkOjpwYWlyPEdDR0x1aW50LCBHQ0dMZW51bT4sCi0gICAgICAg
ICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKLSAgICAgICAgICAgIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LAotICAgICAgICAgICAgUGFpckhhc2hUcmFpdHM8V1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+PgotICAgICAgICA+OwotICAgICAgICBCb3Vu
ZFRleHR1cmVNYXAgYm91bmRUZXh0dXJlTWFwOwotICAgICAgICBHQ0dMdWludCBjdXJyZW50Qm91
bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gYm91bmRUZXh0dXJlKGFjdGl2ZVRleHR1cmVVbml0
KTsgfQotICAgICAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1
cmVNYXAuZmluZCh0ZXh0dXJlVW5pdCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91
bmRUZXh0dXJlTWFwLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFs
dWUuZmlyc3Q7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQogCi0gICAgICAgIEdD
R0x1aW50IGN1cnJlbnRCb3VuZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGFyZ2V0KGFj
dGl2ZVRleHR1cmVVbml0KTsgfQotICAgICAgICBHQ0dMZW51bSBib3VuZFRhcmdldChHQ0dMZW51
bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBpdGVyYXRv
ciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1cmVVbml0KTsKLSAgICAgICAgICAgIGlmIChp
dGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBH
Q0dMdWludCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGJvdW5kVGV4dHVyZU1hcC5zZXQodGV4dHVyZVVuaXQsIHN0ZDo6bWFrZV9wYWlyKHRleHR1cmUs
IHRhcmdldCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdXNpbmcgVGV4dHVyZVNlZWRDb3VudCA9
IEhhc2hDb3VudGVkU2V0PEdDR0x1aW50LCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4+OwotICAgICAgICBUZXh0dXJlU2VlZENv
dW50IHRleHR1cmVTZWVkQ291bnQ7Ci0gICAgfTsKIAogICAgIEdyYXBoaWNzQ29udGV4dEdMU3Rh
dGUgbV9zdGF0ZTsKIApAQCAtNzE0LDE2ICs1NDUsNiBAQCBwcml2YXRlOgogICAgIEdDR0x1aW50
IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CiAgICAgR0NHTHVpbnQgbV9t
dWx0aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OwogCi0jaWYgVVNFKEFOR0xFKQotICAgIC8vIEZv
ciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCi0gICAg
R0NHTHVpbnQgbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIHsgMCB9OwotICAgIC8vIEF0
dGFjaGVzIG1fdGV4dHVyZSB3aGVuIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBu
b24temVyby4KLSAgICBHQ0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsK
LSAgICAvLyBRdWVyaWVkIGF0IGRpc3BsYXkgc3RhcnR1cC4KLSAgICBFR0xpbnQgbV9kcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldCB7IC0xIH07Ci0KLSNlbmRpZgotCiAgICAgLy8gRXJyb3JzIHJh
aXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAgIExpc3RIYXNoU2V0PEdDR0xlbnVtPiBt
X3N5bnRoZXRpY0Vycm9yczsKIApAQCAtNzQ0LDI5ICs1NjUsOCBAQCBwcml2YXRlOgogI2lmIFVT
RShDQUlSTykKICAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fdmFvIHsgMCB9OwogI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICAvLyBCYWNraW5nIHN0b3JlIGZvciB0aGUgdGhlIGJ1ZmZl
ciB3aGljaCBpcyBldmVudHVhbGx5IHVzZWQgZm9yIGRpc3BsYXkuCi0gICAgLy8gV2hlbiBwcmVz
ZXJ2ZURyYXdpbmdCdWZmZXIgPT0gZmFsc2UsIHRoaXMgaXMgdGhlIGRyYXdpbmcgYnVmZmVyIGJh
Y2tpbmcgc3RvcmUuCi0gICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gdHJ1ZSwg
dGhpcyBpcyBibGl0dGVkIHRvIGR1cmluZyBkaXNwbGF5IHByZXBhcmUuCi0gICAgc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gbV9kaXNwbGF5QnVmZmVyQmFja2luZzsKLSAgICB2b2lkKiBtX2Rp
c3BsYXlCdWZmZXJQYnVmZmVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFD
KQotICAgIGJvb2wgbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbiB7IGZhbHNl
IH07Ci0gICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdCBtX2hpZ2hQZXJmb3JtYW5j
ZUdQVVJlcXVlc3Q7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJ
T04pCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRT4gbV9jdjsK
LSNlbmRpZgotI2lmIFVTRShBTkdMRSkKLSAgICBib29sIG1fdXNlRmVuY2VTeW5jRm9yRGlzcGxh
eVJhdGVMaW1pdCA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heFBlbmRp
bmdGcmFtZXMgPSAzOwotICAgIHNpemVfdCBtX29sZGVzdEZyYW1lQ29tcGxldGlvbkZlbmNlIHsg
MCB9OwotICAgIFNjb3BlZEdMRmVuY2UgbV9mcmFtZUNvbXBsZXRpb25GZW5jZXNbbWF4UGVuZGlu
Z0ZyYW1lc107Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwZDZkMzY3ZjFmOTU0NDViMGE3OWMxNzRkYTg4YTNl
ZTUxY2I5Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xDb21tb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjg4NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQotCi0jaWYgVVNFKE9QRU5H
TF9FUykKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5oIgotI2Vsc2UKLSNpbmNsdWRl
ICJFeHRlbnNpb25zR0xPcGVuR0wuaCIKLSNlbmRpZgotI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJp
ZGdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgIlRlbXBv
cmFyeU9wZW5HTFNldHRpbmcuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4KLSNpbmNs
dWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotI2luY2x1ZGUg
PHd0Zi9VbmlxdWVBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgot
Ci0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5U2hpbXMuaCIKLSNlbGlmIFVTRShP
UEVOR0xfRVMpCi0jaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgotI2VsaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFz
aCo+JiBnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKQotewotICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFt
ZUhhc2gqPiogc2hhcmVkTmFtZUhhc2g7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtd
IHsKLSAgICAgICAgc2hhcmVkTmFtZUhhc2ggPSBuZXcgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFt
ZUhhc2gqPjsKLSAgICB9KTsKLQotICAgIHJldHVybiAqc2hhcmVkTmFtZUhhc2g7Ci19Ci0KLXN0
YXRpYyB2b2lkIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihTaGFkZXJOYW1lSGFzaCog
c2hhZGVyTmFtZUhhc2gpCi17Ci0gICAgKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigp
ID0gc2hhZGVyTmFtZUhhc2g7Ci19Ci0KLS8vIEhhc2ggZnVuY3Rpb24gdXNlZCBieSB0aGUgQU5H
TEUgdHJhbnNsYXRvci9jb21waWxlciB0byBkbwotLy8gc3ltYm9sIG5hbWUgbWFuZ2xpbmcuIFNp
bmNlIHRoaXMgaXMgYSBzdGF0aWMgbWV0aG9kLCBiZWZvcmUKLS8vIGNhbGxpbmcgY29tcGlsZVNo
YWRlciB3ZSBzZXQgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyCi0vLyB0byBwb2ludCB0byB0
aGUgbWFwIGtlcHQgYnkgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuCi0KLXN0YXRpYyB1aW50NjRfdCBuYW1lSGFzaEZvclNoYWRlcihjb25zdCBjaGFyKiBu
YW1lLCBzaXplX3QgbGVuZ3RoKQotewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIENTdHJpbmcgbmFtZUFzQ1N0cmluZyA9IENTdHJpbmcobmFtZSk7Ci0KLSAgICAv
LyBMb29rIHVwIG5hbWUgaW4gb3VyIGxvY2FsIG1hcC4KLSAgICBTaGFkZXJOYW1lSGFzaComIGN1
cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlciA9ICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIoKTsKLSAgICBTaGFkZXJOYW1lSGFzaDo6aXRlcmF0b3IgZmluZFJlc3VsdCA9IGN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlci0+ZmluZChuYW1lQXNDU3RyaW5nKTsKLSAgICBpZiAoZmluZFJl
c3VsdCAhPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmVuZCgpKQotICAgICAgICByZXR1
cm4gZmluZFJlc3VsdC0+dmFsdWU7Ci0KLSAgICB1bnNpZ25lZCBoYXNoVmFsdWUgPSBuYW1lQXND
U3RyaW5nLmhhc2goKTsKLQotICAgIC8vIENvbnZlcnQgdGhlIDMyLWJpdCBoYXNoIGZyb20gQ1N0
cmluZzo6aGFzaCBpbnRvIGEgNjQtYml0IHJlc3VsdAotICAgIC8vIGJ5IHNoaWZ0aW5nIHRoZW4g
YWRkaW5nIHRoZSBzaXplIG9mIG91ciB0YWJsZS4gT3ZlcmZsb3cgd291bGQKLSAgICAvLyBvbmx5
IGJlIGEgcHJvYmxlbSBpZiB3ZSdyZSBhbHJlYWR5IGhhc2hpbmcgdG8gdGhlIHNhbWUgdmFsdWUg
KGFuZAotICAgIC8vIHdlJ3JlIGhvcGluZyB0aGF0IG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZSBj
b250ZXh0IHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSB0aGF0IG1hbnkgc3ltYm9scykuCi0KLSAgICB1
aW50NjRfdCByZXN1bHQgPSBoYXNoVmFsdWU7Ci0gICAgcmVzdWx0ID0gKHJlc3VsdCA8PCAzMikg
KyAoY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5zaXplKCkgKyAxKTsKLQotICAgIGN1cnJl
bnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2V0KG5hbWVBc0NTdHJpbmcsIHJlc3VsdCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRh
dGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQot
ewotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgRXh0ZW5zaW9u
c0dMT3BlbkdMQ29tbW9uJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAgIGlmIChh
dHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5h
YmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOwotICAgICAgICAgICAgLy8gRm9yY2Ug
ZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgotICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVl
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKLSAg
ICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgIH0KLSAgICBpZiAoYXR0cnMu
YW50aWFsaWFzICYmICFtX2lzRm9yV2ViR0wyKSB7Ci0gICAgICAgIGlmICghZXh0ZW5zaW9ucy5z
dXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkgewotICAgICAgICAg
ICAgYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRDb250ZXh0QXR0cmli
dXRlcyhhdHRycyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1
cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwotICAgIH0KLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQotewotICAg
IGlmIChtX2xheWVyQ29tcG9zaXRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSNpZiAhVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihH
TF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNj
b3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKLSNlbmRpZgotCi0gICAgaWYgKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KCk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgc3RkOjpz
d2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgc3RkOjpzd2FwKG1fdGV4
dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJE
LCBtX3RleHR1cmUsIDApOwotICAgIGdsRmx1c2goKTsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJv
dW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKG1fc3RhdGUuYm91
bmREcmF3RkJPICE9IG1fZmJvKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGVs
c2UKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIDo6Z2xBY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUwKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV9zdGF0ZS5ib3VuZFRhcmdldChHTF9URVhUVVJFMCkgPT0gR0xfVEVYVFVSRV8yRCA/IG1fc3Rh
dGUuYm91bmRUZXh0dXJlKEdMX1RFWFRVUkUwKSA6IDApOwotICAgIDo6Z2xBY3RpdmVUZXh0dXJl
KG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQpOwotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKG1fc3RhdGUuYm91bmREcmF3
RkJPICE9IG1fZmJvKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIDo6Z2xGbHVz
aCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQotewotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8g
PSBmYWxzZTsKLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKLSAgICAg
ICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAg
ICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJU
KG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICAgICAg
aWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKSB7Ci0gICAgICAgICAgICBtdXN0UmVz
dG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICB9Ci0gICAgfQotICAg
IGF1dG8gcmVzdWx0ID0gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOwotICAgIGlmIChtdXN0
UmVzdG9yZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0
aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVp
Z2h0ID09IG1fY3VycmVudEhlaWdodCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHdp
ZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOwotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICBtX2N1cnJl
bnRXaWR0aCA9IHdpZHRoOwotICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKLQotICAgIHZh
bGlkYXRlQXR0cmlidXRlcygpOwotCi0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRT
Y2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNl
dHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwotICAgIAotICAgIGJvb2wg
bXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKLQot
ICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgotICAgIEdMZmxvYXQgY2xlYXJD
b2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBHTGludCBjbGVhclN0
ZW5jaWwgPSAwOwotICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVF
LCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKLSAgICBHTHVpbnQgc3Rl
bmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZmOwotICAg
IEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKLSAgICA6OmdsR2V0
RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKLSAgICA6OmdsQ2xlYXJD
b2xvcigwLCAwLCAwLCAwKTsKLSAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNL
LCBjb2xvck1hc2spOwotICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRSk7Ci0KLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQot
ICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICA6OmdsR2V0RmxvYXR2KEdMX0RFUFRIX0NM
RUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKDEpOwotICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVN
QVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKLSAgICAg
ICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgfQotICAgIGlmIChhdHRy
cy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFLCAmY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKLSAgICAg
ICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0
PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVO
Q0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNr
QmFjaykpOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZm
ZmZmZik7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIDB4ZmZmZmZm
ZmYpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOwotICAgIH0K
LQotICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOwotCi0gICAgOjpnbENsZWFyQ29sb3IoY2xlYXJD
b2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7Ci0g
ICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJd
LCBjb2xvck1hc2tbM10pOwotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKLSAgICAgICAgOjpnbERl
cHRoTWFzayhkZXB0aE1hc2spOwotICAgIH0KLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAg
ICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7Ci0gICAgICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7Ci0gICAgfQotCi0gICAgaWYg
KG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotCi0gICAgYXV0
byBlcnJvciA9IDo6Z2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvciAhPSBHTF9OT19FUlJPUikg
ewotICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBPcGVuR0wgZXJyb3IgZHVyaW5n
IEdyYXBoaWNzQ29udGV4dEdMIGJ1ZmZlciBpbml0aWFsaXphdGlvbiAoJWQpLiIsIGVycm9yKTsK
LSAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgOjpnbEZsdXNoKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdM
T2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX3NoYWRlclNvdXJj
ZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VN
YXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKLSAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRy
eSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7Ci0gICAgY29u
c3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRT
aGFkZXIpLT52YWx1ZTsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6U2hhZGVyVmFyaWFibGU+
IGNvbWJpbmVkVmFyeWluZ3M7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgOiB2
ZXJ0ZXhFbnRyeS52YXJ5aW5nTWFwKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgc3ltYm9sTmFt
ZSA9IHZlcnRleFN5bWJvbC5rZXk7Ci0gICAgICAgIC8vIFRoZSB2YXJ5aW5nIG1hcCBpbmNsdWRl
cyB2YXJpYWJsZXMgZm9yIGVhY2ggaW5kZXggb2YgYW4gYXJyYXkgdmFyaWFibGUuCi0gICAgICAg
IC8vIFdlIG9ubHkgd2FudCBhIHNpbmdsZSB2YXJpYWJsZSB0byByZXByZXNlbnQgdGhlIGFycmF5
LgotICAgICAgICBpZiAoc3ltYm9sTmFtZS5lbmRzV2l0aCgiXSIpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgLy8gRG9uJ3QgY291bnQgYnVpbHQgaW4gdmFyeWluZ3MuCi0gICAg
ICAgIGlmIChzeW1ib2xOYW1lID09ICJnbF9GcmFnQ29vcmQiIHx8IHN5bWJvbE5hbWUgPT0gImds
X0Zyb250RmFjaW5nIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Qb2ludENvb3JkIikKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50U3ltYm9sID0gZnJh
Z21lbnRFbnRyeS52YXJ5aW5nTWFwLmZpbmQoc3ltYm9sTmFtZSk7Ci0gICAgICAgIGlmIChmcmFn
bWVudFN5bWJvbCAhPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAuZW5kKCkpCi0gICAgICAgICAg
ICBjb21iaW5lZFZhcnlpbmdzLmFkZChzeW1ib2xOYW1lLCBmcmFnbWVudFN5bWJvbC0+dmFsdWUp
OwotICAgIH0KLQotICAgIHNpemVfdCBudW1WYXJ5aW5ncyA9IGNvbWJpbmVkVmFyeWluZ3Muc2l6
ZSgpOwotICAgIGlmICghbnVtVmFyeWluZ3MpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
c3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiB2YXJpYWJsZXM7Ci0gICAgdmFyaWFibGVz
LnJlc2VydmUoY29tYmluZWRWYXJ5aW5ncy5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYg
dmFyeWluZ1N5bWJvbCA6IGNvbWJpbmVkVmFyeWluZ3MudmFsdWVzKCkpCi0gICAgICAgIHZhcmlh
Ymxlcy5wdXNoX2JhY2sodmFyeWluZ1N5bWJvbCk7Ci0KLSAgICBHQ0dMaW50IG1heFZhcnlpbmdW
ZWN0b3JzID0gMDsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIDo6Z2xHZXRJbnRlZ2VydihNQVhf
VkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwotI2Vsc2UKLSAgICBpZiAobV9p
c0ZvcldlYkdMMikKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX1ZFQ1RP
UlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEdDR0xpbnQgbWF4
VmFyeWluZ0Zsb2F0cyA9IDA7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlO
R19GTE9BVFMsICZtYXhWYXJ5aW5nRmxvYXRzKTsKLSAgICAgICAgbWF4VmFyeWluZ1ZlY3RvcnMg
PSBtYXhWYXJ5aW5nRmxvYXRzIC8gNDsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gc2g6OkNo
ZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5nVmVjdG9ycywgdmFyaWFi
bGVzKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lzaW9uc01hdGNo
KFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50
U2hhZGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2
ZXJ0ZXhTaGFkZXIpKTsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJh
Z21lbnRTaGFkZXIpKTsKLSAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7Ci0gICAgY29uc3QgYXV0byYgZnJhZ21l
bnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsK
LQotICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6R0xlbnVtPiB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25N
YXA7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdmVydGV4RW50cnkudW5pZm9ybU1h
cCkgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVl
LmdldCgpLm1hcHBlZE5hbWU7Ci0gICAgICAgIHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5hZGQo
U3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSksIGVudHJ5LnZh
bHVlLmdldCgpLnByZWNpc2lvbik7Ci0gICAgfQotCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbnRy
eSA6IGZyYWdtZW50RW50cnkudW5pZm9ybU1hcCkgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7Ci0gICAgICAgIGNv
bnN0IGF1dG8mIHZlcnRleFN5bWJvbCA9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5maW5kKFN0
cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpKTsKLSAgICAgICAg
aWYgKHZlcnRleFN5bWJvbCAhPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZW5kKCkgJiYgdmVy
dGV4U3ltYm9sLT52YWx1ZSAhPSBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24pCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKLSAgICA6OmdsQWN0aXZlVGV4
dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNo
U2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIp
Ci17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKLSAgICA6OmdsQXR0YWNoU2hhZGVy
KHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBtYXBw
ZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRU
UklCVVRFLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJMb2NhdGlvbiBpcyBt
YXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5k
YXRhKCkpOwotICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG1hcHBl
ZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEdMdWludCBmYm87Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgZmJvID0g
YnVmZmVyOwotICAgIGVsc2UKLSAgICAgICAgZmJvID0gKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50
aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKLSAgICBBU1NFUlQodGFyZ2V0ID09
IEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9z
dGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8p
IHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7Ci0gICAgICAg
IG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBmYm87Ci0gICAg
fQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdD
R0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCB0ZXh0dXJlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZl
VGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdl
dCwgdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29s
b3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NH
TGNsYW1wZiBhbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVu
dW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdD
R0xlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1v
ZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5j
KEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRnVuYyhzZmFj
dG9yLCBkZmFjdG9yKTsKLX0gICAgICAgCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dM
ZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRl
KHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRy
IHNpemUsIEdDR0xlbnVtIHVzYWdlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwg
dXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3Qgdm9pZD4gZGF0YSwgR0NHTGVudW0gdXNhZ2Up
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSwgdXNhZ2Up
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBk
YXRhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIGRh
dGEuZGF0YSk7Ci19Ci0KLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0KLSAgICBy
ZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFt
cGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENsZWFyQ29sb3IociwgZywg
YiwgYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRm
aWVsZCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xDbGVhcihtYXNrKTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NHTGludCBzKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xDbGVhclN0ZW5jaWwocyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVh
biBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBU
dXJuIG9uIG5hbWUgbWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBoYXNoaW5nIHdv
cmtzLCB3ZQotICAgIC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1hcCBvd25lZCBi
eSB0aGlzIGNvbnRleHQuCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0g
bV9jb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICBTaEhhc2hGdW5jdGlvbjY0IHByZXZpb3Vz
SGFzaEZ1bmN0aW9uID0gQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOwotICAgIEFOR0xFUmVz
b3VyY2VzLkhhc2hGdW5jdGlvbiA9IG5hbWVIYXNoRm9yU2hhZGVyOwotCi0gICAgaWYgKCFuYW1l
SGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VV
bmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7Ci0gICAgbV9jb21waWxlci5zZXRSZXNv
dXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3Vy
Y2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIp
OwotCi0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0gcHJldmlvdXNIYXNoRnVuY3Rp
b247Ci0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgIHNl
dEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsKLQotICAgIGlmICghdHJhbnNs
YXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3Qg
Q1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNl
LnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRl
ZFNoYWRlckNTdHJpbmcuZGF0YSgpOwotICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0g
dHJhbnNsYXRlZFNoYWRlckNTdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBMT0coV2ViR0wsICItLS0g
YmVnaW4gb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIG9yaWdpbmFsIHNo
YWRlciBzb3VyY2UgLS0tXG4iLCBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51dGY4KCkuZGF0YSgp
KTsKLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0t
LVxuJXNcbi0tLSBlbmQgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLSIsIHRyYW5zbGF0ZWRT
aGFkZXJQdHIpOwotCi0gICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVk
U2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7Ci0gICAgCi0gICAgOjpnbENvbXBp
bGVTaGFkZXIoc2hhZGVyKTsKLSAgICAKLSAgICBpbnQgY29tcGlsZVN0YXR1czsKLSAgICAKLSAg
ICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMp
OwotCi0gICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0
LT52YWx1ZTsKLQotICAgIC8vIFBvcHVsYXRlIHRoZSBzaGFkZXIgbG9nCi0gICAgR0xpbnQgbGVu
Z3RoID0gMDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgs
ICZsZW5ndGgpOwotCi0gICAgaWYgKGxlbmd0aCkgewotICAgICAgICBHTHNpemVpIHNpemUgPSAw
OwotICAgICAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAgICAgIDo6Z2xHZXRT
aGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAg
ICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07Ci0gICAgICAg
IGVudHJ5LmxvZyA9IGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8u
ZGF0YSgpLCBzaXplKSk7Ci0gICAgfQotCi0gICAgaWYgKGNvbXBpbGVTdGF0dXMgIT0gR0xfVFJV
RSkgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIExPRyhXZWJHTCwg
IkVycm9yOiBzaGFkZXIgdHJhbnNsYXRvciBwcm9kdWNlZCBhIHNoYWRlciB0aGF0IE9wZW5HTCB3
b3VsZCBub3QgY29tcGlsZS4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0g
ICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBTaGFkZXJTb3VyY2VF
bnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsK
LQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0K
LSAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50cnkuc291cmNlLnV0
ZjgoKTsKLSAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJTb3VyY2VDU3Ry
aW5nLmRhdGEoKTsKLSAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0
cmluZy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBkaXJlY3Qgc2hhZGVy
IHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuIiwgc2hh
ZGVyU291cmNlUHRyKTsKLQotICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVy
U291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKLQotICAgIDo6Z2xDb21waWxlU2hhZGVy
KHNoYWRlcik7Ci0KLSAgICBpbnQgY29tcGlsZVN0YXR1czsKLQotICAgIDo6Z2xHZXRTaGFkZXJp
dihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAgICBpZiAoY29t
cGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7Ci0gICAgICAgIGVudHJ5LmlzVmFsaWQgPSB0cnVlOwot
ICAgICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIHN1Y2NlZWRl
ZC4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIGZhaWxl
ZC4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygp
OwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3
RkJPKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vz
c2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9
Ci0gICAgOjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYg
bV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlz
YW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwg
R0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0g
ICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsK
LSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJ
bnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0gICAg
OjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgs
IHksIHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5i
b3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBt
b2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xDdWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERlcHRoRnVuYyhmdW5jKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFuIGZs
YWcpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbERlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIp
OwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKLSAgICA6Omds
RGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEaXNhYmxlKGNhcCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShH
Q0dMdWludCBpbmRleCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2Rl
LCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERyYXdBcnJheXMobW9kZSwg
Zmlyc3QsIGNvdW50KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNv
dW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRHJhd0VsZW1lbnRz
KG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PGludHB0cl90PihvZmZzZXQpKSk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRW5hYmxl
KGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShp
bmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bEZpbmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmbHVzaCgpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbEZsdXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NH
TGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZm
ZXJ0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwg
R0NHTGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2
ZWwpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4
dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcm9udEZhY2UobW9k
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdD
R0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKLX0KLQotYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlm
ICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXpl
ID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVf
TUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOwotICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUo
bWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNs
dWRlcyBudWxsIHRlcm1pbmF0aW9uLgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAg
R0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6Z2xHZXRBY3RpdmVB
dHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6
ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1i
b2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIFN0cmluZyhuYW1l
LmRhdGEoKSwgbmFtZUxlbmd0aCkpOwotICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICBTdHJpbmcg
dW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwotICAgIExPRyhXZWJHTCwgIlBy
b2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgYXR0cmlidXRlICVkIGZyb20gJyVzJyB0byAnJXMn
IiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFt
ZS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotCi0gICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1l
OwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0
cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCi17Ci0gICAgR0NHTGludCBzeW1ib2xDb3VudDsKLSAgICBhdXRvIHJlc3VsdCA9IG1f
c2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICBnZXRO
b25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFD
VElWRV9BVFRSSUJVVEVTLCAmc3ltYm9sQ291bnQpOwotICAgICAgICByZXN1bHQgPSBtX3NoYWRl
clByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIH0KLSAgICAKLSAgICBB
Y3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+dmFsdWU7Ci0g
ICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0Fj
dHVhbEF0dHJpYnV0ZUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0Fj
dHVhbEF0dHJpYnV0ZUluZGV4TWFwW2luZGV4XSA6IC0xOwotCi0gICAgcmV0dXJuIGdldEFjdGl2
ZUF0dHJpYkltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwotfQotCi1ib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJv
Z3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsK
LSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEgsICZtYXhVbmlmb3JtU2l6ZSk7Ci0KLSAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heFVuaWZv
cm1TaXplKTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRl
cm1pbmF0aW9uLgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9
IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dy
YW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFt
ZS5kYXRhKCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3Jh
bSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxl
bmd0aCkpOwotICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFt
ZS5kYXRhKCksIG5hbWVMZW5ndGgpOwotICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFw
cGluZyBhY3RpdmUgdW5pZm9ybSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4
LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7
Ci0jZW5kaWYKLSAgICAKLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Ci0gICAgaW5mby50
eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0g
ICAgR0NHTGludCBzeW1ib2xDb3VudDsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3Jh
bVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRl
clByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICBnZXROb25CdWlsdEluQWN0
aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9VTklGT1JN
UywgJnN5bWJvbENvdW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9s
Q291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICB9Ci0gICAgCi0gICAgQWN0aXZlU2hhZGVyU3lt
Ym9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOwotICAgIEdDR0x1aW50IHJh
d0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5k
ZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4
TWFwW2luZGV4XSA6IC0xOwotICAgIAotICAgIHJldHVybiBnZXRBY3RpdmVVbmlmb3JtSW1wbChw
cm9ncmFtLCByYXdJbmRleCwgaW5mbyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzaXpl
aSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVjdCogc2hhZGVycykK
LXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhw
cm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwotfQotCi1zdGF0aWMgU3RyaW5nIGdl
bmVyYXRlSGFzaGVkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG5hbWUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB1aW50NjRfdCBudW1iZXIgPSBuYW1l
SGFzaEZvclNoYWRlcihuYW1lLnV0ZjgoKS5kYXRhKCksIG5hbWUubGVuZ3RoKCkpOwotICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJ3ZWJnbF8iLCBoZXgobnVtYmVyLCBMb3dlcmNhc2UpKTsKLX0KLQot
c3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1i
b2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJT
eW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3lt
Ym9sVHlwZSk7Ci0gICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1hcC5maW5kKG5hbWUpOwot
ICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICBhdXRvJiBtYXBwZWROYW1lID0gc3ltYm9sRW50cnktPnZhbHVl
LmdldCgpLm1hcHBlZE5hbWU7Ci0gICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCks
IG1hcHBlZE5hbWUubGVuZ3RoKCkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRl
clN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEdDR0xz
aXplaSBjb3VudCA9IDA7Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyB9Owot
ICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0g
ICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGF1dG8g
bWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5
bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAgICAgICAgICAgIHJl
dHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgLy8gV2UgbWlnaHQgaGF2ZSBk
ZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCi0gICAgYXV0byBy
ZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQg
IT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJz
ID0gcmVzdWx0LT52YWx1ZTsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7
Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUu
dmFsdWUoKTsKLSAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNl
TWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYg
KG1hcHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAg
IH0KLQotICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUg
JiYgIW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lh
bCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVl
biBjb21waWxlZCwKLSAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVz
ZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgotICAgICAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hh
ZGVycykKLSAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hh
ZGVyTmFtZUhhc2g+KCk7Ci0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihu
YW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOwotCi0gICAgICAgIGF1dG8gZ2VuZXJhdGVkTmFt
ZSA9IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKLQotICAgICAgICBzZXRDdXJyZW50TmFtZUhh
c2hNYXBGb3JTaGFkZXIobnVsbHB0cik7Ci0KLSAgICAgICAgbV9wb3NzaWJseVVudXNlZEF0dHJp
YnV0ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7Ci0KLSAgICAgICAgcmV0dXJuIGdlbmVy
YXRlZE5hbWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xJblNoYWRlclNv
dXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5
bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hh
ZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291
cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgY29uc3Qg
YXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewotICAgICAgICBp
ZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCi0g
ICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OwotICAgIH0KLSAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFs
U3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlw
ZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0NHTHNpemVpIGNvdW50
OwotICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXTsKLSAgICBnZXRBdHRhY2hlZFNoYWRl
cnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLSAgICAKLSAgICBmb3IgKEdDR0xzaXpl
aSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBvcmlnaW5hbE5hbWUgPSBv
cmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5h
bWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG9yaWdp
bmFsTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQg
b3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgotICAgIGF1dG8gcmVzdWx0ID0g
bV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fbGlu
a2VkU2hhZGVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3Vs
dC0+dmFsdWU7Ci0gICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNo
YWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAg
ICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUu
dmFsdWUoKTsKLSAgICAgICAgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNv
dXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAg
IGlmIChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVl
KCk7Ci0gICAgfQotCi0gICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FU
VFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUg
YSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMg
aGF2ZSBiZWVuIGNvbXBpbGVkLAotICAgICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQg
dG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCi0KLSAgICAgICAgY29uc3QgYXV0byYg
Y2FjaGVkID0gbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5maW5kKG5hbWUpOwotICAgICAg
ICBpZiAoY2FjaGVkICE9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gY2FjaGVkLT52YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZTsK
LX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50LCBjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgZm9yIChzaXplX3Qgc3ltYm9sVHlwZSA9IDA7IHN5bWJvbFR5cGUgPD0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihTSEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORyk7ICsrc3ltYm9sVHlw
ZSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChzaGFkZXJzW2ldKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJT
b3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwID0gcmVzdWx0LT52
YWx1ZS5zeW1ib2xNYXAoc3RhdGljX2Nhc3Q8ZW51bSBBTkdMRVNoYWRlclN5bWJvbFR5cGU+KHN5
bWJvbFR5cGUpKTsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBz
eW1ib2xNYXApIHsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1
ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBz
eW1ib2xFbnRyeS5rZXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIG5hbWU7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9j
YXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLQotICAgIFN0cmluZyBtYXBwZWRO
YW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklC
VVRFLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRpb24gaXMgbWFw
cGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0
YSgpKTsKLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5h
bWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJp
bmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLQotICAg
IHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgp
KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhl
dGljRXJyb3JMaXN0KCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOwotCi0gICAg
Ly8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBh
IGhhbmcgaWYKLSAgICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBp
dCB0byBuZXZlciBjbGVhciB0aGUgZXJyb3IuCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBq
dXN0IGxvb3AgdW50aWwgd2UgZ290IE5PX0VSUk9SLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAxMDA7ICsraSkgewotICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGdsR2V0RXJyb3IoKTsK
LSAgICAgICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci0gICAgICAgIG1vdmVkQW5FcnJvciA9
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKLX0KLQotR0NHTGVudW0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKLXsKLSAgICBpZiAoIW1fc3ludGhl
dGljRXJyb3JzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJl
bnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCi0gICAgICAgIC8v
IHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVkIGJlaGF2aW9y
IG9mIGJvdGgKLSAgICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMgdG8gb25seSBy
ZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9uY2UuCi0gICAgICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpOwotICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0
KCk7Ci0gICAgfQotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwotCi0gICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigpOwot
fQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dMZW51bSBu
YW1lKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsSGludCh0YXJn
ZXQsIG1vZGUpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNC
dWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNCdWZmZXIoYnVmZmVy
KTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChH
Q0dMZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2FwKTsKLX0KLQot
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZv
cm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVyKQotICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQo
ZnJhbWVidWZmZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIXByb2dyYW0p
Ci0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNQcm9ncmFt
KHByb2dyYW0pOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNS
ZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFy
ZW5kZXJidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6
OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQot
ewotICAgIGlmICghc2hhZGVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBy
ZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQotewotICAg
IGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJu
IDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbExpbmVXaWR0aCh3aWR0aCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBHQ0dMc2l6ZWkgY291bnQg
PSAwOwotICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKLSAgICBnZXRBdHRh
Y2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLQotICAgIGlmIChjb3Vu
dCA9PSAyKQotICAgICAgICBtX2xpbmtlZFNoYWRlck1hcC5zZXQocHJvZ3JhbSwgc3RkOjptYWtl
X3BhaXIoc2hhZGVyc1swXSwgc2hhZGVyc1sxXSkpOwotCi0gICAgOjpnbExpbmtQcm9ncmFtKHBy
b2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBh
cmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChH
Q0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFBvbHlnb25PZmZzZXQoZmFj
dG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNv
dmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU2FtcGxl
Q292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotCi0gICAg
U2hhZGVyU291cmNlRW50cnkgZW50cnk7Ci0KLSAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7Ci0K
LSAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBXVEZNb3ZlKGVudHJ5KSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMs
IEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYs
IG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1Nl
cGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWlu
dCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1h
c2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6
ZmFpbCwgR0NHTGVudW0genBhc3MpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3Mp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShH
Q0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBh
c3MpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHZhbHVlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xUZXhQYXJhbWV0
ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
aW50IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlv
biwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xm
bG9hdCB2MSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6
ZSAlIDIpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5
LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAz
KSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRh
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xm
bG9hdCB2MykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJh
eS5idWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8g
NCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRp
b24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5p
Zm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJy
YXkuYnVmU2l6ZSAlIDIpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAv
IDIsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2
MikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUg
MykpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYz
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXpl
ICUgNCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXku
ZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgy
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCB0cmFuc3Bv
c2UsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZT
aXplICUgOSkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8g
OSwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEo
YXJyYXkuYnVmU2l6ZSAlIDE2KSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGFycmF5
LmJ1ZlNpemUgLyAxNiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNT
RVJUKHByb2dyYW0pOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdD
R0xmbG9hdCB2MCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYo
aW5kZXgsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdCwgMj4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwg
YXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZs
b2F0IHYyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRl
eCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmli
M2Z2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0
IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5k
ZXgsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1h
bGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmlld3BvcnQo
eCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKLXsKLSAgICByZXR1cm4gZ2V0RXh0ZW5z
aW9ucygpLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCi17Ci0g
ICAgZ2V0RXh0ZW5zaW9ucygpLmRlbGV0ZVZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0KLQotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1H
TE9iamVjdCBhcnJheSkKLXsKLSAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmlzVmVydGV4QXJy
YXlPRVMoYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVy
dGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICBnZXRFeHRlbnNpb25zKCku
YmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2
YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlLmRhdGEpOwotfQotCi1HQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotCi0gICAgOjpn
bEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJu
IHZhbHVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYoR0NH
TGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEZsb2F0dihw
bmFtZSwgdmFsdWUuZGF0YSk7Ci19Ci0KLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQotewotICAgIFVOVVNFRF9QQVJBTShwbmFt
ZSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwotICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVu
YWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQg
Y3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBF
UyAzLjAuCi0gICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKLSAgICByZXR1
cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50
ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0NHTGludDY0IHZhbHVlID0g
MDsKLSAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmly
c3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5n
IHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgotICAgIC8vIDo6Z2xHZXRJ
bnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQot
Ci1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVu
dW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQ
VEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQotICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNI
TUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCi0gICAgOjpnbEdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwg
cG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xlbnVtIHBuYW1lKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYo
cHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCi17
Ci0gICAgQVNTRVJUKEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1lIHx8IEFDVElWRV9VTklGT1JN
UyA9PSBwbmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgYXV0
byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsK
LSAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7
Ci0gICAgICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBlKHBuYW1lKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFw
LnNldChwcm9ncmFtLCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMoKSk7Ci0gICAgQWN0aXZlU2hh
ZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5maW5kKHByb2dyYW0pLT52YWx1ZTsKLQotICAgIC8vIFJldHJpZXZlIHRoZSBhY3RpdmUg
YXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEgbWFwcGluZyBvZgotICAg
IC8vIG91ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhlIHJlYWwgdW5maWx0ZXJl
ZCBpbmRleGVzIGluc2lkZSBPcGVuR0wuCi0gICAgR0NHTGludCBhdHRyaWJ1dGVDb3VudCA9IDA7
Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklCVVRFUywgJmF0dHJp
YnV0ZUNvdW50KTsKLSAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsg
KytpKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0aXZlQXR0cmli
SW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKLSAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRo
KCJnbF8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHN5bWJvbENvdW50cy5m
aWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuYXBwZW5kKGkpOwotICAgIH0KLSAgICAK
LSAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMuCi0gICAgR0NHTGludCB1bmlmb3JtQ291
bnQgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX1VOSUZPUk1TLCAm
dW5pZm9ybUNvdW50KTsKLSAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCB1bmlmb3JtQ291bnQ7
ICsraSkgewotICAgICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGdldEFjdGl2ZVVuaWZv
cm1JbXBsKHByb2dyYW0sIGksIGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dp
dGgoImdsXyIpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBzeW1i
b2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBlbmQoaSk7Ci0gICAg
fQotICAgIAotICAgICp2YWx1ZSA9IHN5bWJvbENvdW50cy5jb3VudEZvclR5cGUocG5hbWUpOwot
fQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZEluZm9Mb2co
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBHQ0dMc2l6ZWkgY291bnQsIGNvbnN0IFN0cmlu
ZyYgbG9nKQotewotICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRlckluZm9Mb2c6XG4lcyIs
IGxvZy51dGY4KCkuZGF0YSgpKTsKLQotICAgIEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24g
cmVnRXhwKCJ3ZWJnbF9bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl0rIik7Ci0KLSAgICBTdHJpbmdC
dWlsZGVyIHByb2Nlc3NlZExvZzsKLSAgICAKLSAgICAvLyBBTkdMRSBpbnNlcnRzIGEgIiNleHRl
bnNpb24iIGxpbmUgaW50byB0aGUgc2hhZGVyIHNvdXJjZSB0aGF0Ci0gICAgLy8gY2F1c2VzIGEg
d2FybmluZyBpbiBzb21lIGNvbXBpbGVycy4gVGhlcmUgaXMgbm8gcG9pbnQgc2hvd2luZwotICAg
IC8vIHRoaXMgd2FybmluZyB0byB0aGUgdXNlciBzaW5jZSB0aGV5IGRpZG4ndCB3cml0ZSB0aGUg
Y29kZSB0aGF0Ci0gICAgLy8gaXMgY2F1c2luZyBpdC4KLSAgICBzdGF0aWMgY29uc3QgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBhbmdsZVdhcm5pbmcgeyAiV0FSTklORzogMDoxOiBleHRlbnNpb24g
J0dMX0FSQl9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxuIl9zIH07Ci0gICAgaW50IHN0
YXJ0RnJvbSA9IGxvZy5zdGFydHNXaXRoKGFuZ2xlV2FybmluZykgPyBhbmdsZVdhcm5pbmcuZ2V0
KCkubGVuZ3RoKCkgOiAwOwotICAgIGludCBtYXRjaGVkTGVuZ3RoID0gMDsKLQotICAgIGRvIHsK
LSAgICAgICAgaW50IHN0YXJ0ID0gcmVnRXhwLm1hdGNoKGxvZywgc3RhcnRGcm9tLCAmbWF0Y2hl
ZExlbmd0aCk7Ci0gICAgICAgIGlmIChzdGFydCA9PSAtMSkKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIHN0
YXJ0IC0gc3RhcnRGcm9tKSk7Ci0gICAgICAgIHN0YXJ0RnJvbSA9IHN0YXJ0ICsgbWF0Y2hlZExl
bmd0aDsKLQotICAgICAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWRTeW1ib2wgPSBsb2cuc3Vic3Ry
aW5nKHN0YXJ0LCBtYXRjaGVkTGVuZ3RoKTsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBtYXBwZWRT
eW1ib2wgPSBtYXBwZWRTeW1ib2xOYW1lKHNoYWRlcnMsIGNvdW50LCBtYW5nbGVkU3ltYm9sKTsK
LSAgICAgICAgTE9HKFdlYkdMLCAiRGVtYW5nbGluZzogJXMgdG8gJXMiLCBtYW5nbGVkU3ltYm9s
LnV0ZjgoKS5kYXRhKCksIG1hcHBlZFN5bWJvbC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcHJv
Y2Vzc2VkTG9nLmFwcGVuZChtYXBwZWRTeW1ib2wpOwotICAgIH0gd2hpbGUgKHN0YXJ0RnJvbSA8
IHN0YXRpY19jYXN0PGludD4obG9nLmxlbmd0aCgpKSk7Ci0KLSAgICBwcm9jZXNzZWRMb2cuYXBw
ZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsK
LQotICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBwcm9jZXNz
ZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gcHJvY2Vzc2VkTG9n
LnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9n
cmFtKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihw
cm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBW
ZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHBy
b2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgIEdDR0xzaXplaSBjb3Vu
dDsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07Ci0gICAgZ2V0QXR0YWNoZWRTaGFk
ZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICByZXR1cm4gZ2V0VW5tYW5n
bGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci19
Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMaW50IHZh
bHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5h
bWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51
bSBwbmFtZSkKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0K
LQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBERUxFVEVfU1RBVFVTOgot
ICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBu
YW1lLCAmdmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgot
ICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAg
ICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgotICAgICAgICBpZiAocmVzdWx0
ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgICAgdmFsdWUgPSBnZXRTaGFk
ZXJJbmZvTG9nKHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hB
REVSX1NPVVJDRV9MRU5HVEg6Ci0gICAgICAgIHZhbHVlID0gZ2V0U2hhZGVyU291cmNlKHNoYWRl
cikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLX0K
LQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgY29u
c3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlm
IChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsgCi0KLSAgICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZh
bHVlOwotICAgIGlmICghZW50cnkuaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsK
LQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xf
SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hh
cj4gaW5mbyhsZW5ndGgpOwotICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3Ro
LCAmc2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJd
ID0geyBzaGFkZXIsIDAgfTsKLSAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJz
LCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17
Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNv
dXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIHJldHVybiBy
ZXN1bHQtPnZhbHVlLnNvdXJjZTsKLX0KLQotR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17
Ci0gICAgR0NHTGZsb2F0IHZhbHVlID0gMC5mOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFy
Z2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgOjpnbEdldFRleFBh
cmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVl
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0x1aW50PiB2YWx1ZSkK
LXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9u
KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgU3RyaW5nIG1h
cHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9V
TklGT1JNLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2NhdGlvbiBpcyBt
YXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5k
YXRhKCkpOwotICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG1hcHBl
ZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBw
bmFtZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIEdMdm9pZCogcG9pbnRlciA9IDA7Ci0gICAgOjpnbEdldFZlcnRleEF0dHJpYlBv
aW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxH
Q0dMc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiAhVVNFKE9QRU5HTF9FUykKLSAgICBp
ZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykKLSAgICAgICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRf
QVJCOwotI2VuZGlmCi0KLSAgICBpZiAobV91c2luZ0NvcmVQcm9maWxlKSAgewotICAgICAgICAv
LyBUaGVyZSBhcmUgc29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVw
cmVjYXRlZCB3aGVuIHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCi0gICAgICAgIC8v
IHRvIGFkYXB0IHRoZW0sIGFzIHdlIGRvIGluIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJEKCkuCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgQUxQSEE6
Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkVEIHRvIGJhY2sgR0xfQUxQSEEsIHNv
IGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAgICAgICAgICAgIGZvcm1hdCA9IFJFRDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIC8v
IFdlIGFyZSB1c2luZyBHTF9SRyB0byBiYWNrIEdMX0xVTUlOQU5DRV9BTFBIQSwgc28gZG8gaXQg
aGVyZSBhcyB3ZWxsLgotICAgICAgICAgICAgZm9ybWF0ID0gUkc7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBw
YXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRo
ZSBzdWJpbWFnZSBzaXplLgotICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmRhdGEpOwotICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJl
KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBH
Q0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
Q29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOwotICAgIG1fc3RhdGUudGV4
dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOwotICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwot
fQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZm
ZXIoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuQnVmZmVycygxLCAmbyk7Ci0gICAgcmV0
dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZyYW1lYnVmZmVy
c0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdsQ3JlYXRlUHJv
Z3JhbSgpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuUmVuZGVyYnVm
ZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBlKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0
dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVO
VF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQgbyA9IDA7Ci0g
ICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdsRGVsZXRlQnVmZmVycygx
LCAmYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJh
bWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zdGF0ZS5i
b3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChmcmFtZWJ1ZmZl
ciA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZy
YW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCi0gICAgICAgIC8v
IG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgotICAgICAgICBiaW5kRnJhbWVidWZm
ZXIoRlJBTUVCVUZGRVIsIDApOwotICAgIH0KLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgx
LCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW0p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIo
UGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhU
KDEsICZyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVTaGFkZXIoc2hh
ZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQ
bGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3Zl
SWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgewotICAgICAgICByZXR1cm4ga2V5VmFsdWUu
dmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKLSAgICB9KTsKLSAgICBnbERlbGV0ZVRleHR1cmVzKDEs
ICZ0ZXh0dXJlKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVtb3ZlQWxsKHRleHR1
cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50aGVzaXplR0xFcnJv
cihHQ0dMZW51bSBlcnJvcikKLXsKLSAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJy
b3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCB0bwotICAgIC8vIHByZXNlcnZlIHRoZSBv
cmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRvIGdldEVycm9yIHdpbGwgZ2V0Ci0gICAgLy8g
YW55IGVycm9ycyBmcm9tIGdsRXJyb3IgYmVmb3JlIHRoZSBlcnJvciB3ZSBhcmUgc3ludGhlc2l6
aW5nLgotICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIG1fc3ludGhl
dGljRXJyb3JzLmFkZChlcnJvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZvcmNlQ29udGV4dExvc3QoKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVj
dG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCi17Ci0gICAg
Zm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAgY2xp
ZW50LT5yZWN5Y2xlQ29udGV4dCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKLXsKLSAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPmRpc3Bh
dGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0g
ICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1
cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0
YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dM
c2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFu
Y2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwotICAgIGNoZWNrR1BVU3Rh
dHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0lu
c3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdldEV4dGVuc2lv
bnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0
LCBwcmltY291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1
aW50IGRpdmlzb3IpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3JB
TkdMRShpbmRleCwgZGl2aXNvcik7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSAmJiBFTkFCTEUo
V0VCR0wyKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydElu
ZGV4KEdDR0x1aW50IGluZGV4KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xQcmltaXRpdmVSZXN0YXJ0SW5kZXgoaW5kZXgpOwot
fQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwgR0NHTHVpbnQg
c3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotICAgIFVOVVNFRF9QQVJBTSh1c2FnZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHNyY09mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNyY0RhdGEsIEdDR0x1
aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXQpOwotICAgIFVOVVNFRF9QQVJBTShkc3RCeXRlT2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0o
c3JjRGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGxlbmd0aCk7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwg
R0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENvcHlCdWZm
ZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNl
dCwgc2l6ZSk7Ci19Ci0jZWxzZQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyLCBHQ0dMaW50cHRyLCBH
Q0dMc2l6ZWlwdHIpCi17Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBH
Q0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKLXsKLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9Q
RU5HTF9FU18zKQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBHQ0dMdm9pZCogcHRyID0gOjpnbE1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0
LCBkYXRhLmJ1ZlNpemUsIEdyYXBoaWNzQ29udGV4dEdMOjpNQVBfUkVBRF9CSVQpOwotICAgIGlm
ICghcHRyKQotICAgICAgICByZXR1cm47Ci0gICAgbWVtY3B5KGRhdGEuZGF0YSwgcHRyLCBkYXRh
LmJ1ZlNpemUpOwotICAgIGlmICghOjpnbFVubWFwQnVmZmVyKHRhcmdldCkpCi0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQp
OwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotI2VuZGlmCi19Ci0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xp
bnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdD
R0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBt
YXNrLCBHQ0dMZW51bSBmaWx0ZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gwKTsKLSAgICBV
TlVTRURfUEFSQU0oc3JjWTApOwotICAgIFVOVVNFRF9QQVJBTShzcmNYMSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHNyY1kxKTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WDApOwotICAgIFVOVVNFRF9QQVJB
TShkc3RZMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFgxKTsKLSAgICBVTlVTRURfUEFSQU0oZHN0
WTEpOwotICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKLSAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0
IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOwotICAgIFVOVVNFRF9Q
QVJBTSh0ZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwotICAgIFVOVVNFRF9QQVJB
TShsYXllcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVG
cmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRh
Y2htZW50cykKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0o
YXR0YWNobWVudHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlk
YXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51
bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGF0dGFjaG1lbnRzKTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdo
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVu
dW0gc3JjKQotewotICAgIFVOVVNFRF9QQVJBTShzcmMpOwotfQotCi0jaWYgSEFWRShPUEVOR0xf
NCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IGRhdGEpCi17Ci0jaWYgVVNFKE9Q
RU5HTF9FUykKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBw
bmFtZSwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9Q
QVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZlNpemUpOwotICAgIFVOVVNFRF9QQVJB
TShwYXJhbXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBz
YW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBz
YW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXpl
aSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxz
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKLSAgICBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLSNlbHNl
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xl
bnVtLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPEdDR0xpbnQ+KQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
R0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0s
IEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0sIEdDR0xzaXpl
aSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0jZW5k
aWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlM0QoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9m
ZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAg
IFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5VU0VEX1BBUkFNKHhvZmZzZXQpOwotICAgIFVO
VVNFRF9QQVJBTSh5b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oem9mZnNldCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0od2lk
dGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAg
ICBVTlVTRURfUEFSQU0obmFtZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2
MCkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBs
b2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQotewotICAgIFVOVVNFRF9QQVJBTShs
b2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFSQU0odjEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odjApOwotICAgIFVOVVNFRF9Q
QVJBTSh2MSk7Ci0gICAgVU5VU0VEX1BBUkFNKHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NH
THVpbnQgdjEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKLXsKLSAgICBVTlVTRURfUEFSQU0o
bG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHYxKTsK
LSAgICBVTlVTRURfUEFSQU0odjIpOwotICAgIFVOVVNFRF9QQVJBTSh2Myk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9Q
QVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShs
b2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAg
ICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
bG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJp
eDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFS
QU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsK
LSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2Up
OwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRy
YW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9Q
QVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHos
IEdDR0xpbnQgdykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJB
TSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHopOwotICAgIFVO
VVNFRF9QQVJBTSh3KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFs
dWVzKQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVl
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWko
R0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50IHosIEdDR0x1
aW50IHcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh6KTsKLSAgICBVTlVTRURf
UEFSQU0odyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
Ykk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVz
KQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVy
KEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBz
dHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVT
RURfUEFSQU0oc3RyaWRlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwg
R0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXJ0KTsKLSAgICBVTlVTRURfUEFSQU0oZW5kKTsKLSAgICBVTlVTRURf
UEFSQU0oY291bnQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0o
b2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0J1ZmZlcnMo
R0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZnMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KEdDR0xl
bnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2
YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKGRy
YXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykKLXsKLSAgICBVTlVT
RURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAgVU5V
U0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwot
ICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51
bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50IHN0
ZW5jaWwpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKGRy
YXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkZXB0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
ZW5jaWwpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVRdWVyeSgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHF1ZXJ5KTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
cXVlcnkpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVy
eSkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0
YXJnZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci19Ci0KLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHBuYW1lKTsKLQotICAgIHJldHVybiAwOwotfQotCi1HQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5LCBHQ0dM
ZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkpOwotICAgIFVOVVNFRF9QQVJB
TShwbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQotewotICAgIHJldHVybiAwOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci19Ci0KLUdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBz
YW1wbGVyKQotewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBsZXIoR0NHTHVp
bnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewotICAgIFVOVVNFRF9QQVJBTSh1
bml0KTsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwg
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBs
ZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYoUGxh
dGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKQot
ewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwot
ICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Ci19Ci0KLUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBH
Q0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKHBuYW1lKTsKLSAgICByZXR1cm4gMC5mOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBs
ZXIsIEdDR0xlbnVtIHBuYW1lKQotCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotICAg
IFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0xzeW5jIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0
ZmllbGQgZmxhZ3MpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbmRpdGlvbik7Ci0gICAgVU5VU0VE
X1BBUkFNKGZsYWdzKTsKLQotICAgIHJldHVybiAwOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHN5bmMpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTeW5jKEdDR0xzeW5jIHN5bmMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHN5bmMpOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2Fp
dFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVv
dXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwotICAgIFVOVVNFRF9QQVJBTShmbGFncyk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRm
aWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMp
OwotICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOwot
fQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaShHQ0dMc3luYyBz
eW5jLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0gICAgVU5V
U0VEX1BBUkFNKHBuYW1lKTsKLSAgICByZXR1cm4gMDsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQotewotICAg
IHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFu
c2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNFRF9QQVJBTShp
ZCk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9y
bUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGlkKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBp
ZCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNr
KEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2ZU1v
ZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVk
YmFjaygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh2YXJ5aW5ncyk7Ci0gICAgVU5VU0VEX1BBUkFN
KGJ1ZmZlck1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBp
bmRleCwgQWN0aXZlSW5mbyYpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBh
dXNlVHJhbnNmb3JtRmVlZGJhY2soKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5k
ZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQp
OwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51
bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlciwgR0NHTGlu
dHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXQpOwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7
Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotfQot
Ci1WZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5k
aWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlm
b3JtTmFtZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJB
TSh1bmlmb3JtTmFtZXMpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotVmVjdG9yPEdDR0xpbnQ+
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dM
ZW51bSBwbmFtZSkKLXsKLSAgICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVuaWZvcm1JbmRpY2Vz
LnNpemUoKSwgMCk7Ci0jaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLSAg
ICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0s
IHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcmVz
dWx0LmRhdGEoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVT
RURfUEFSQU0ocG5hbWUpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotR0NHTHVp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKQotewotICAg
IFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrTmFt
ZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IHVuaWZvcm1CbG9ja0luZGV4KQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAg
ICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOwotICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5k
aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgs
IEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dy
YW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHVuaWZvcm1CbG9ja0JpbmRpbmcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAg
ICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1C
bG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQotewot
ICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2Nr
SW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFt
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVu
dW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NH
TGVudW0sIEdDR0xlbnVtICwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NH
TGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0
cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleElt
YWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwg
R0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRl
eEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFn
ZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NH
THNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCi17Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBH
Q0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQot
ewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xl
bnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCi17Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xl
bnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGludCwgR0NHTHNpemVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVt
LCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NH
TGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQotewotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dM
ZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikKLXsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzQU5HTEUoR0NH
TGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+
LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6
ZWk+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNp
emVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMc2l6ZWkpCi17Ci0g
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVu
dW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBH
Q0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgdW5w
YWNrQWxpZ25tZW50KQotewotICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQgPT0gMSB8fCB1bnBh
Y2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1bnBhY2tBbGlnbm1l
bnQgPT0gOCk7Ci0gICAgVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4gemVybzsKLSAgICB1bnNp
Z25lZCBzaXplID0gMDsKLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKLSAgICAg
ICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7Ci0gICAgICAgIHBhcmFtcy5hbGlnbm1lbnQgPSB1
bnBhY2tBbGlnbm1lbnQ7Ci0gICAgICAgIEdDR0xlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6
ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJhbXMsICZzaXplLCBu
dWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdM
OjpOT19FUlJPUikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHplcm8gPSBtYWtlVW5p
cXVlQXJyYXk8dW5zaWduZWQgY2hhcj4oc2l6ZSk7Ci0gICAgICAgIGlmICghemVybykgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1lbXNl
dCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKLSAgICB9Ci0gICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IG1ha2VHQ0dMU3Bhbih6ZXJvLmdldCgpLCBzaXplKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKaW5kZXggZTY2ZTAwYWRiMjg3
NWFkZjY5YTE5N2ZjYzY5MjMxNmRhNmY5NmU2ZS4uZDI5OWExOWZhODY2Mzk3NTUyZGQ2ZGU3ODgw
Y2NhNDMzODJmMjhhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5jcHAKQEAgLTI4LDkgKzI4LDEzIEBACiAjaWYgRU5BQkxFKFdFQkdMKQogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIgogCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAKKyNpZiBVU0UoQU5H
TEUpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgorI2Vsc2UKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2VuZGlmCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlciYgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkKQEAgLTU2LDcgKzYwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQogfQogI2Vu
ZGlmCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRDb250ZXh0KEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCogY29udGV4
dCkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtNjYsNyAr
NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6YWRkQ29udGV4dChH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dAogICAgIG1fY29udGV4dHMuYXBwZW5kKGNv
bnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6cmVtb3Zl
Q29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0wqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQp
KQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyLmgKaW5kZXggMGVmODZkYzZkZTdmMjFkNWU4ZTkxMjBlOWEzMmIwYThiMWYxZjczMS4u
ZDE0ODM0MTBkMDIzZjgzMDM2ZDk3ODU2NDM1ZmFlNTU4NGIwNDY3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaApAQCAtMzYsMTUgKzM2LDI1IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgdW5zaWduZWQgTWF4Q29udGV4dHMgPSAxNjsKIAor
I2lmIFVTRShBTkdMRSkKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxzZQogY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYKIAogY2xhc3MgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKICAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsKIHB1YmxpYzoKKyNpZiBVU0UoQU5HTEUpCisgICAgdXNp
bmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCA9IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7Cisj
ZWxzZQorICAgIHVzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgPSBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDsKKyNlbmRpZgorCiAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlciYgc2hhcmVkTWFuYWdlcigpOwogICAgIAotICAgIHZvaWQgYWRkQ29udGV4dChHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCopOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dChHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCopOworICAgIHZvaWQgYWRkQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMKik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0wqKTsKICAgICAKICAgICB2b2lkIHJlY3ljbGVDb250ZXh0SWZOZWNlc3NhcnkoKTsKICAgICBi
b29sIGhhc1Rvb01hbnlDb250ZXh0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dHMuc2l6ZSgp
ID49IE1heENvbnRleHRzOyB9CkBAIC01OSw3ICs2OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyKCkgPSBkZWZhdWx0OwogCi0gICAgVmVj
dG9yPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKj4gbV9jb250ZXh0czsKKyAgICBWZWN0b3I8UGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCo+IG1fY29udGV4dHM7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0
R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCmluZGV4IDA1NzU0NDQ4Yjkw
M2UxNDk5M2VkMzFiMGNiZDYxZTg2OTRhOWVlOTkuLjAyNTkxZmE2MDA0N2Y4MDgwNzY3ZjJiOWZj
MmNhZTdjZWRiZjFiOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1
cmVNYXBwZXIuY3BwCkBAIC05MSw3ICs5MSw2IEBAIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4dEdMCiB7
CiB9CiAKLS8vIEZJWE1FOiBCZWxvdyBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSBtb3ZlZCB0byBH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIgdG8gc2ltcGxpZnkgdGhlIGJhc2UgY2xhc3Mu
CiAKIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTD4gY3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29u
dGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsK
QEAgLTEyNSw2ICsxMjQsOCBAQCBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0w+IGNyZWF0ZVdlYlBy
b2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFwaGljc0NvbnRleAogICAgIHJldHVybiBj
b250ZXh0OwogfQogCisvLyBGSVhNRTogQmVsb3cgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgbW92
ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIHRvIHNpbXBsaWZ5IHRoZSBiYXNl
IGNsYXNzLgorCiAjaWYgVVNFKEFOR0xFKQogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVz
KQogICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcykKQEAgLTQyMSwxNiArNDIyLDE2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3RhdHVzKCkKIHsKIH0K
IAorI2lmICFVU0UoQU5HTEUpCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0dMRVMy
Q29tcGxpYW50KCkgY29uc3QKIHsKLSNpZiBVU0UoQU5HTEUpCi0gICAgcmV0dXJuIG1faXNGb3JX
ZWJHTDI7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVOR0xfRVMpCiAgICAgcmV0
dXJuIHRydWU7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQorI2VuZGlmCiAK
IFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKIHsKQEAgLTQ2MSwxMSArNDYyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCiB7CiB9CiAKKyNpZiAhVVNFKEFOR0xFKQog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2ltdWxhdGVFdmVudEZvclRlc3RpbmcoU2lt
dWxhdGVkRXZlbnRGb3JUZXN0aW5nIGV2ZW50KQogewogICAgIGlmIChldmVudCA9PSBTaW11bGF0
ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1cmUpCiAgICAgICAgIG1fZmFpbE5leHRT
dGF0dXNDaGVjayA9IHRydWU7CiB9CisjZW5kaWYKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlci5oCmluZGV4IGU0NjYyYjY4M2VhNDViNmYxOTY2YjMxOTczMzkzMzAz
YWFmODYwOTUuLjdmODkyYzU0OWIzMzg2ZmMzODVmMmZlODc0MmQyNjUyNWJkNjlkZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgKQEAgLTI3LDE1ICsy
NywyNSBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKKyNlbHNlCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdF
QkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCB7CisjaWYgVVNFKEFOR0xFKQordXNpbmcgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSA9IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxzZQor
dXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSA9IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTFRleHR1
cmVNYXBwZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+
IGNyZWF0ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAgfkdy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcigpOwogCisgICAgLy8gR3JhcGhpY3NDb250ZXh0
R0xUZXh0dXJlTWFwcGVyQmFzZSBvdmVycmlkZXMuCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGJv
b2wgY29weVRleHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5ZXImLCBQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGZsaXBZKSBmaW5hbDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ckFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKaW5kZXggMDg1MzlhN2Q5Mjk4MTE0
NWRjMDYwMDFiNTc0Y2E4YzlhNzFmODk1NS4uYzYwZDBlZGE4MGZmMjNjMTZiYTQ0ZGNmZmEwMmQ1
ODE4ZDM5ZDhmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyQU5HTEUuY3BwCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
RGlzcGxheSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAog
ewogI2lmIFVTRShOSUNPU0lBKQogICAgIHJldHVybiBtX25pY29zaWFMYXllci0+cGxhdGZvcm1E
aXNwbGF5KCk7CkBAIC00OSw3ICs0OSw3IEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNw
bGF5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zCiAjZW5k
aWYKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cGxhdGZvcm1Db25maWcoKSBjb25zdAorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TENvbmZpZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0CiB7
CiAjaWYgVVNFKE5JQ09TSUEpCiAgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0Zm9ybUNv
bmZpZygpOwpAQCAtNTgsNyArNTgsNyBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmln
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0CiAjZW5kaWYK
IH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJC
YWNraW5nKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZm
ZXJCYWNraW5nKCkKIHsKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAg
ICBjb25zdCBhdXRvIHNpemUgPSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwpAQCAtODIs
NyArODIsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1
ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKQogewogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0R0xEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKaW5kZXggMTIxNTBiMWQ1MGU1YmM4
OTM3NGVhYTgxMWUyMzJiM2NjNTBmMzE1MS4uM2I0Yjc1ODAyN2Y2OTY0ZTAwOWViMmU1NzIwZDRh
M2MxYmNjZWRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcApAQCAtNDgs
NyArNDgsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJ
bWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBp
eGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXpl
LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKCFpbWFnZVBpeGVscyB8fCBp
bWFnZVNpemUuaXNFbXB0eSgpIHx8IGNhbnZhc1NpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVU
aHJlYWQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQu
bW0KaW5kZXggOTU0NGI1MWMyNzhkZjU2OWVhNGFiMGJmZWY3ZWY3NDRhYzUyYzczNS4uNmQ3NzA3
ZDQwYzMyZjI4NDI5YzNkMzI0NTE1YTVjYzY5Nzc2MWJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQpAQCAtMzAsNyArMzAsNyBAQAog
CiAjaW1wb3J0ICJDb21tb25WTS5oIgogI2ltcG9ydCAiRmxvYXRpbmdQb2ludEVudmlyb25tZW50
LmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW1wb3J0ICJUaHJlYWRHbG9iYWxEYXRhLmgiCkBAIC03
NywxMyArNzcsMTMgQEAgdm9pZCBSZWxlYXNlV2ViVGhyZWFkR2xvYmFsU3RhdGUoKQogICAgIC8v
IEluIHNpbmdsZS10aHJlYWRlZCBlbnZpcm9ubWVudHMgd2UgZG8gbm90IG5lZWQgdG8gdW5zZXQg
dGhlIGNvbnRleHQsIGFzIHRoZXJlIHNob3VsZCBub3QgYmUgYWNjZXNzIGZyb20KICAgICAvLyBt
dWx0aXBsZSB0aHJlYWRzLgogICAgIEFTU0VSVChXZWJUaHJlYWRJc0VuYWJsZWQoKSk7Ci0gICAg
dXNpbmcgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgPSBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I7CisgICAgdXNpbmcg
UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjsKICAgICAvLyBGb3Igd2ViIHRo
cmVhZCwganVzdCByZWxlYXNlIHRoZSBjb250ZXh0IGFzIHdlIGtub3cgd2Ugd2lsbCBzZWUgY2Fs
bHMgdG8gaXQgYWdhaW4uCiAgICAgLy8gRm9yIG5vbi13ZWIgdGhyZWFkcywgZS5nLiB0aGlyZC1w
YXJ0eSBjbGllbnQgdGhyZWFkcywgd2UgZG9uJ3Qga25vdyBpZiB3ZSBldmVyIHNlZSBhbm90aGVy
IGNhbGwgZnJvbSB0aGUKICAgICAvLyB0aHJlYWQsIHNvIHdlIGFsc28gcmVsZWFzZSB0aGUgdGhy
ZWFkIHJlc291cmNlcy4KICAgICBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNl
QmVoYXZpb3IgPQogICAgICAgICBXZWJUaHJlYWRJc0N1cnJlbnQoKSA/IFJlbGVhc2VUaHJlYWRS
ZXNvdXJjZUJlaGF2aW9yOjpSZWxlYXNlQ3VycmVudENvbnRleHQgOiBSZWxlYXNlVGhyZWFkUmVz
b3VyY2VCZWhhdmlvcjo6UmVsZWFzZVRocmVhZFJlc291cmNlczsKLSAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFzZVRocmVhZFJlc291cmNlcyhyZWxlYXNlQmVoYXZp
b3IpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbGVhc2VUaHJlYWRS
ZXNvdXJjZXMocmVsZWFzZUJlaGF2aW9yKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5j
cHAKaW5kZXggYWM5NTk1MjBhMmUzZGZhZDlmY2Q4MmIzOTJmMTBhOWE1YTYwNDg0MC4uODRiMmU2
ODQ1ZDA3NDljZGFhMWU3OGI4NTMwZDhmOGVhNWEwZTA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wuY3BwCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3IKICAgICAg
ICAgICAgIC8vIEhlcmUgd2UgZG8gbm90IHRyeSB0byBwbGF5IGJhY2sgcGVuZGluZyBjb21tYW5k
cyBmb3IgaW1hZ2VCdWZmZXIuIEN1cnJlbnRseSB0aGlzIGNhbGwgaXMgb25seSBtYWRlIGZvciBl
bXB0eQogICAgICAgICAgICAgLy8gaW1hZ2UgYnVmZmVycyBhbmQgdGhlcmUncyBubyBnb29kIHdh
eSB0byBhZGQgZGlzcGxheSBsaXN0cy4KICAgICAgICAgICAgIGlmIChwaXhlbEJ1ZmZlcikKLSAg
ICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb250
ZXh0QXR0cmlidXRlcywgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci0+YmFja2Vu
ZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0R0w6OnBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMsIFdURk1vdmUoKnBp
eGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250
ZXh0KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5j
b250ZXh0KCkuY2xlYXJSZWN0KHsgSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXpl
KCkgfSk7CiAgICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5ICJmbHVzaCIgaW1wbGVtZW50YXRp
b24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBvdmVybG9hZHMgb3JkZXJpbmcgYW5kIGVmZmVj
dHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVk
V2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCmlu
ZGV4IDVhNmNlNjVlNzQ0N2QyNGUxZTc3MzYwZjJkOGNmZTY0ZWE4OGIzMmEuLjBkYTdiOTVkMTRl
OWFkZmNkZDM2NjkzOTkzM2Q4MDBmMDBiZjhmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJl
bmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRl
ICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oIgogI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25X
b3JrUXVldWUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmg+CiAjaW5jbHVkZSA8d3RmL1J1
bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogCkBAIC01Niw3ICs1Niw3IEBAIHZv
aWQgU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJp
bmdSZXNvdXJjZXMoKQogICAgIGlmIChzX3JlcXVlc3RzKQogICAgICAgICByZXR1cm47CiAgICAg
cmVtb3RlR3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbXSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVz
b3VyY2VzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpSZWxlYXNlVGhyZWFkUmVz
b3VyY2VCZWhhdmlvcjo6VGVybWluYXRlQW5kUmVsZWFzZVRocmVhZFJlc291cmNlcyk7CisgICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6UmVsZWFzZVRocmVhZFJlc291cmNl
QmVoYXZpb3I6OlRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMpOwogICAgIH0pOwog
fQogCg==
</data>
<flag name="commit-queue"
          id="470422"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445270</attachid>
            <date>2021-11-29 05:18:35 -0800</date>
            <delta_ts>2021-11-29 06:00:20 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211129151832.patch</filename>
            <type>text/plain</type>
            <size>544557</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5hMjc3NmJmMzcwMzNkNDc5NGRjNTk0YTJlNDdlZjNkNmNk
ZmI4ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MDUsNiArMTQwNSw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0FOR0xFSGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGls
aXRpZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4
MDExODYuLjE1ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
N2I2ZDU2MTQ2OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVj
MmQ1MzE4YWIzOTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEz
Niw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvaXNvL0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09WVFRDdWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTky
OTQ5ODk1MjBjMjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVy
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlNGQ5ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJl
ZTAyNmE2YTlkMTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBA
CiAJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAv
KiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAq
LzsgfTsKIAkJN0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRl
eHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYw
OTRERDI3MEM0NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAv
KiBBTkdMRVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJm
b3JtYW5jZUdQVVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFu
Y2VHUFVSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIz
MDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRl
eHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVE
Mjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYw
Q0UgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0No
ZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAy
MTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBH
cmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVG
MjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBB
MThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEw
MzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFB
QyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xDVkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ix
NjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4
MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1
Nyw4IEBACiAJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhD
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCOTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAw
NjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0
QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJ
CTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJ
CQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJ
CQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
ICovLAorCQkJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmggKi8sCiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xF
U2V0dGluZy5jcHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFy
eUFOR0xFU2V0dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3
QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgg
Ki8sCiAJCQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAw
MDA2MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2
OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBA
QAogCQkJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJ
CTdCOEVENUVGMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEw
MzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdC
MTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICov
LAotCQkJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCAqLywKKwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8q
IEltYWdlUm90YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdG
RjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4
MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0
MjYyLDE2IEBACiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4
dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3Jh
cGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3
MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdCOTVDRkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIx
MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAv
KiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4
MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0
MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5
RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGlj
c0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5
MTVmYTVmNzRkYzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2
MzQ1NTlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8g
UmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRh
KEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25l
ZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50
UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGlu
dCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0R0xTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNi
NGQ3ZTljZWUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBH
Q0dMdWludCBib3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVu
aXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4
dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwg
R0NHTGVudW0+LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJh
aXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5k
VGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0K
KyAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91
bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0
dXJlLCBHQ0dMZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0
KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIElu
dEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1
aW50Pj47CisgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYw
ZmI1ZWUxYWMzOTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2
NDBmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNp
bmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dM
QU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
KQorRXh0ZW5zaW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUqIGNvbnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhm
YWxzZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5k
ZXggMGE2MWVmYzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRi
OWY2MTVjM2IzYTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0z
MiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMu
Ci0gICAgZXhwbGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
KTsKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVu
c2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRl
bnNpb25zR0xBTkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4
ICs2NCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRl
bnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAg
Ly8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFj
ayB0byBHcmFwaGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUq
IG1fY29udGV4dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0
aW5nLXBvaW50IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAg
ICBib29sIG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBk
ZmEyYjdhNTA5Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmgiCiAKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJl
c3Npb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFW
Rk9VTkRBVElPTikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBk
ZWZpbml0aW9uIHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAg
LTc2LDggKzcxLDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpCiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEp
CiAgICAgICAgIEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3Jt
Q29uZmlnKCksIEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQor
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBz
d2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyAr
OTksNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2lu
Z1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1Rh
cmdldCkgewogICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZv
ckRyYXdpbmdUYXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJl
aGF2aW9yIHJlbGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNl
QmVoYXZpb3IpCiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAg
LTE2MSw3ICsxNTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xf
UmVsZWFzZVRocmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFp
bnRSZXN1bHRzKCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpA
QCAtMTg3LDE0ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBw
aXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1
dGVzKCkKIHsKICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygp
LmFscGhhID8gR0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11
c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hE
ZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChH
THVpbnQgaW50ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3Bl
ZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAg
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+
IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBnbDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwg
bnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBw
cmVjaXNpb25UeXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lz
aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48
R0NHTGludCwgMj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xl
bnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNo
YWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAg
ICAgICAgIGludGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihn
ZXRFeHRlbnNpb25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZz
ZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQg
eW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0wKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwg
R0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewogICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VT
aXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNl
dCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQg
eW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBH
Q0dMY2xhbXBmIHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGds
OjpEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oekZhcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRo
KEdDR0xjbGFtcGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVw
dGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVw
dGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lv
bnMpCiAgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+
KHRoaXMpOwogICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpy
ZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0
YS5kYXRhLCBmYWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRu
UGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJ
bXBsKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBs
ZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0
YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMs
IEdDR0xzaXplaSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZm
ZXJPYmplY3QpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYK
IH0KIAotLy8gVGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZv
bGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygp
OwogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZv
cm1zIGFyZSBub3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQog
ICAgICAgICByZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFT
U0VSVCghbV9sYXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVS
ZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5i
b3VuZFJlYWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpA
QCAtNTg3LDcgKzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhl
bHNGb3JQYWludFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBt
X2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1
cm47CkBAIC02NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0
dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTY4Miw3ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVU
ZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNT
RVJUKHNoYWRlcik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8K
ICAgICBnbDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC03MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0CiB9CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGds
OjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xj
bGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBn
cmVlbiwgR0NHTGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVu
dW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dM
ZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dM
ZW51bSBtb2RlQWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9
CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShH
Q0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xl
bnVtIGRzdEFscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBh
cmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEs
IEdDR0xlbnVtIGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJH
QgogICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0
ciBzaXplLCBHQ0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRh
dGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xT
cGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdD
R0x2b2lkPiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0
YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciBy
ZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVh
ZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NH
TGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0
aXZSb2J1c3RBTkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXpl
LCBudWxscHRyLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODQ4LDcgKzg0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
IGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgs
IGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRl
ciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAg
Z2w6OlRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6
ZSwgcGl4ZWxzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQq
PihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50
IHhvZmYKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIHBpeGVscy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50
IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4
OTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
aW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+
KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5
MDcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1
YkltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZz
ZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0Qo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBw
bmFtZSkKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVV
bmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4m
IHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4g
cmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpA
QCAtOTI5LDcgKzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwpAQCAtOTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6
OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNs
YW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTk0NSw3ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNv
bG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVh
cihHQ0dMYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05
NjIsNyArOTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KEdDR0xpbnQgcykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdy
ZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwg
R0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNv
bXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEw
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEw
MzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAg
ICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVu
YyhmdW5jKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdD
R0xib29sZWFuIGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhH
Q0dMYm9vbGVhbiBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxh
Zyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAg
QVNTRVJUKHNoYWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMTwogICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAg
IGdsOjpEaXNhYmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODks
NyArMTA4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5
cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBm
aXJzdCwgR0NHTHNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xlCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2Fw
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0NHTHVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50
IGluZGV4KQogICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1
c2goKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExMzksNyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNo
KCkKICAgICBnbDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBs
ZXZlbCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMTU2LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE2NCw3ICsxMTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3Miw3ICsxMTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVN
aXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9W
QUxVRSk7CkBAIC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwg
aW5mbyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1J
bXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDRwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJv
Z3JhbSwgaW5kZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4
Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZv
cm1HTE9iamVjdCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwg
bWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBp
ZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAg
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0
cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJu
IG1vdmVkQW5FcnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEVycm9yKCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsK
ICAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCkBAIC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0xMzA3LDcgKzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0
cmluZyhHQ0dMZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1v
ZGUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTMxNSw3ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2Rl
KTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKICAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0xMzM0LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXAp
OwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZl
cihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQog
ewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEz
NDUsNyArMTMzOSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0Zy
YW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJ
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpA
QCAtMTM1Niw3ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1By
b2dyYW0ocHJvZ3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgcmVuZGVyYnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBy
ZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
QEAgLTEzODksNyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNU
ZXh0dXJlKHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0
aCh3aWR0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQgcGFyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFt
KQogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9h
dCB1bml0cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dM
ZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYg
dmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAs
NyArMTQyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdl
KEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVy
YWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
Y2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0x
NDUxLDcgKzE0NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJT
b3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0g
ZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBt
YXNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE0NTksNyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywg
R0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGlu
dCByZWYsIEdDR0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLAogICAgIGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQ3NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE1hc2soR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0
ZShmYWNlLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdD
R0xlbnVtCiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShm
YWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xm
bG9hdCB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsx
NTAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2
YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyAr
MTUxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbAogICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAg
ICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0y
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsK
ICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAog
ICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2
MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXpl
ICUgMykpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyAr
MTU3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlm
b3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJh
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50
IHYxCiAgICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
IHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bgogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXku
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCwgR0NHTGludCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAzLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xp
bnQgdjIsIEdDR0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBH
Q0dMaW50IHYzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQog
ewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
CiAgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1N
YXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAg
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAg
ICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MTY3NSw3ICsxNjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRl
eEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAg
ICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZgogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxv
YXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBn
bDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgND4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cK
ICAgICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRl
eCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBH
Q0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNp
emUsCiAgICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1h
bGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTc3Myw3ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVy
dGV4QXR0cmliSVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
CiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE3OTQsNyArMTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTgwNiw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0
ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTE4MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGds
OjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4MjgsNyArMTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJv
b2xlYW4+CiAgICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNp
emUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0g
MDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAg
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xF
KHBuYW1lLCB2YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdD
R0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBu
YW1lKQorR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dM
ZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgpCiB7CiAgICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYs
NyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTg5MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBj
b25zdCBTdHJpbmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAg
VU5VU0VEX1BBUkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sCiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogCkBAIC0xOTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmko
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChz
aGFkZXIpOwogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTcz
LDEyICsxOTY3LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVk
SW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxh
dGZvcm1HTE9iamVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAg
IEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTk4Nyw3ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlv
biwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9n
cmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3
ICsyMDE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVp
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5k
YXRhKTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogCkBAIC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAg
IHJldHVybiBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CiB9CiAKLUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQg
aW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5k
ZXgsIEdDR0wKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAg
IHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICBy
ZXR1cm4gbzsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlUHJvZ3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVByb2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVh
dGVQcm9ncmFtKCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
ICAgIHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIw
ODMsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
aGFkZXIoR0NHTGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9
PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURF
Uik7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRleHR1cmUoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVh
dGVUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRl
bGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAg
ICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6
RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVy
KQogICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6
OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2
MSw3ICsyMTU1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LnJlbW92ZUFsbCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQg
dG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRv
CiAgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0
RXJyb3Igd2lsbCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50
aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zm9yY2VDb250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNl
Q29udGV4dExvc3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNw
YXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIy
MjMsNyArMjIxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0
ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIy
Niw3IEBAIEdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJ
bmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3Jt
QmxvY2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yMjUyLDcgKzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTAogCiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0
dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGds
OjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6
OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRRdWVyeU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogCiAvLyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVl
ZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5z
Zm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAg
ICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVk
YmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0
IHRyYW5zZm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xP
YmplY3QgdHJhbnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9y
bUZlZWRiYWNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1G
ZWVkYmFjaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MzM0LDcgKzIzMjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNm
b3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJh
bnNmb3JtRmVlZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1G
ZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2Rl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjM1MCw3ICsyMzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dM
ZW51bSBidWZmZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyhwcm9ncmFtLCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3Mu
ZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0g
MDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAg
Z2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZT
aXplKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBp
bmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsCiAgICAgZ2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNy
Y1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50
IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dM
Yml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNDAzLDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpC
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NH
TGludCBsYXllcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0
dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVM
YXllcih0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0
YXJnZXQsIGF0dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVi
dWZmZXIodGFyZ2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRC
dWZmZXIoR0NHTGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNy
Yyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlclRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIC0xOwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMK
ICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yNDc2LDcgKzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlm
b3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSwgR0NHTHVpbnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
NDg0LDcgKzI0NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3Jt
M3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYw
LCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dQogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gMiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCgh
KGRhdGEuYnVmU2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MjUxOCw3ICsyNTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9y
bTN1aXYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1CiAgICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSA2KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyAr
MjUzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgy
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgz
eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlv
biwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZT
aXplIC8gOCwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xl
YW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAg
ICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJh
bnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQo
IShkYXRhLmJ1ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yNTcyLDcgKzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlm
b3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRh
dGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDEyKSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyAr
MjU3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dM
dWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShp
bmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+
IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyAr
MjU5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0
aXYoaW5kZXgsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQg
eSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwg
R0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4
LCBHQ0dMdQogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMu
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1l
bnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50
IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcK
ICAgICBnbDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3Qg
R0NHTGVudW0+IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6
OkRyYXdCdWZmZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIs
IGRyYXdidWZmZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZh
bHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZm
ZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRo
LCBHQ0dMaW50IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsCiAgICAgZ2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3Rl
bmNpbCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
ICAgICBnbDo6RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJu
IGdsOjpJc1F1ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVl
KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
U2FtcGxlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0
ZVNhbXBsZXIoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAg
ICBnbDo6RGVsZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIp
CiAgICAgcmV0dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcy
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJp
KHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAK
LUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NH
TGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dM
c3luYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9u
LCBHQ0dMYml0ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZp
ZWxkIGZsYQogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQog
Ci1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5
bmMpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMg
c3luYykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMo
c3luYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NH
THN5bmMgc3luYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dM
c3luYyBzeW5jKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xz
eW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywg
R0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4
OSw3ICsyNzgzLDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdh
aXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNs
aWVudFdhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdz
LCBHQ0dMaW50NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5
bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
Nzk3LDcgKzI3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhH
Q0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3lu
YyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBw
bmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1G
ZWVkYmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVl
ZGJhY2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVk
YmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgyMyw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgzMSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6
QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0K
IAotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5p
Zm9ybU5hbWVzKQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRV
bmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB1bmlmb3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBw
YXJhbXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJs
b2NraXZSb2J1c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFt
cy5idWZTaXplLCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xzaXplaSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRp
RHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZp
cnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjg1OSw3ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVs
dGlEcmF3QXJyYXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291
bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJz
dHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBt
b2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBH
Q0dMc2l6ZWkgZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTCiAgICAgZ2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5k
YXRhLCBjb3VudHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
ODgwLDcgKzI4NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdF
bGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURy
YXdFbGVtZW50c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCks
IGRyYXdjb3VudCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9m
ZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3
Y291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjg5Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVs
dGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6
TXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwg
cG9pbnRlcnMuZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQog
ewogICAgIHNpemVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVD
b21wbGV0aW9uRmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKQEAgLTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVs
YXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVk
RXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1
cmUpIHsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29t
cGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVm
ZmVyKSwgaW1hZ2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RG
TW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZl
ci5jb250ZXh0KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAg
ICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRp
cGx5aW5nLCB3aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byBy
ZXN1bHRzID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1
bHRzICYmICFyZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1
bHRzLT5mb3JtYXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0
cy0+Zm9ybWF0KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAg
Ly8gRklYTUU6IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJv
d0J5dGVzIGFuZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXpl
ID0gcmVzdWx0cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6
ZS53aWR0aCgpICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRh
dGEoKTsKKyAgICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAx
KSAqIHJvd1N0cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChu
ZXcgdWludDhfdFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9w
ICs9IHJvd1N0cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5
KHRlbXAuZ2V0KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0
b20sIHRvcCwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCks
IHJvd1N0cmlkZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHNGb3JQYWludGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY1OWYzMWMwNzJjMzBhMWY2ZWE1MGFiZWJjOTJhY2U3NDMwYmZiMmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29z
aWEgeworY2xhc3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBI
b3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNz
IFBpeGVsQnVmZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBo
aWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7CisgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0Owor
ICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGljIEdD
R0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdD
R0xlbnVtIGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdCdWZm
ZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsK
KyAgICBlbnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAgICAg
Ly8gUmVsZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
Y2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQs
CisgICAgICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNl
VGhyZWFkUmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBT
aG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisgICAg
ICAgIC8vIGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRS
ZXNvdXJjZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMo
UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNhbXBs
aW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAgdm9p
ZCBwcmVwYXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlvbiB3
aXRob3V0IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAgaW50
IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2luZyB0
aHJvdWdoIEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2Jq
ZWN0KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBp
eGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8vIEdy
YXBoaWNzQ29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBj
b25zdCBmaW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkgZmlu
YWw7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgZmlu
YWw7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCkgZmluYWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdD
R0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVuZENv
bG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdD
R0xjbGFtcGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51bSBt
b2RlKSBmaW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2Rl
UkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdDR0xl
bnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5j
U2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0Fs
cGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAgdm9p
ZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRh
dGEsIEdDR0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRh
dGEpIGZpbmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0g
dGFyZ2V0KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5hbDsK
KyAgICB2b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdD
R0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVhckRl
cHRoKEdDR0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDR0xp
bnQgcykgZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9v
bGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFsOwor
ICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lk
IGNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlUZXhT
dWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0
LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0gbW9k
ZSkgZmluYWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7CisgICAg
dm9pZCBkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0aFJh
bmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9pZCBk
ZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7Cisg
ICAgdm9pZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0FycmF5
cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFsOwor
ICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxlKEdD
R0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dM
dWludCBpbmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lkIGZs
dXNoKCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9udEZh
Y2UoR0NHTGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dMZW51
bSB0YXJnZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBib29s
IGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBp
bmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7CisgICAg
Ym9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSogY291
bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmliTG9j
YXRpb24oUGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2
b2lkIGdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFs
dWUpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZpbmFs
OworICAgIHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+
IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFt
ZSkgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGludD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NHTGVu
dW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBu
YW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcg
Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5nIGdl
dFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25zdCBT
dHJpbmcmKTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJpKFBs
YXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0U2hh
ZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25UeXBl
LCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5hbDsK
KyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAg
IFN0cmluZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0IGdl
dFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7Cisg
ICAgR0NHTGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpIGZpbmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7Cisg
ICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRVbmlm
b3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48R0NHTHVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdDR0xz
aXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBu
YW1lKSBmaW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2Rl
KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5h
bDsKKyAgICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAgICBH
Q0dMYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIEdD
R0xib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9v
bGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9v
bGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBp
c1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgoR0NH
TGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZp
bmFsOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0p
IGZpbmFsOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxv
YXQgdW5pdHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCBy
ZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KSBmaW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdD
R0xib29sZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZv
aWQgc2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFsOwor
ICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50
IG1hc2spIGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAg
dm9pZCBzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9p
ZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNz
KSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xl
bnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAgdm9p
ZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3ViSW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NH
TGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykg
ZmluYWw7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1h
Z2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCBj
b21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmlu
YWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgY29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkgZmlu
YWw7CisgICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgpIGZp
bmFsOworICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJm
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7CisgICAg
dm9pZCB1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gdikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB4LCBHQ0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0z
ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6
KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2b2lk
IHVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgs
IEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZvaWQg
dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYp
IGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlmb3Jt
NGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOwor
ICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0
Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsKKyAg
ICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZs
b2F0IHkpIGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0
ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dM
ZmxvYXQgeikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZl
cnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdD
R0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQg
c2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0
cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7
CisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAgdm9p
ZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xz
aXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxl
bWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29y
KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmluYWw7
CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAg
IHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQg
Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJn
ZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNp
emVpcHRyKSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAg
IHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xp
bnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdD
R0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBm
aWx0ZXIpIGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZUZy
YW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFj
aG1lbnRzKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7Cisg
ICAgdm9pZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJbnRl
cm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBz
YW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5hbDsK
KyAgICB2b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0
ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5h
bGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVw
dGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xp
bnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NH
TGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCkgZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50
IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVy
LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmlu
YWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBp
bWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNzZWRU
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNp
emVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAg
IHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7
CisgICAgR0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZvaWQg
dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdD
R0x1aW50IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwg
R0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3VpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmlu
YWw7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2
b2lkIHVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCB1
bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJp
Ykk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NH
TGludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0
ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dM
dWludCB6LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2KEdD
R0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5hbDsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNp
emUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBm
aW5hbDsKKyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50
IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29u
c3QgR0NHTGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dMZW51
bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFs
dWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NH
TGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5hbDsK
KyAgICB2b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNs
ZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9h
dCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZVF1ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3Qg
cXVlcnkpIGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0gdGFy
Z2V0KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0dWko
UGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBsYXRm
b3JtR0xPYmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2FtcGxl
cihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU2Ft
cGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNhbXBs
ZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAgICB2
b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0g
cG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmYo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFt
KSBmaW5hbDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9i
amVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTYW1w
bGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKSBm
aW5hbDsKKyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0
ZmllbGQgZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykgZmlu
YWw7CisgICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBj
bGllbnRXYWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRp
bWVvdXQpIGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVsZCBm
bGFncywgR0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2koR0NH
THN5bmMsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0
ZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVk
YmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RyYW5z
Zm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmluZFRy
YW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkgZmlu
YWw7CisgICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1v
ZGUpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2
b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZpbmFs
OworICAgIHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lkIHBh
dXNlVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9ybUZl
ZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQs
IEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAgdm9p
ZCBiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZv
cm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZpbmFs
OworICAgIFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsKKyAg
ICBWZWN0b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5h
bWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsKKyAg
ICBTdHJpbmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1C
bG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxv
Y2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9pZCBn
ZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykgZmlu
YWw7CisgICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRz
LCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0FycmF5
c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZp
cnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdD
R0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NH
TGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBt
dWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
aW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBH
Q0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0
ZUJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIo
KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsKKyAg
ICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRm
b3JtR0xPYmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdM
T2JqZWN0IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3Jt
R0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0
KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBm
aW5hbDsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAg
ICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBz
eW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdldEV4
dGVuc2lvbnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVs
YXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsKKyAg
ICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFs
OworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJl
c3VsdHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5kaWYKKyAgICB2b2lkIHByZXBhcmVGb3JE
aXNwbGF5KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGZvcmNlQ29udGV4dExvc3QoKTsKKyAgICB2
b2lkIHJlY3ljbGVDb250ZXh0KCk7CisgICAgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90
aWZpY2F0aW9uKCk7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFJlbmRlcmlu
Z1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJl
YWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgIHVuc2lnbmVk
IHRleHR1cmVTZWVkKEdDR0x1aW50IHRleHR1cmUpOworCisgICAgY29uc3RleHByIHN0YXRpYyBF
R0xOYXRpdmVEaXNwbGF5VHlwZSBkZWZhdWx0RGlzcGxheSA9IEVHTF9ERUZBVUxUX0RJU1BMQVk7
CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNw
bGF5VHlwZSBsb3dQb3dlckRpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwg
LTEpOworICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgaGlnaFBlcmZv
cm1hbmNlRGlzcGxheSA9IEVHTF9DQVNUKEVHTE5hdGl2ZURpc3BsYXlUeXBlLCAtMik7CisjZW5k
aWYKKworcHJvdGVjdGVkOgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzKTsKKyAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBl
bnRyeSBwb2ludHMgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIC8vIENhbGxlZCBv
bmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBl
dmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgV0FS
Tl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyBy
ZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAorICAgIC8vIGluIHBhcnRpY3Vs
YXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCisg
ICAgLy8gY291bGQgbm90IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0
aGUgT3BlbkdMCisgICAgLy8gaW1wbGVtZW50YXRpb24uCisgICAgdm9pZCB2YWxpZGF0ZURlcHRo
U3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOworICAgIHZv
aWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAgICB2b2lkIHJlYWRuUGl4ZWxzSW1wbChHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkq
IGxlbmd0aCwgR0NHTHNpemVpKiBjb2x1bW5zLCBHQ0dMc2l6ZWkqIHJvd3MsIEdDR0x2b2lkKiBk
YXRhLCBib29sIHJlYWRpbmdUb1BpeGVsQnVmZmVyT2JqZWN0KTsKKworICAgIC8vIERpZCB0aGUg
bW9zdCByZWNlbnQgZHJhd2luZyBvcGVyYXRpb24gbGVhdmUgdGhlIEdQVSBpbiBhbiBhY2NlcHRh
YmxlIHN0YXRlPworICAgIHZvaWQgY2hlY2tHUFVTdGF0dXMoKTsKKworICAgIHN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CisgICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOworCisgICAgYm9vbCBy
ZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZUltcGwo
KTsKKyAgICB2b2lkIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVj
dCYgPSBJbnRSZWN0KCkpOworICAgIHZvaWQgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZO
ZWVkZWQoR0NHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50
IGhlaWdodCk7CisKKyAgICBib29sIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpOworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIGJvb2wgYWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoKTsKKyAgICBib29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKKyAgICBzdGF0aWMgYm9vbCBt
YWtlQ3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSwgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTCk7CisjZW5kaWYKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGNvbnRleHQg
c2hvdWxkIGJlIGxvc3QgZHVlIHRvIHRpbWVvdXQuCisgICAgYm9vbCB3YWl0QW5kVXBkYXRlT2xk
ZXN0RnJhbWUoKSBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICAvLyBQbGF0Zm9ybSBzcGVjaWZp
YyBiZWhhdmlvciBmb3IgcmVsZWFzZVJlc291cmNlcygpOworICAgIHN0YXRpYyB2b2lkIHBsYXRm
b3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygpOworCisgICAgR0NHTHVpbnQgbV90ZXh0dXJlIHsg
MCB9OworICAgIEdDR0x1aW50IG1fZmJvIHsgMCB9OworICAgIEdDR0x1aW50IG1fZGVwdGhTdGVu
Y2lsQnVmZmVyIHsgMCB9OworICAgIEdDR0x1aW50IG1faW50ZXJuYWxDb2xvckZvcm1hdCB7IDAg
fTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0IHsgMCB9OworICAg
IEdDR0x1aW50IG1fbXVsdGlzYW1wbGVGQk8geyAwIH07CisgICAgR0NHTHVpbnQgbV9tdWx0aXNh
bXBsZURlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIgeyAwIH07CisgICAgLy8gRm9yIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjp0cnVl
IHdpdGhvdXQgbXVsdGlzYW1wbGluZy4KKyAgICBHQ0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1
ZmZlclRleHR1cmUgeyAwIH07CisgICAgLy8gQXR0YWNoZXMgbV90ZXh0dXJlIHdoZW4gbV9wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIGlzIG5vbi16ZXJvLgorICAgIEdDR0x1aW50IG1fcHJl
c2VydmVEcmF3aW5nQnVmZmVyRkJPIHsgMCB9OworICAgIC8vIFF1ZXJpZWQgYXQgZGlzcGxheSBz
dGFydHVwLgorICAgIEVHTGludCBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0IHsgLTEgfTsK
KyAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCisgICAgTGlzdEhh
c2hTZXQ8R0NHTGVudW0+IG1fc3ludGhldGljRXJyb3JzOworICAgIGJvb2wgbV9pc0ZvcldlYkdM
MiB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV9zdGF0dXNDaGVja0NvdW50IHsgMCB9OworICAg
IGJvb2wgbV9mYWlsTmV4dFN0YXR1c0NoZWNrIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdXNlRmVu
Y2VTeW5jRm9yRGlzcGxheVJhdGVMaW1pdCA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG1heFBlbmRpbmdGcmFtZXMgPSAzOworICAgIHNpemVfdCBtX29sZGVzdEZyYW1lQ29t
cGxldGlvbkZlbmNlIHsgMCB9OworICAgIFNjb3BlZEdMRmVuY2UgbV9mcmFtZUNvbXBsZXRpb25G
ZW5jZXNbbWF4UGVuZGluZ0ZyYW1lc107CisgICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBtX3N0
YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xBTkdMRT4gbV9leHRlbnNpb25z
OworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VT
d2FwQ2hhaW4gbV9zd2FwQ2hhaW47CisgICAgRUdMRGlzcGxheSBtX2Rpc3BsYXlPYmogeyBudWxs
cHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmogeyBudWxs
cHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBtX2NvbmZpZ09iaiB7
IG51bGxwdHIgfTsKKyAgICAvLyBCYWNraW5nIHN0b3JlIGZvciB0aGUgdGhlIGJ1ZmZlciB3aGlj
aCBpcyBldmVudHVhbGx5IHVzZWQgZm9yIGRpc3BsYXkuCisgICAgLy8gV2hlbiBwcmVzZXJ2ZURy
YXdpbmdCdWZmZXIgPT0gZmFsc2UsIHRoaXMgaXMgdGhlIGRyYXdpbmcgYnVmZmVyIGJhY2tpbmcg
c3RvcmUuCisgICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gdHJ1ZSwgdGhpcyBp
cyBibGl0dGVkIHRvIGR1cmluZyBkaXNwbGF5IHByZXBhcmUuCisgICAgc3RkOjp1bmlxdWVfcHRy
PElPU3VyZmFjZT4gbV9kaXNwbGF5QnVmZmVyQmFja2luZzsKKyAgICB2b2lkKiBtX2Rpc3BsYXlC
dWZmZXJQYnVmZmVyIHsgbnVsbHB0ciB9OworI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQorICAg
IGJvb2wgbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbiB7IGZhbHNlIH07Cisg
ICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdCBtX2hpZ2hQZXJmb3JtYW5jZUdQVVJl
cXVlc3Q7CisjZW5kaWYKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgR0NHTHVp
bnQgbV9jb21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybWVkaWF0
ZVRleHR1cmUgeyAwIH07CisjZW5kaWYKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Tmljb3NpYTo6R0NHTExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbGlmIFVTRShURVhU
VVJFX01BUFBFUikKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9y
bUxheWVyPiBtX3RleG1hcExheWVyOworI2VuZGlmCisKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5z
aW9uc0dMQU5HTEU7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgZnJpZW5kIGNsYXNzIE5pY29zaWE6
OkdDR0xMYXllcjsKKyNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBmcmllbmQgY2xhc3Mg
VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCit9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0R0xDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAppbmRleCBjY2NiNTcyNGE0Y2Q5MmZm
MGJmOGU3MzgzYzVkOWZlNjg5ZDc3Yjg2Li40ZDU5Y2IxMmM1ZTQ0NzUzN2RlMGFlZTIxMGRlMDAy
Y2JkNzlmZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcApAQCAtMTA2LDcg
KzEwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdElt
YWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxCdWZm
ZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhjb25z
dCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQ
aXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCku
aXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFzU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdM
Q0cuY3BwCmluZGV4IGY3OWYyMmUzMTNlYTExNzM4OWM1ZjQwOWRkMGY0OTRhZTE1YWViOTMuLmFm
NGMxN2Q1MWZhNTlmNDY4OGRmNDM5NjUzNTE4ZjVjYTBkYWFmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdM
Q0cuY3BwCkBAIC01MDYsNyArNTA2LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0
cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGkKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0Nh
bnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRy
aWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRTaXplJiBjYW52YXNT
aXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMOjpw
YWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29u
dGV4dEF0dHJpYnV0ZXMsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUm
IGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQoIXBp
eGVsQnVmZmVyLnNpemUoKS5pc0VtcHR5KCkpOwogICAgIGlmIChjYW52YXNTaXplLmlzRW1wdHko
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaAppbmRleCAyNTU1ZmYwODMyOGUzNDY5Y2Q3
YTRhMjk3ZGJlZjc5MGY2MzA1Mjg4Li40Njg2MGJkODJlYjhjYWY4ZTc5MWExYjRkOTUzMGY4M2U4
MGNmMDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCkBAIC0yNywxNSArMjcsMjMg
QEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgogI2luY2x1ZGUgIklP
U3VyZmFjZS5oIgogCisjaWYgRU5BQkxFKFZJREVPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1
YmxpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFw
aGljc0NvbnRleHRHTENvY29hIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xDb2NvYT4gY3JlYXRlKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsKICAgICB+R3JhcGhpY3NDb250
ZXh0R0xDb2NvYSgpOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRm
b3JtRGlzcGxheSgpIGNvbnN0OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcg
cGxhdGZvcm1Db25maWcoKSBjb25zdDsKICAgICBJT1N1cmZhY2UqIGRpc3BsYXlCdWZmZXIoKTsK
ICAgICB2b2lkIG1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKTsKIApAQCAtNDksMTQgKzU3LDI0IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRldGFjaElPU3VyZmFjZUZyb21TaGFyZWRUZXh0dXJlKHZvaWQq
IGhhbmRsZSk7CiAjZW5kaWYKIAotICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIG92ZXJy
aWRlcy4KKyAgICAvLyBHcmFwaGljc0NvbnRleHRHTEFOR0xFIG92ZXJyaWRlcy4KICNpZiBFTkFC
TEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVyZUZyb21NZWRpYShNZWRpYVBsYXllciYsIFBs
YXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGZpbmFsOwogI2VuZGlmCisjaWYgRU5B
QkxFKFZJREVPKSAmJiBQTEFURk9STShDT0NPQSkKKyAgICBHcmFwaGljc0NvbnRleHRHTENWKiBh
c0NWKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShDT0NPQSkK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBtX2N2OworI2Vu
ZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4
dEdMQ1ZDb2NvYTsKKyNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2Eu
bW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3MmM3N2VjYjIxOWUzOS4uNDU5YWY3
Y2IxMDlmNjE4Y2Q3NGE0Y2YzYTA1NWUyZTZhZTg3ZDk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRl
eHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURF
TykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIK
ICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxhdGZvcm1Jc0FOR0xFQXZhaWxhYmxl
KCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpID09IHRydWUgY2FzZSB0aGlz
IHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJlYWRlZCBtYW5uZXIuCiAvLyBJbiBp
c0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxzZSBjYXNlIHRoaXMgdmFyaWFibGUg
aXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1dCBhbHdheXMgc2VxdWVudGlhbGx5
CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIgYW5kIG51bGxwdHIgaXMgYWx3YXlz
IHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGN1cnJlbnRD
b250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIGN1cnJlbnRDb250ZXh0Owog
CiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKQogewpAQCAtMTQ3LDcg
KzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgfQogCiAgICAgTE9HKFdlYkdM
LCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNrZW5kLiIsIGF0dHJzLnVzZU1ldGFs
ID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRpdmVEaXNwbGF5VHlwZSBuYXRpdmVE
aXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlZmF1bHREaXNwbGF5OworICAgIEVH
TE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNlTWV0YWwpIHsKICAgICAgICAgZGlz
cGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX0FOR0xFKTsKICAg
ICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX01F
VEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRp
YWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMp
CiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0
cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAg
ZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9XRVJfQU5HTEUpOwotICAgICAgICAg
ICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsb3dQb3dlckRpc3Bs
YXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYgKHBvd2VyUHJlZmVyZW5jZSA9PSBH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1h
bmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BS
RUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVH
TF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlzcGxheTsKKyAgICAgICAgICAgIG5h
dGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpoaWdoUGVyZm9ybWFuY2VEaXNw
bGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xf
Tk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6
Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFwaGljc0NvbnRleHRHTENvY29hOjpH
cmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChXVEZNb3ZlKGF0
dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xBTkdMRShXVEZNb3ZlKGF0dHJpYnV0
ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVuY3Rpb25hbGl0eSB0aGF0IHNob3Vs
ZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29hIHRvIHNpbXBsaWZ5IHRoZSBiYXNl
IGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzKQorR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMg
YXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRycykKIHsKICAgICBtX2lzRm9yV2Vi
R0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9u
OjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICAg
ICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVuc2lvbik7CiAgICAgfQogICAgIGlm
IChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0gICAgICAgIC8vIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0
YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFwaGljc0NvbnRleHRHTEFOR0xFIHVz
ZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRp
b25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3RzIGFyZSBub3Qgc2lnbmFsaW5nIHVw
b24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVycywgc28KICAgICAgICAgLy8gT3Bl
bkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0bGluZy4gT3BlbkdMIGRyaXZlcnMg
dHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21lIHNvcnQgb2YgaW50ZXJuYWwgdGhy
b3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAK
ICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAotICAgIExPRyhXZWJHTCwgIkNyZWF0
ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRoaXMpOworICAgIExPRyhXZWJH
TCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICglcCkuIiwgdGhpcyk7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQorR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUoKQogewogICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRl
eHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVudCgpKSB7CkBAIC00NTQsNyArNDU0
LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgp
CiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAhPSB0aGlzKTsKICAgICBtX2RyYXdp
bmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9HKFdlYkdMLCAiRGVzdHJveWVkIGEg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlzKTsKKyAgICBMT0coV2ViR0wsICJE
ZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICglcCkuIiwgdGhpcyk7CiB9CiAKIGJv
b2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgpIGNvbnN0CkBAIC00NjIsMTIgKzQ2
MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmlzVmFsaWQoKSBjb25zdAogICAg
IHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1cnJlbnQo
KQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewog
ICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00ODUsNyAr
NDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50
KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0dQVVN0
YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXNDaGVjaykgewogICAgICAgICBMT0co
V2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0ICglcCkuIExvc2UgdGhlIGNvbnRl
eHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRTdGF0dXMgPSAwOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlz
aWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHko
Ym9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmICghbV9zd2l0Y2hl
c0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUyMCw3ICs1MjAsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJs
ZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwbGF5V2Fz
UmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1Jl
Y29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChtX3N3aXRjaGVzR1BV
T25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcgKzUyOSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQogICAgIGRpc3BhdGNo
Q29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAgICBBU1NFUlQo
IWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICAvLyBSZXNldCB0
aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxsb2NhdGluZyBhIG5ldyBvbmUgaW4g
b3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVzc3VyZS4KQEAgLTU0Nyw3ICs1NDcs
NyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygp
OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNw
bGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmFsbG9jYXRl
QW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAgICBBU1NFUlQoIWdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBhdXRvIGJhY2tpbmcgPSBJT1N1cmZh
Y2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVy
biBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShiYWNraW5nKSwgcGJ1ZmZlcik7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmREaXNwbGF5QnVmZmVyQmFja2lu
ZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKQorYm9v
bCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcikKIHsKICAgICBHQ0dM
ZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKICAgICBT
Y29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4dHVyZVRhcmdldCksIHRleHR1cmVU
YXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKQEAgLTU5MCw3
ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNv
bnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7CiAgICAgcmV0dXJu
IEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0Us
IGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsCiAK
IHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1
cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNobWVudFVzYWdlIHVzYWdlLCBHQ0dM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0NHTHVpbnQgcGxhbmUpCiB7Ci0g
ICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewogICAgICAgICBMT0coV2ViR0wsICJV
bmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19jYXN0PGludD4odGFyZ2V0KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2NywyNCArNjY3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2
b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNGb3JXZWJHTDI7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5n
KFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQgPT0gU2lt
dWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZXZlbnQgPT0gU2ltdWxh
dGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKSB7Ci0gICAgICAgIG1fZmFpbE5l
eHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXkoKQogewogICAgIGlmIChtX2xheWVy
Q29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0LDE1ICs3MDcsMTUgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQogCiAKICNpZiBFTkFC
TEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGljc0NvbnRleHRHTENvY29hOjphc0NW
KCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3YgPSBHcmFwaGljc0NvbnRleHRHTENW
QU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3YgPSBHcmFwaGljc0NvbnRleHRHTENW
Q29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1fY3YuZ2V0KCk7CiB9CiAjZW5kaWYK
IAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogewogICAgIGF1dG8mIGRp
c3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNw
bGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQpAQCAtNzY0LDcgKzc0
Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUoKQogewog
ICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCk7CiAg
ICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQpA
QCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlCiB9CiAjZW5kaWYKIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFk
UmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7CiB9CkBAIC04MDEs
MTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNvcHlUZXh0dXJlRnJv
bU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtRwogfQogI2VuZGlmCiAKLVBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0
Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0CitQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtQ29u
ZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdPYmo7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJjNjBmMmE3
Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjg5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklE
RU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29h
LmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVmlk
ZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgotI2luY2x1
ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0
TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBz
X3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0dHJpYnV0ZSB2ZWMyIGFfcG9zaXRp
b247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNpemU7IgotICAgICJ1bmlmb3JtIHZl
YzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBpbnQgdV9mbGlwWTsiCi0gICAgInZh
cnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3V2
VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAgICAieyIKLSAgICAiICAg
IGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAxLjApOyIKLSAgICAiICAgIHZlYzIg
bm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41ICsgLjU7IgotICAgICIgICAgaWYg
KHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFsaXplZFBvc2l0aW9uLnkgPSAxLjAg
LSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2X3lUZXh0dXJlQ29vcmRpbmF0ZSA9
IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5hdGUgPSBu
b3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19OwotCi1zdGF0aWMgY29uc3RleHByIGF1
dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKLSAgICAiYXR0cmlidXRlIHZl
YzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0dXJlU2l6ZTsiCi0gICAg
InVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAgICJ1bmlmb3JtIGludCB1X2ZsaXBZ
OyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidmFyeWlu
ZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZvaWQgbWFpbigpIgotICAgICJ7
IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24sIDAsIDEuMCk7IgotICAg
ICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9uICogLjUgKyAuNTsiCi0g
ICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAgICAgICBub3JtYWxpemVkUG9zaXRp
b24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKLSAgICAiICAgIHZfeVRleHR1cmVD
b29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95VGV4dHVyZVNpemU7IgotICAgICIg
ICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV91dlRleHR1
cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHByIGF1dG8gc195dXZGcmFnbWVudFNo
YWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyIKLSAgICAidW5p
Zm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVuaWZvcm0gc2FtcGxlcjJEIHVfdXZU
ZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JNYXRyaXg7IgotICAgICJ2YXJ5aW5n
IHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1
cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0gICAgInsiCi0gICAgIiAgICB2ZWM0
IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1X3lUZXh0dXJlLCB2X3lUZXh0dXJl
Q29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0ZXh0dXJlMkQodV91dlRleHR1cmUs
IHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIgICAgeXV2LmEgPSAxLjA7IgotICAg
ICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCi0gICAgIn0iX3MKLX07
Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyIKLSAgICAidW5pZm9ybSBzYW1w
bGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV91dlRl
eHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1hdHJpeDsiCi0gICAgInZhcnlpbmcg
dmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVy
ZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAgICAieyIKLSAgICAiICAgIHZlYzQg
eXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVjdCh1X3lUZXh0dXJlLCB2X3lUZXh0
dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0ZXh0dXJlMkRSZWN0KHVfdXZU
ZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIKLSAgICAiICAgIHl1di5hID0gMS4w
OyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVfY29sb3JNYXRyaXg7IgotICAgICJ9
Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2UgewotICAgIFVua25vd24sCi0gICAgVmlk
ZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJhbnNmZXJGdW5jdGlvbkNWIHsKLSAg
ICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBrSVRVX1JfNjAxXzQsCi0gICAga1NN
UFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQM19ENjUsCi0gICAga0lUVV9SXzIw
MjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJhbmdlRnJvbVBpeGVsRm9ybWF0KE9T
VHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBpeGVsRm9ybWF0KSB7Ci0gICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4OgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBD
YkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4
QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JD
cjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllw
Q2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0
NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhBVkUoQ09SRVZJREVPX0NPTVBSRVNT
RURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlX0FHWF80
MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlmCi0gICAgICAgIHJldHVybiBQaXhl
bFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxh
bmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBs
YW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3I4RnVs
bFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlX0FSR0IyMTAxMDEwTEVQYWNrZWQ6
Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5n
ZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3IxMEJpUGxhbmFyRnVsbFJh
bmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJGdWxs
UmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMp
Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxS
YW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6RnVsbDsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5rbm93bjsKLSAgICB9Ci19Ci0KLXN0
YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoQ0ZTdHJp
bmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQotICAgICAgICByZXR1cm4gVHJhbnNm
ZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VC
dWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1
bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAgICAgICByZXR1cm4gVHJhbnNmZXJG
dW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFn
ZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkpCi0gICAgICAgIHJldHVybiBUcmFu
c2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0gICAgaWYgKGNhbkxvYWRfQ29yZVZp
ZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKCkgJiYgQ0ZFcXVhbChzdHJpbmcs
IGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkKLSAgICAgICAgcmV0dXJuIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1h
Z2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VC
dWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlv
bkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllD
YkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZ
Q2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25D
Vjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6VW5rbm93bjsK
LX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3Qg
ewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAgICAgR0xmbG9hdCBnOwotICAgICAg
ICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAgICAgICAgc3RydWN0IHsKLSAgICAg
ICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxvYXQgY2I7Ci0gICAgICAgICAgICBH
TGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07Ci0KLSAgICBjb25zdGV4cHIgR0xm
bG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZsb2F0IGIpCi0gICAgICAgIDogcmdi
IHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3Io
aW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkKLSAgICAgICAgOiByZ2IgeyByIC8g
c2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBi
b29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xm
bG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBj
b2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBj
b2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBj
b2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0KLX07Ci0KLXN0cnVjdCBHTGZsb2F0
Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibGFjayAgIHswLCAw
LCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB3aGl0ZSAgIHsxLCAxLCAx
fTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciByZWQgICAgIHsxLCAwLCAwfTsK
LSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHswLCAxLCAwfTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVlICAgIHswLCAwLCAxfTsKLSAgICBz
dGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAgIHswLCAxLCAxfTsKLSAgICBzdGF0
aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsxLCAwLCAxfTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAxLCAwfTsKLX07Ci0KLXN0cnVjdCBZ
Q2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKLQotICAgIGNvbnN0ZXhw
ciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQg
Y3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0gICAgfQotCi0gICAgY29uc3RleHBy
IEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Ci19Owot
Ci1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdM
ZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQotICAgIDogcm93cyB7
IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkg
dGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgotICAg
IC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0gICAgLy8gQ3IgPSAoUiAtIFkpIC8g
KDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUg
ZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBL
ZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZv
ciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gUiA9IFkgKyAoMiAq
ICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCi0gICAg
Ly8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICog
MikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVz
IGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRo
IG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdp
dGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwg
WSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBh
IHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZm
aWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFu
Z2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7Ci0gICAgR0xmbG9h
dCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAy
NTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJv
d3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAo
MSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10gPSAwOwotCi0gICAgcm93c1sxXVsw
XSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3Ig
KiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVu
dCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29l
ZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKLSAgICByb3dzWzFd
WzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKLSAgICByb3dzWzJd
WzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKLSAgICBy
b3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsKLQotICAgIHJvd3NbM11bMF0gPSAw
OwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11bMl0gPSAwOwotICAgIHJvd3NbM11b
M10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJp
eCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQotICAgIC8vIGFuZCwgaW4gdGhl
IGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06Ci0gICAgZm9y
IChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7Ci0gICAg
ICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAgICAgICAgYXV0byYgeCA9IHJvd1sw
XTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAgICAgYXV0byYgeiA9IHJvd1syXTsK
LSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAgICB3IC09ICh5ICsgeikgKiAxMjgg
LyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKLSAgICAgICAg
ICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQotY29uc3RleHByIEdMZmxvYXRDb2xv
ciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAgICAgcm93c1swXVswXSAqIGNvbG9y
LnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJn
Yi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93
c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sx
XVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNv
bG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQotICAgICk7
Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRU
cmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFu
c2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdl
LCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBL
ZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0
cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsK
LQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhl
IElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAgLy8gaHR0cHM6Ly93d3cuaXR1Lmlu
dC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAx
VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKLSAgICBj
b25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6
RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01h
dHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlF
cXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRl
byBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3Nl
cnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkw
LCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwg
ICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBy
ZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlk
ZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3Nl
cnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUu
ZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAy
MDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdl
bnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
bWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAx
RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGlj
X2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8g
MjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAg
ODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVk
LCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
cmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwg
InIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIz
NSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAx
LjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRh
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9t
IHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgotICAg
IC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCi0gICAg
Y29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdl
OjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0
cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsK
LQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwg
IDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJs
YWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcw
OSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8g
MjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIs
ICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43
MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEu
NWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNv
bG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIu
NzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGlj
X2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8g
MjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAg
MjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1
ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Ymx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0K
LSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJ
VFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQv
cmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAy
MFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07Ci0gICAg
Y29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5n
ZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZp
ZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIw
MjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRl
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIw
IHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7Ci0gICAgc3RhdGlj
X2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVm
IC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIw
IHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4g
Y29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIw
IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAv
IDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3
MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIw
LCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50
YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBt
YWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdM
ZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0gICAgLy8gTWF0cmljZXMgYXJlIGRl
cml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmlj
YXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYx
LwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXgg
eyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07Ci0gICAgY29uc3RleHByIHN0YXRp
YyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4w
ODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVv
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBj
b2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9h
dENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1
LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVv
TWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0
ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQs
IDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRh
LCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNf
YXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41
ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFj
ayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJp
eCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21w
dGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiks
ICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzks
IDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Omdy
ZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYg
LyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNt
cHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYp
LCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsK
LQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKLSAgICAgICAgbWF0cmljZXMuZ2V0
KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6
a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMuZ2V0KCku
ZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRV
X1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxh
Y2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83
MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2Uo
TWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8y
KSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtl
eShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0
MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXko
UGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAy
MEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhl
bFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21w
dGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtl
eShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUp
LCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQotICAgIC8vIFdlIHNob3VsZCBuZXZl
ciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMg
dW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7Ci0gICAg
aWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0gICAgICAgIHJhbmdlID0gUGl4ZWxS
YW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHty
YW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8gQXNzdW1lIHVua25vd24gdHJhbnNm
ZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRlcmF0b3IgPT0gbWF0cmljZXMuZ2V0
KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmljZXMuZ2V0KCkuZmluZCh7cmFuZ2Us
IFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7Ci0KLSAgICBBU1NFUlQoaXRlcmF0
b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJldHVybiBpdGVyYXRvci0+c2Vjb25k
OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFPiBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4
dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFPiBjdiB7
IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4dCkgfTsKLSAgICBpZiAoIWN2LT5t
X2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBjdjsKLX0KLQot
R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKCkKLXsK
LSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJy
ZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGdsOjpEZWxl
dGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0gICAgZ2w6OkRlbGV0ZUZyYW1lYnVm
ZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxh
eSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjpHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG93bmVyKQotICAgIDogbV9v
d25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0aWJsZSBjb250ZXh0IHRoYXQgc2hh
cmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBkb2VzIG5vdAotICAgIC8vIGhhdmUg
cm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5LgotICAgIGNvbnN0IEVHTGludCBjb250
ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwK
LSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAyLAotICAgICAgICBFR0xfQ09OVEVY
VF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUsCi0gICAgICAgIEVHTF9GQUxTRSwK
LSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19FTkFCTEVEX0FOR0xFLAotICAgICAg
ICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJTkRfR0VORVJBVEVTX1JFU09VUkNF
X0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9OT05FCi0gICAgfTsK
LSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0Zm9ybURpc3BsYXkoKTsKLSAgICBF
R0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25maWcoKTsKLSAgICBFR0xDb250ZXh0
IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5LCBjb25maWcsIG93bmVyLm1fY29u
dGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlmIChjb250ZXh0ID09IEVHTF9OT19D
T05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1h
a2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAgYXV0byBjb250ZXh0Q2xlYW51cCA9
IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVHTF9OT19DT05URVhUKTsKLSAgICAg
ICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRleHQpOwotICAgIH0pOwotCi0gICAg
Y29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFy
Z2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
TUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQpIHsKLSAgICAgICAgZ2w6OlJlcXVl
c3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUiKTsKLSAgICAgICAg
Z2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4
Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBHTF9OT19FUlJPUikKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdMaW50IHZlcnRleFNoYWRlciA9IGds
OjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgR0xpbnQgZnJhZ21lbnRTaGFk
ZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgR0x1aW50IHl1
dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAgIGF1dG8gcHJvZ3JhbUNsZWFudXAg
PSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyLCB5dXZQcm9ncmFt
XSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgZ2w6
OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIGdsOjpEZWxldGVQcm9ncmFt
KHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNlIGFyZSB3cml0dGVuIHNvIHN0cmxl
biBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQgdnNMZW5ndGggPSB1c2VUZXh0dXJl
MkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2VmVydGV4U2hh
ZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBHTGludCBmc0xlbmd0aCA9IHVzZVRl
eHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQubGVuZ3RoKCkgOiBzX3l1dkZy
YWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBjb25zdCBjaGFyKiB2
ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1
cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZTsKLSAgICBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZTsKLQotICAg
IGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlLCAm
dnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFn
bWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBnbDo6Q29tcGlsZVNoYWRlcih2ZXJ0
ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKLSAgICBn
bDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0gICAgZ2w6OkF0dGFj
aFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2w6OkxpbmtQcm9ncmFt
KHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlzIGNoZWNrZWQgYWZ0ZXJ3YXJkcyBm
b3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24gYmVuZWZpdC4KLQotICAgIEdMdWlu
dCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5CdWZmZXJzKDEsICZ5dXZWZXJ0ZXhC
dWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQo
W3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVsZXRlQnVmZmVycygxLCAmeXV2VmVy
dGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0aWNlc1sxMl0gPSB7IC0xLCAtMSwg
MSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsKLSAgICBnbDo6QmluZEJ1ZmZlcihH
TF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0gICAgZ2w6OkJ1ZmZlckRhdGEoR0xf
QVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR0xfU1RBVElDX0RSQVcp
OwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAgICBnbDo6R2VuRnJhbWVidWZmZXJz
KDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1ZmZlckNsZWFudXAgPSBtYWtlU2Nv
cGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGludCBzdGF0dXMgPSAwOwotICAgIGds
OjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFtLCBHTF9MSU5LX1NUQVRVUywgMSwg
bnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMpIHsKLSAgICAgICAgR0xpbnQgdnNT
dGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZSb2J1c3RBTkdMRSh2ZXJ0ZXhTaGFk
ZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmdnNTdGF0dXMpOwotICAgICAgICBH
TGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKGZy
YWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwgbnVsbHB0ciwgJmZzU3RhdHVzKTsK
LSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKCVwKSAtIFlVViBw
cm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIsIHRoaXMsIHN0YXR1cywgdnNTdGF0
dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb250ZXh0Q2xlYW51
cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xlYW51cC5yZWxlYXNlKCk7Ci0gICAg
ZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBtX2Rpc3BsYXkgPSBkaXNwbGF5Owot
ICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25maWcgPSBjb25maWc7Ci0gICAgbV95
dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0gICAgbV9mcmFtZWJ1ZmZlciA9IGZy
YW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9y
bUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7Ci0gICAgbV91dlRleHR1cmVVbmlm
b3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4
dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9y
bUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4Iik7Ci0gICAgbV95dXZGbGlwWVVu
aWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfZmxp
cFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3Jt
TG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXplIik7Ci0gICAgbV91dlRleHR1cmVT
aXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAi
dV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uID0g
Z2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJhX3Bvc2l0aW9uIik7Ci0gICAgLy8g
UHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdoaWxlIHRoZSBwcm9ncmFtIGJpbmFy
eSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0oeXV2UHJvZ3JhbSk7Ci0gICAgZ2w6
OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbik7
Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0
aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAgIGdsOjpDbGVhckNvbG9yKDAsIDAs
IDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZnJhbWVi
dWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVBpeGVsQnVm
ZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIFBsYXRmb3JtR0xPYmplY3Qgb3V0
cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGN1
cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQyMGYnIHBpeGVsIGZvcm1hdHMuIElu
dmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3JtYXRzLgotICAgIE9TVHlwZSBwaXhl
bEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUoaW1hZ2UpOwotICAgIGlm
IChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyVmlk
ZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9Q
SVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhl
bEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxS
YW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBB
c2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywg
Rm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1
ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChz
dXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKLSAgICAgICAgJiYgc3VyZmFj
ZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1
cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBt
X293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7Ci0gICAgICAgIC8vIElmIHRoZSB0
ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVk
IHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNp
bmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fY29udGV4dCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9IENWUGl4ZWxCdWZmZXJHZXRXaWR0
aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoaW1h
Z2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgLy8g
VGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVkIGNvbnRlbnQgb24g
ZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAvLyBhdXRvQ2xlYXJUZXh0dXJlT25F
cnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciA9IG1h
a2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0
LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBvdXRwdXRU
ZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgbGV2ZWwsIGlu
dGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOwotICAgICAgICBn
bDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgfSk7Ci0gICAgLy8gQWxsb2Nh
dGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0gICAgZ2w6OkJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVB
Uik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBv
dXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0YXR1cyA9IGdsOjpDaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVwKSAtIFVuYWJsZSB0
byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1cmUuIiwgdGhpcyk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0dXJlcyBmb3IgdGhlIHZpZGVv
IHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5l
KHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0ID0gSU9TdXJmYWNlR2V0SGVpZ2h0
T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxhbmVXaWR0aCA9IElPU3VyZmFjZUdl
dFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRvIHV2UGxhbmVIZWlnaHQgPSBJT1N1
cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwotCi0gICAgR0xlbnVtIHZpZGVvVGV4
dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLQotICAg
IEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmdXZUZXh0dXJl
KTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt1dlRleHR1cmVd
IHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1dlRleHR1cmUpOwotICAgIH0pOwot
ICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKLSAgICBnbDo6QmluZFRleHR1cmUo
dmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZp
ZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3JlOjpjcmVhdGVQYnVmZmVyQW5kQXR0
YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZpZGVvVGV4dHVyZVRhcmdldCwgRUdM
X0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVI
ZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEpOwotICAgIGlmICghdXZIYW5kbGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2SGFuZGxlQ2xlYW51cCA9IG1ha2VT
Y29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFuZGxlXSB7Ci0gICAgICAgIFdlYkNv
cmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHV2SGFuZGxlKTsK
LSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7Ci0gICAgZ2w6OkdlblRleHR1cmVz
KDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0
KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnlUZXh0dXJlKTsK
LSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7Ci0gICAgZ2w6OkJp
bmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1cmUpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZm
ZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFy
Z2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkVELCB5UGxhbmVXaWR0aCwg
eVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAwKTsKLSAgICBpZiAoIXlI
YW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHlIYW5kbGVDbGVhbnVwID0g
bWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgeUhhbmRsZV0gewotICAgICAgICBk
ZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNwbGF5LCB5SGFuZGxlKTsKLSAgICB9
KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBwYXJhbWV0ZXJzLgotICAgIGdsOjpV
bmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMCk7Ci0gICAgZ2w6OlVuaWZvcm0x
aShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0gICAgZ2w6OlVuaWZvcm0xaShtX3l1
dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlwWTo6WWVzID8gMSA6IDApOwotICAg
IGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24sIHlQbGFuZVdpZHRo
LCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYobV91dlRleHR1cmVTaXplVW5pZm9y
bUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQpOwotCi0gICAgYXV0byByYW5n
ZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOwotICAgIGF1dG8gdHJh
bnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9tU3RyaW5nKGR5bmFtaWNfY2ZfY2Fz
dDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZl
cllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBjb2xvck1hdHJpeCA9IFlDYkNyVG9S
R0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24ocmFuZ2UsIHRyYW5zZmVyRnVuY3Rp
b24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRp
b24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAgICAvLyBEbyB0aGUgYWN0dWFsIGRy
YXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5HTEVTLCAwLCA2KTsKLQotICAgIG1f
bGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1cmZhY2VTZWVkID0gbmV3U3VyZmFj
ZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91dHB1dFRleHR1cmUsIG1fb3duZXIu
dGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1fbGFzdEZsaXBZID0gZmxpcFk7Ci0g
ICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQzMDFmMTI1MWI3MDVmMmRlNGRkNjYw
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9O
KQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5oIgotCi0jaW5jbHVkZSA8bWVtb3J5
PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0vLyBHcmFwaGljc0NvbnRleHRHTENW
IGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9mIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlv
biBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5HTEUgQ29jb2EuCi1jbGFzcyBHcmFw
aGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xDViB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+IGNyZWF0ZShHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSgpIGZpbmFsOwot
Ci0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiwgUGxh
dGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSkgZmluYWw7
Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4dHVyZVNlZWQoR0NHTHVpbnQgdGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RUZXh0dXJlU2VlZC5nZXQodGV4dHVy
ZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG1fb3duZXI7Ci0gICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9kaXNwbGF5IHsgbnVsbHB0ciB9Owot
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0IHsgbnVsbHB0ciB9OwotICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWcgeyBudWxscHRyIH07Ci0K
LSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIgeyAwIH07Ci0gICAgUGxhdGZvcm1H
TE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAgICBHQ0dMaW50IG1feVRleHR1cmVV
bmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV91dlRleHR1cmVVbmlmb3JtTG9j
YXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiB7IC0x
IH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKLSAg
ICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NH
TGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBt
X3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotCi0gICAgRmxpcFkgbV9sYXN0
RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2ludGVyPElPU3VyZmFjZVJlZj4gbV9s
YXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJmYWNlU2VlZCB7IDAgfTsKLQotICAg
IHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dMdWludCwgdW5zaWduZWQsIEludEhh
c2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50
Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVyZVNlZWQ7Ci19OwotCi19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3Jh
cGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U4OGIwNzk2
NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5j
cHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oIgorCisjaWYgRU5BQkxFKFdFQkdM
KSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJBTkdM
RVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxwYWwv
c3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNl
U1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1Nj
b3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2Fz
dHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworI2luY2x1ZGUg
IkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNv
bnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAiYXR0cmlidXRl
IHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0dXJlU2l6ZTsiCisg
ICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ1bmlmb3JtIGludCB1X2Zs
aXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIKKyAgICAidmFy
eWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZvaWQgbWFpbigpIgorICAg
ICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24sIDAsIDEuMCk7Igor
ICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9uICogLjUgKyAuNTsi
CisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAiICAgICAgICBub3JtYWxpemVkUG9z
aXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKKyAgICAiICAgIHZfeVRleHR1
cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIKKyAgICAiICAgIHZfdXZUZXh0dXJl
Q29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisgICAgIn0iX3MKK307CisKK3N0YXRp
YyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmVSZWN0YW5nbGUgeworICAg
ICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfeVRleHR1
cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0dXJlU2l6ZTsiCisgICAgInVuaWZv
cm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7
IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKKyAgICAidm9pZCBt
YWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoYV9wb3NpdGlvbiwg
MCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQb3NpdGlvbiA9IGFfcG9zaXRpb24g
KiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09IDEpIgorICAgICIgICAgICAgIG5v
cm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXplZFBvc2l0aW9uLnk7IgorICAgICIg
ICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3lUZXh0dXJl
U2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRp
b24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9OworCitjb25zdGV4cHIgYXV0byBz
X3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0dXJlOyIKKyAgICAidW5pZm9ybSBz
YW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1hdHJpeDsi
CisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZhcnlpbmcg
dmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2b2lkIG1haW4oKSIKKyAgICAieyIK
KyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEKHVfeVRleHR1
cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAiICAgIHl1di5nYiA9IHRleHR1cmUy
RCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRlKS5yZzsiCisgICAgIiAgICB5dXYu
YSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5dXYgKiB1X2NvbG9yTWF0cml4OyIK
KyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IgorICAg
ICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsiCisgICAgInVuaWZvcm0gc2FtcGxl
cjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0gbWF0NCB1X2NvbG9yTWF0cml4OyIK
KyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2
ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZvaWQgbWFpbigpIgorICAgICJ7Igor
ICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIgPSB0ZXh0dXJlMkRSZWN0KHVfeVRl
eHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAiICAgIHl1di5nYiA9IHRleHR1
cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgorICAgICIg
ICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1h
dHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3MgUGl4ZWxSYW5nZSB7CisgICAgVW5r
bm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKworZW51bSBjbGFzcyBUcmFuc2ZlckZ1
bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9SXzcwOV8yLAorICAgIGtJVFVfUl82
MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtEQ0lfUDMsCisgICAga1AzX0Q2NSwK
KyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhlbFJhbmdlIHBpeGVsUmFuZ2VGcm9t
UGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQoreworICAgIHN3aXRjaCAocGl4ZWxGb3Jt
YXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80NDQ0QVlwQ2JDcjg6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRU
eXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZv
cm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisjaWYgSEFWRShDT1JF
VklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCisgICAgY2FzZSBrQ1ZQaXhlbEZv
cm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6CisjZW5kaWYKKyAgICAg
ICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
XzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVf
NDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
XzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQVJHQjIx
MDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3IxMEJp
UGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjEw
QmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNy
MTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVWSURFT19DT01QUkVTU0VEX1BJWEVM
X0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNy
OEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpG
dWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpVbmtub3duOwor
ICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uRnJv
bVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAg
IHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247CisgICAgaWYgKENGRXF1YWwoc3Ry
aW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzcwOV8yKSkKKyAgICAgICAgcmV0
dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yOworICAgIGlmIChDRkVxdWFsKHN0
cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl82MDFfNCkpCisgICAgICAgIHJl
dHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFfNDsKKyAgICBpZiAoQ0ZFcXVhbChz
dHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1KSkKKyAgICAg
ICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRFXzI0ME1fMTk5NTsKKyAgICBpZiAo
Y2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9EQ0lfUDMoKSAmJiBD
RkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9EQ0lfUDMpKQorICAgICAg
ICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1AzOworICAgIGlmIChjYW5Mb2FkX0Nv
cmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSgpICYmIENGRXF1YWwoc3Ry
aW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSkpCisgICAgICAgIHJldHVybiBU
cmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tD
VkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgpICYmIENGRXF1YWwoc3RyaW5nLCBr
Q1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjApKQorICAgICAgICByZXR1cm4gVHJh
bnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlv
bkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENvbG9yIHsKKyAgICB1bmlvbiB7Cisg
ICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0IHI7CisgICAgICAgICAgICBHTGZs
b2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAgICAgIH0gcmdiOworICAgICAgICBz
dHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAgICAgICAgICAgR0xmbG9hdCBjYjsK
KyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0geWNiY3I7CisgICAgfTsKKworICAg
IGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBHTGZsb2F0IGcsIEdMZmxvYXQgYikK
KyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7CisgICAgfQorCisgICAgY29uc3RleHBy
IEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBHTGZsb2F0IHNjYWxlKQorICAgICAg
ICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8gc2NhbGUgfQorICAgIHsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOworICAgIH0KKwor
ICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xmbG9hdENv
bG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCisgICAgICAgICAgICAm
JiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCisgICAgICAgICAgICAm
JiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOworICAgIH0KK307CisK
K3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xv
ciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9y
IHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3Ig
cmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBn
cmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9yIGJs
dWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IgY3lh
biAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdl
bnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9hdENvbG9yIHllbGxv
dyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JNYXRyaXggeworICAgIEdMZmxvYXQg
cm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZs
b2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7CisKKyAgICBvcGVyYXRv
ciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gJnJvd3NbMF1b
MF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3Qg
R0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNy
TWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBj
ckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAgICAvLyBUaGUgY29udmVyc2lvbiBm
cm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06CisgICAgLy8gWSA9IEty
ICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBL
YikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKKyAgICAvLyBXaGVyZSB0
aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5k
IEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQorICAgIC8vCisgICAgLy8gU29s
dmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xs
b3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCisgICAgLy8gQiA9IFkg
KyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChL
YiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgorICAgIC8vCisg
ICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5n
ZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQorICAg
IC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNv
bG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQorICAgIC8v
IGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KKworICAgIEdMZmxvYXQg
Y2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKKyAgICBH
TGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6
IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09
IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOworCisgICAgcm93c1swXVsw
XSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0gPSAwOworICAgIHJvd3NbMF1bMl0g
PSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOworICAgIHJvd3Nb
MF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3Nb
MV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChj
YkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAgcm93c1sxXVsyXSA9IC1jYmNyU2Nh
bGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBj
Z0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsKKworICAgIHJvd3NbMl1bMF0gPSB5
U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICog
KDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJdID0gMDsKKyAgICByb3dzWzJdWzNd
ID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJvd3NbM11bMV0gPSAwOworICAgIHJv
d3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOworCisgICAgLy8gQ29uZmlndXJlIHRo
ZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEy
OCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZl
cnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJl
ciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVy
XTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsK
KyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKKwor
ICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7CisgICAgICAgIGlmIChyYW5nZSA9PSBQ
aXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OworICAgIH0K
K30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0
IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdMZmxvYXRDb2xvcigK
KyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJn
Yi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKKyAgICAgICAgcm93
c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sx
XVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAgICAgICAgcm93c1syXVswXSAqIGNv
bG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9y
LnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0YXRpYyBjb25zdCBHTGZsb2F0KiBZ
Q2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFu
Z2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQoreworICAgIHVzaW5nIE1h
cEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OworICAgIHVz
aW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47CisKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKKyAgICBzdGF0aWMg
ZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVk
IGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9u
CisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCisgICAgY29uc3Rl
eHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRl
bywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2
MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKKworICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFj
ayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01h
dHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlF
cXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRl
byBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYp
LCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAs
IDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAg
ICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1
ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlk
ZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19h
c3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAy
NTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7
CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAg
IDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJs
YWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNl
IGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2Vy
dCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYp
LCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAx
MDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAg
MS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAi
ci42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAv
LyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43
MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1It
UkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBy
NzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKKyAg
ICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5n
ZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19h
c3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAy
NTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2Mywg
IDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJl
ZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5Vmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkg
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19h
c3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAy
NTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgs
ICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpt
YWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChy
NzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJy
LjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVm
IC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0
LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5m
KSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYs
IDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRh
LCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdl
bnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBm
cm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgor
ICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKKyAgICBjb25zdGV4
cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6Vmlk
ZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBi
dDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKKwor
ICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAg
MTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymxh
Y2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYp
LCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3
LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVu
LCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNl
IGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQy
MDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAi
YnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIw
OSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2Vu
dGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNl
IG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIHN0YXRpY19hc3NlcnQo
KGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYp
LCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRl
LCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
d2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBG
dWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIw
MjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVm
IC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29s
b3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fz
c2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAy
NTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIp
OworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0
aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAgICAvLyBodHRwOi8vaWVlZXhwbG9y
ZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JN
YXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAu
MjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0
cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07CisKKyAgICBzdGF0aWNfYXNz
ZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNt
cHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3Io
MTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZp
ZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRF
IDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYs
ICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93
LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2
LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAx
LjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1
LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAx
MTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBi
bHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdM
ZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
c21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tl
biwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6
VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4
KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVs
bCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Cisg
ICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBU
cmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7CisgICAg
ICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOworICAgICAgICBt
YXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJG
dW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0
cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5j
dGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOworICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlv
bkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOworICAgICAgICBt
YXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1
bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKKyAgICB9
KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBG
b3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KKyAgICBBU1NFUlQocmFuZ2UgIT0g
UGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25v
d24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKKworICAgIGF1dG8gaXRlcmF0
b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24gfSk7CisK
KyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5jdGlvbnMgYXJlIHIuNjAxOgorICAg
IGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQoKSkKKyAgICAgICAgaXRlcmF0b3Ig
PSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9S
XzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1hdHJpY2VzLmdldCgpLmVuZCgp
KTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUo
R3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQ29j
b2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRleHQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+
R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCB8fCAhR3Jh
cGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9kaXNwbGF5LCBtX2NvbnRleHQpKQor
ICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJm1feXV2VmVydGV4QnVm
ZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZyYW1lYnVmZmVyKTsKKyAg
ICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOworfQorCitHcmFwaGlj
c0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYShHcmFwaGljc0NvbnRl
eHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3duZXIpCit7CisgICAgLy8gQ3JlYXRl
IGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0ZSB3aXRoIG93bmVyLCBidXQgb25l
IHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5lc3Mgb3IgV2ViR0wgY29tcGF0aWJp
bGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAg
RUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAgIG93bmVyLm1faXNGb3JXZWJHTDIg
PyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdMX0JBQ0tXQVJEU19DT01QQVRJQkxF
X0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAgIEVHTF9DT05URVhUX0NMSUVOVF9B
UlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfQ09O
VEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlVTSwKKyAgICAgICAgRUdMX0ZBTFNF
LAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gb3du
ZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmlnIGNvbmZpZyA9IG93bmVyLnBsYXRm
b3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gRUdMX0NyZWF0ZUNvbnRleHQo
ZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmosIGNvbnRleHRBdHRyaWJ1dGVzKTsK
KyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkKKyAgICAgICAgcmV0dXJuOworICAg
IEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwor
CisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRl
eHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQoZGlzcGxh
eSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQoZGlzcGxheSwg
Y29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29sIHVzZVRleHR1cmUyRCA9IG1fb3du
ZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEOworCisjaWYg
UExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKKyAgICBpZiAoIXVzZVRleHR1
cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9BTkdMRV90ZXh0
dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9F
WFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgaWYgKGdsOjpHZXRFcnJvcigp
ICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisg
ICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVS
KTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfRlJBR01F
TlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9IGdsOjpDcmVhdGVQcm9ncmFtKCk7
CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3ZlcnRleFNoYWRlciwg
ZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsK
KyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3JhbSk7CisgICAgfSk7CisgICAgLy8g
VGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJlIGNvbXBpbGUtdGltZS4KKyAgICBH
TGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJE
Lmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOwor
ICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRl
eHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlLmxl
bmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUy
RCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlID0gdXNlVGV4
dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCA6IHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIs
IDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7CisgICAgZ2w6OlNoYWRlclNvdXJj
ZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAmZnNMZW5ndGgpOwor
ICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgZ2w6OkNvbXBpbGVTaGFk
ZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hTaGFkZXIoeXV2UHJvZ3JhbSwgdmVy
dGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIGZyYWdtZW50U2hh
ZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3JhbSk7CisgICAgLy8gTGluayBzdGF0
dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0aWNhbCBwYXJhbGxlbCBjb21waWxh
dGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRleEJ1ZmZlciA9IDA7CisgICAgZ2w6
OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7CisgICAgYXV0byB5dXZWZXJ0ZXhCdWZm
ZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4QnVmZmVyXSB7CisgICAgICAgIGds
OjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOworICAgIH0pOworICAgIGZsb2F0
IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwgMSwgMSwgMSwgLTEsIDEsIC0xLCAt
MSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgeXV2VmVydGV4QnVmZmVy
KTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0aWNlcyks
IHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBHTHVpbnQgZnJhbWVidWZmZXIgPSAw
OworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKKyAgICBhdXRvIGZy
YW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2ZyYW1lYnVmZmVyXSB7CisgICAgICAg
IGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKKyAgICB9KTsKKworICAg
IEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dyYW1pdlJvYnVzdEFOR0xFKHl1dlBy
b2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAmc3RhdHVzKTsKKyAgICBpZiAoIXN0
YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7CisgICAgICAgIGdsOjpHZXRTaGFk
ZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsIDEsIG51bGxw
dHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3RhdHVzID0gMDsKKyAgICAgICAgZ2w6
OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVT
LCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFpbGVkIHRvIGxpbms6ICVkLCAlZCwg
JWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0dXMpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICB5dXZWZXJ0ZXhCdWZm
ZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZlckNsZWFudXAucmVsZWFzZSgpOwor
ICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBt
X2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1ZmZlciA9IHl1dlZlcnRleEJ1ZmZl
cjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgbV95VGV4dHVyZVVuaWZv
cm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1
cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9j
YXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7CisgICAgbV9jb2xvck1hdHJpeFVuaWZv
cm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfY29sb3JN
YXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1M
b2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAgIG1feVRleHR1cmVTaXplVW5pZm9y
bUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV95VGV4dHVy
ZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5p
Zm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZVNpemUiKTsKKyAgICBtX3l1dlBv
c2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0cmliTG9jYXRpb24oeXV2UHJvZ3Jh
bSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlzIGRlbGV0ZWQgYnkgdGhlIGNsZWFu
dXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGluIHVzZS4KKyAgICBnbDo6VXNlUHJv
Z3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV95dXZQ
b3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6VmVydGV4QXR0cmliUG9pbnRlciht
X3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7
CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBp
bWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgRmxpcFkgZmxpcFkp
Cit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgJzQyMHYnIGFu
ZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUgc3VwcG9ydGluZyBtb3JlIHBpeGVs
IGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVs
Rm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0
VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8vIE5PTElOVAorICAgICAgICAmJiBw
aXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJh
bmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCisg
ICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNy
OEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZv
cm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQorI2VuZGlmCisgICAgICAg
ICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNvcHlW
aWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3Vw
cG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFn
ZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsKKyAgICBpZiAoZmxp
cFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCisg
ICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVkCisgICAgICAgICYm
IGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91
dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1v
ZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCisgICAg
ICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQg
d2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJy
ZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
c2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKGltYWdlKTsKKyAgICBzaXplX3Qg
aGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFnZSk7CisKKyAgICBnbDo6Vmlld3Bv
cnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBUaGUgb3V0cHV0VGV4dHVyZSBtaWdo
dCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBlYXJseS1vdXRzLiBDbGVhciBpdCBp
biBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVycm9yIGlzIG5vdCByZXNldC4KKyAg
ICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFrZVNjb3BlRXhpdChbb3V0cHV0VGV4
dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGVdIHsKKyAgICAgICAgZ2w6
OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOworICAgICAgICBnbDo6
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIDAs
IGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBvdXRw
dXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgb3V0cHV0VGV4
dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9N
QUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7
CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIGxl
dmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBudWxs
cHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xf
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsK
KyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVC
VUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAg
ICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5VmlkZW9UZXh0
dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBmcmFtZWJ1ZmZlciBm
b3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAgICAvLyBCaW5kIGFu
ZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8gc291cmNlLgorICAgIGF1dG8geVBs
YW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUoc3VyZmFjZSwgMCk7CisgICAgYXV0
byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDApOwor
ICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2Us
IDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodE9mUGxhbmUo
c3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gbV9vd25lci5k
cmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAgR0x1aW50IHV2VGV4dHVyZSA9IDA7
CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUpOworICAgIGF1dG8gdXZUZXh0dXJl
Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0geworICAgICAgICBnbDo6RGVsZXRl
VGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7CisgICAgZ2w6OkFjdGl2ZVRleHR1cmUo
R0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHV2
VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFy
Z2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgYXV0byB1dkhh
bmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5
LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9B
TkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR0xfVU5TSUdORURfQllU
RSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1f
ZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29yZTo6ZGVzdHJveVBidWZmZXJBbmRE
ZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOworICAgIH0pOworCisgICAgR0x1aW50
IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJnlUZXh0dXJlKTsKKyAgICBh
dXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3lUZXh0dXJlXSB7CisgICAgICAg
IGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOworICAgIH0pOworICAgIGdsOjpBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJl
VGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFy
Z2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9U
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
YXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZlckFuZEF0dGFjaElPU3VyZmFjZSht
X2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJnZXQsIEVHTF9JT1NVUkZBQ0VfUkVB
RF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQsIEdMX1VOU0lH
TkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhhbmRsZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtkaXNwbGF5
ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNo
SU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0pOworCisgICAgLy8gQ29uZmlndXJl
IHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVuaWZvcm0xaShtX3lUZXh0dXJlVW5p
Zm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1fdXZUZXh0dXJlVW5pZm9ybUxv
Y2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2RmxpcFlVbmlmb3JtTG9jYXRpb24s
IGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3lUZXh0
dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCk7CisgICAg
Z2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24sIHV2UGxhbmVXaWR0
aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdlID0gcGl4ZWxSYW5nZUZyb21QaXhl
bEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFuc2ZlckZ1bmN0aW9uID0gdHJhbnNm
ZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDVkJ1ZmZl
ckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXksIG5pbCkp
KTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JHQk1hdHJpeEZvclJhbmdlQW5kVHJh
bnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbik7CisgICAgZ2w6OlVuaWZvcm1N
YXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiwgMSwgR0xfRkFMU0UsIGNvbG9y
TWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJhd2luZy4KKyAgICBnbDo6RHJhd0Fy
cmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9sYXN0U3VyZmFjZSA9IHN1cmZhY2U7
CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNlU2VlZDsKKyAgICBtX2xhc3RUZXh0
dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50ZXh0dXJlU2VlZChvdXRwdXRUZXh0
dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAgICBhdXRvQ2xlYXJUZXh0dXJlT25F
cnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRl
eHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBo
aWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0ZTM5NjBiNmQ3MDgwZTRjMzk0MGI4
YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaApAQCAtMCwwICsxLDgy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpICYmIEVO
QUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVW5zYWZlUG9p
bnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTENv
Y29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBHcmFwaGlj
c0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBp
bXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENvY29hLgorY2xhc3MgR3JhcGhpY3ND
b250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMQ1YgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xD
b2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYSgpIGZpbmFsOworCisgICAg
Ym9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1H
TE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSkgZmluYWw7CisKK3By
aXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKEdyYXBoaWNzQ29udGV4dEdMQ29j
b2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVTZWVkLmdldCh0ZXh0dXJlKTsKKyAg
ICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBtX293bmVyOworICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7IG51bGxwdHIgfTsKKyAgICBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsgbnVsbHB0ciB9OworCisgICAgUGxh
dGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9OworICAgIFBsYXRmb3JtR0xPYmplY3Qg
bV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGludCBtX3lUZXh0dXJlVW5pZm9ybUxv
Y2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsg
LTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3JtTG9jYXRpb24geyAtMSB9OworICAg
IEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07CisgICAgR0NHTGlu
dCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV95
VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV91dlRleHR1
cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAgIEZsaXBZIG1fbGFzdEZsaXBZIHsg
RmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1cmZhY2VSZWY+IG1fbGFzdFN1cmZh
Y2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQgeyAwIH07CisKKyAgICB1c2luZyBU
ZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVuc2lnbmVkLCBJbnRIYXNoPEdDR0x1
aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4+OworICAg
IFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOworfTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCmluZGV4IGI4MzJhMTg2YTQyYzhiZTMy
MmE0YzcwODFmNzVkY2Q0OTBjMjdmODguLjNmZDc0YmUyMDlhMTNjNTAxNmVmNTU3ZTIxYWI3YzU5
ZmQ0OGNhZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcApAQCAtMSw3
ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTW96aWxsYSBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nl
b2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwyMiArMjMsMjg2MyBAQAogICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQog
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBFTkFCTEUoV0VCR0wpICYmICFVU0Uo
QU5HTEUpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKKyNpbmNsdWRlICJBTkdMRVdlYktp
dEJyaWRnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxt
ZW1vcnk+CisjaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgorI2luY2x1ZGUgIldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1
bGFyRXhwcmVzc2lvbi5oPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hleE51
bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIkV4
dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5H
TC5oIgorI2VuZGlmCisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlTaGltcy5o
IgorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjZWxp
ZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIFRocmVhZFNwZWNpZmlj
PFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpCit7Cisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0YXRpYyBUaHJlYWRTcGVj
aWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWROYW1lSGFzaDsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlRmxhZywgW10geworICAgICAgICBzaGFyZWROYW1lSGFzaCA9IG5ldyBUaHJlYWRTcGVj
aWZpYzxTaGFkZXJOYW1lSGFzaCo+OworICAgIH0pOworCisgICAgcmV0dXJuICpzaGFyZWROYW1l
SGFzaDsKK30KKworc3RhdGljIHZvaWQgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKFNo
YWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkKK3sKKyAgICAqZ2V0Q3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFzaDsKK30KKworLy8gSGFzaCBmdW5jdGlvbiB1
c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2NvbXBpbGVyIHRvIGRvCisvLyBzeW1ib2wgbmFt
ZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBtZXRob2QsIGJlZm9yZQorLy8gY2Fs
bGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIKKy8v
IHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTC4KKworc3RhdGljIHVpbnQ2NF90IG5hbWVIYXNoRm9yU2hhZGVy
KGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5ndGgpCit7CisgICAgaWYgKCFsZW5ndGgpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmluZyBuYW1lQXNDU3RyaW5nID0gQ1N0cmluZyhu
YW1lKTsKKworICAgIC8vIExvb2sgdXAgbmFtZSBpbiBvdXIgbG9jYWwgbWFwLgorICAgIFNoYWRl
ck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyID0gKmdldEN1cnJlbnROYW1l
SGFzaE1hcEZvclNoYWRlcigpOworICAgIFNoYWRlck5hbWVIYXNoOjppdGVyYXRvciBmaW5kUmVz
dWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5maW5kKG5hbWVBc0NTdHJpbmcpOwor
ICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+ZW5kKCkp
CisgICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZTsKKworICAgIHVuc2lnbmVkIGhhc2hW
YWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOworCisgICAgLy8gQ29udmVydCB0aGUgMzItYml0
IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8gYSA2NC1iaXQgcmVzdWx0CisgICAgLy8gYnkg
c2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUgb2Ygb3VyIHRhYmxlLiBPdmVyZmxvdyB3b3Vs
ZAorICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlmIHdlJ3JlIGFscmVhZHkgaGFzaGluZyB0byB0
aGUgc2FtZSB2YWx1ZSAoYW5kCisgICAgLy8gd2UncmUgaG9waW5nIHRoYXQgb3ZlciB0aGUgbGlm
ZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKKyAgICAvLyBkb24ndCBoYXZlIHRoYXQgbWFueSBzeW1i
b2xzKS4KKworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGhhc2hWYWx1ZTsKKyAgICByZXN1bHQgPSAo
cmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNpemUoKSArIDEp
OworCisgICAgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5zZXQobmFtZUFzQ1N0cmluZywg
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb24pCit7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisK
KyAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25z
KCk7CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3Vw
cG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgZXh0ZW5z
aW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgICAg
ICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBhdHRy
cy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXR0cnMuc3RlbmNp
bCA9IGZhbHNlOworICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgfQor
ICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1faXNGb3JXZWJHTDIpIHsKKyAgICAgICAgaWYg
KCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
KSB7CisgICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgICAgIHNl
dENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBl
eHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
Iik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4
dHVyZSgpCit7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKworI2lm
ICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBz
Y29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9w
ZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOworI2VuZGlmCisK
KyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpCisgICAgICAgIHJlc29sdmVN
dWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKyAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBz
dGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICA6OmdsRnJhbWVidWZmZXJU
ZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQs
IEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xGbHVzaCgpOworCisgICAgQVNT
RVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBp
ZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyk7CisgICAgZWxzZQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIHJldHVybjsKKyNlbmRpZgorCisg
ICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX3N0YXRlLmJvdW5kVGFyZ2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9URVhU
VVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUoR0xfVEVYVFVSRTApIDogMCk7CisgICAgOjpn
bEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCk7CisgICAgQVNTRVJUKG1f
c3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAobV9z
dGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7
CisgICAgOjpnbEZsdXNoKCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCit7CisgICAgYm9vbCBt
dXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlh
bGlhcykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisgICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
LCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdG
Qk8pOworICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pIHsKKyAgICAg
ICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAg
IH0KKyAgICB9CisgICAgYXV0byByZXN1bHQgPSByZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7
CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICh3aWR0aCA9PSBtX2N1cnJl
bnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7CisgICAgaWYgKHdpZHRoIDwg
MCB8fCBoZWlnaHQgPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsK
KworICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CisgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVp
Z2h0OworCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAgICBUZW1wb3JhcnlPcGVuR0xT
ZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CisgICAgVGVt
cG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Cisg
ICAgCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHJlc2hhcGVGQk9zKEludFNpemUod2lkdGgs
IGhlaWdodCkpOworCisgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAg
R0xmbG9hdCBjbGVhckNvbG9yW10gPSB7IDAsIDAsIDAsIDAgfSwgY2xlYXJEZXB0aCA9IDA7Cisg
ICAgR0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKKyAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7
IEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUgfSwgZGVwdGhNYXNrID0gR0xfVFJV
RTsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sg
PSAweGZmZmZmZmZmOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVS
X0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9y
KTsKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYo
R0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CisKKyAgICBhdXRvIGF0dHJzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAgICA6OmdsR2V0
RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKDEpOworICAgICAgICA6OmdsR2V0Qm9vbGVh
bnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFz
ayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Cisg
ICAgfQorICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihH
TF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbENsZWFy
U3RlbmNpbCgwKTsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNL
LCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIDo6Z2xH
ZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdM
aW50Kj4oJnN0ZW5jaWxNYXNrQmFjaykpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0
ZShHTF9GUk9OVCwgMHhmZmZmZmZmZik7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRl
KEdMX0JBQ0ssIDB4ZmZmZmZmZmYpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9C
VUZGRVJfQklUOworICAgIH0KKworICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOworCisgICAgOjpn
bENsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwg
Y2xlYXJDb2xvclszXSk7CisgICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFz
a1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOworICAgIGlmIChhdHRycy5kZXB0aCkg
eworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRo
KTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0aE1hc2spOworICAgIH0KKyAgICBpZiAoYXR0
cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Cisg
ICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7Cisg
ICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7
CisgICAgfQorCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERy
YXdGQk8pOworCisgICAgYXV0byBlcnJvciA9IDo6Z2xHZXRFcnJvcigpOworICAgIGlmIChlcnJv
ciAhPSBHTF9OT19FUlJPUikgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBP
cGVuR0wgZXJyb3IgZHVyaW5nIEdyYXBoaWNzQ29udGV4dEdMIGJ1ZmZlciBpbml0aWFsaXphdGlv
biAoJWQpLiIsIGVycm9yKTsKKyAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgOjpnbEZsdXNoKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4
U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAoreworICAgIEFT
U0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBBU1NF
UlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBjb25z
dCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVy
KS0+dmFsdWU7CisgICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBz
aDo6U2hhZGVyVmFyaWFibGU+IGNvbWJpbmVkVmFyeWluZ3M7CisgICAgZm9yIChjb25zdCBhdXRv
JiB2ZXJ0ZXhTeW1ib2wgOiB2ZXJ0ZXhFbnRyeS52YXJ5aW5nTWFwKSB7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgc3ltYm9sTmFtZSA9IHZlcnRleFN5bWJvbC5rZXk7CisgICAgICAgIC8vIFRoZSB2
YXJ5aW5nIG1hcCBpbmNsdWRlcyB2YXJpYWJsZXMgZm9yIGVhY2ggaW5kZXggb2YgYW4gYXJyYXkg
dmFyaWFibGUuCisgICAgICAgIC8vIFdlIG9ubHkgd2FudCBhIHNpbmdsZSB2YXJpYWJsZSB0byBy
ZXByZXNlbnQgdGhlIGFycmF5LgorICAgICAgICBpZiAoc3ltYm9sTmFtZS5lbmRzV2l0aCgiXSIp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRG9uJ3QgY291bnQgYnVpbHQg
aW4gdmFyeWluZ3MuCisgICAgICAgIGlmIChzeW1ib2xOYW1lID09ICJnbF9GcmFnQ29vcmQiIHx8
IHN5bWJvbE5hbWUgPT0gImdsX0Zyb250RmFjaW5nIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Qb2lu
dENvb3JkIikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IGF1dG8mIGZy
YWdtZW50U3ltYm9sID0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmZpbmQoc3ltYm9sTmFtZSk7
CisgICAgICAgIGlmIChmcmFnbWVudFN5bWJvbCAhPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAu
ZW5kKCkpCisgICAgICAgICAgICBjb21iaW5lZFZhcnlpbmdzLmFkZChzeW1ib2xOYW1lLCBmcmFn
bWVudFN5bWJvbC0+dmFsdWUpOworICAgIH0KKworICAgIHNpemVfdCBudW1WYXJ5aW5ncyA9IGNv
bWJpbmVkVmFyeWluZ3Muc2l6ZSgpOworICAgIGlmICghbnVtVmFyeWluZ3MpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiB2YXJpYWJs
ZXM7CisgICAgdmFyaWFibGVzLnJlc2VydmUoY29tYmluZWRWYXJ5aW5ncy5zaXplKCkpOworICAg
IGZvciAoY29uc3QgYXV0byYgdmFyeWluZ1N5bWJvbCA6IGNvbWJpbmVkVmFyeWluZ3MudmFsdWVz
KCkpCisgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyeWluZ1N5bWJvbCk7CisKKyAgICBH
Q0dMaW50IG1heFZhcnlpbmdWZWN0b3JzID0gMDsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIDo6
Z2xHZXRJbnRlZ2VydihNQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwor
I2Vsc2UKKyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdM
X01BWF9WQVJZSU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZWxzZSB7Cisg
ICAgICAgIEdDR0xpbnQgbWF4VmFyeWluZ0Zsb2F0cyA9IDA7CisgICAgICAgIDo6Z2xHZXRJbnRl
Z2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsICZtYXhWYXJ5aW5nRmxvYXRzKTsKKyAgICAgICAg
bWF4VmFyeWluZ1ZlY3RvcnMgPSBtYXhWYXJ5aW5nRmxvYXRzIC8gNDsKKyAgICB9CisjZW5kaWYK
KyAgICByZXR1cm4gc2g6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5
aW5nVmVjdG9ycywgdmFyaWFibGVzKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9y
bUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NoYWRlclNv
dXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBBU1NFUlQobV9zaGFkZXJTb3Vy
Y2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhF
bnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7CisgICAg
Y29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21l
bnRTaGFkZXIpLT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6R0xlbnVtPiB2ZXJ0
ZXhTeW1ib2xQcmVjaXNpb25NYXA7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdmVy
dGV4RW50cnkudW5pZm9ybU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVk
TmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7CisgICAgICAgIHZlcnRleFN5bWJv
bFByZWNpc2lvbk1hcC5hZGQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5s
ZW5ndGgoKSksIGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbik7CisgICAgfQorCisgICAgZm9y
IChjb25zdCBhdXRvJiBlbnRyeSA6IGZyYWdtZW50RW50cnkudW5pZm9ybU1hcCkgeworICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBl
ZE5hbWU7CisgICAgICAgIGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA9IHZlcnRleFN5bWJvbFBy
ZWNpc2lvbk1hcC5maW5kKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVu
Z3RoKCkpKTsKKyAgICAgICAgaWYgKHZlcnRleFN5bWJvbCAhPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNp
b25NYXAuZW5kKCkgJiYgdmVydGV4U3ltYm9sLT52YWx1ZSAhPSBlbnRyeS52YWx1ZS5nZXQoKS5w
cmVjaXNpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUo
R0NHTGVudW0gdGV4dHVyZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsK
KyAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChz
aGFkZXIpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAg
ICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHBy
b2dyYW0pOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFE
RVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmJpbmRB
dHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBt
YXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJv
Z3JhbSwgaW5kZXgsIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZl
cikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAg
ICBBU1NFUlQodGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKTsKKyAgICBBU1NFUlQobV9zdGF0ZS5i
b3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChmYm8gIT0gbV9z
dGF0ZS5ib3VuZERyYXdGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJn
ZXQsIGZibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJl
YWRGQk8gPSBmYm87CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJi
dWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwor
fQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0
dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7CisgICAgOjpn
bEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdD
R0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
R0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxlbmRFcXVhdGlvblNl
cGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NH
TGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVzYWdlKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3Qgdm9pZD4gZGF0
YSwgR0NHTGVudW0gdXNhZ2UpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLmJ1ZlNpemUs
IGRhdGEuZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
dWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0
LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9P
UEVSQVRJT047CisKKyAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFy
Z2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dM
Y2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bENsZWFyQ29sb3IociwgZywgYiwgYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhcihtYXNrKTsKKyAgICBjaGVj
a0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0
ZW5jaWwoR0NHTGludCBzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFu
IGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ29sb3JN
YXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBB
U1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5H
TEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQorICAgIC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAg
dG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRleHQuCisgICAgU2hCdWlsdEluUmVzb3VyY2Vz
IEFOR0xFUmVzb3VyY2VzID0gbV9jb21waWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICBTaEhhc2hG
dW5jdGlvbjY0IHByZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0
aW9uOworICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9IG5hbWVIYXNoRm9yU2hhZGVy
OworCisgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCisgICAgICAgIG5hbWVIYXNoTWFw
Rm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7CisgICAgc2V0Q3VycmVu
dE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7CisgICAg
bV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworCisgICAgU3RyaW5nIHRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRShzaGFkZXIpOworCisgICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0g
cHJldmlvdXNIYXNoRnVuY3Rpb247CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVS
ZXNvdXJjZXMpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsK
KworICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFu
c2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hh
ZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOworICAgIGludCB0cmFuc2xh
dGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcubGVuZ3RoKCk7CisKKyAg
ICBMT0coV2ViR0wsICItLS0gYmVnaW4gb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4t
LS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4iLCBnZXRTaGFkZXJTb3VyY2Uoc2hh
ZGVyKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gdHJhbnNsYXRl
ZCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNl
IC0tLSIsIHRyYW5zbGF0ZWRTaGFkZXJQdHIpOworCisgICAgOjpnbFNoYWRlclNvdXJjZShzaGFk
ZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7Cisg
ICAgCisgICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICAKKyAgICBpbnQgY29tcGls
ZVN0YXR1czsKKyAgICAKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRV
UywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgU2hhZGVyU291cmNlRW50
cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKworICAgIC8vIFBvcHVsYXRlIHRoZSBzaGFkZXIg
bG9nCisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBH
TF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworCisgICAgaWYgKGxlbmd0aCkgeworICAgICAg
ICBHTHNpemVpIHNpemUgPSAwOworICAgICAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7
CisgICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5m
by5kYXRhKCkpOworCisgICAgICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hh
ZGVyLCAwIH07CisgICAgICAgIGVudHJ5LmxvZyA9IGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVy
cywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7CisgICAgfQorCisgICAgaWYgKGNvbXBp
bGVTdGF0dXMgIT0gR0xfVFJVRSkgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Cisg
ICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBzaGFkZXIgdHJhbnNsYXRvciBwcm9kdWNlZCBhIHNo
YWRlciB0aGF0IE9wZW5HTCB3b3VsZCBub3QgY29tcGlsZS4iKTsKKyAgICB9Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaE1hcDxQbGF0Zm9ybUdMT2Jq
ZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC0+dmFsdWU7CisKKyAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5n
ID0gZW50cnkuc291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIg
PSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKKyAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3Ro
ID0gc2hhZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsKKworICAgIExPRyhXZWJHTCwgIi0tLSBi
ZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIg
c291cmNlIC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsKKworICAgIDo6Z2xTaGFkZXJTb3VyY2Uo
c2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKKworICAg
IDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgICBpbnQgY29tcGlsZVN0YXR1czsKKwor
ICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1
cyk7CisKKyAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7CisgICAgICAgIGVudHJ5
LmlzVmFsaWQgPSB0cnVlOworICAgICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24g
b2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbnRyeS5pc1Zh
bGlkID0gZmFsc2U7CisgICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRp
b24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09
IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3Rh
dGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIGlmIChh
dHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
IEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0
QXR0cmlidXRlcygpOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3Rh
dGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91
bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2Ft
cGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChhdHRycy5hbnRp
YWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
dWxsRmFjZShHQ0dMZW51bSBtb2RlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDdWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERl
cHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhN
YXNrKEdDR0xib29sZWFuIGZsYWcpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOwor
ICAgIEFTU0VSVChzaGFkZXIpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShw
cm9ncmFtKTsKKyAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xE
aXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0Fy
cmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdM
dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CisgICAgY2hlY2tHUFVTdGF0
dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVt
IGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xFbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZpbmlzaCgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbEZpbmlzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmbHVzaCgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRh
Y2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUsIEdDR0xpbnQgbGV2ZWwpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdl
dCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IDo6Z2xGcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFy
Z2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmli
SW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZv
JiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHTGlu
dCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdM
X0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOworICAgIFZl
Y3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJV
VEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgorICAgIEdMc2l6ZWkgbmFt
ZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOwor
ICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUs
ICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBpZiAoIW5hbWVM
ZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcgb3JpZ2luYWxO
YW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRS
SUJVVEUsIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOworICAgIAorI2lmbmRlZiBO
REVCVUcKKyAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwor
ICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgYXR0cmlidXRlICVk
IGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5k
YXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorCisgICAgaW5mby5u
YW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXpl
ID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0NHTGludCBzeW1ib2xDb3VudDsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3Jh
bSk7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQo
KSkgeworICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3Jh
cGhpY3NDb250ZXh0R0w6OkFDVElWRV9BVFRSSUJVVEVTLCAmc3ltYm9sQ291bnQpOworICAgICAg
ICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwor
ICAgIH0KKyAgICAKKyAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9
IHJlc3VsdC0+dmFsdWU7CisgICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xD
b3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xD
b3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwW2luZGV4XSA6IC0xOworCisg
ICAgcmV0dXJuIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZv
KQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdMaW50IG1h
eFVuaWZvcm1TaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElW
RV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CisKKyAgICBWZWN0b3I8R0xj
aGFyPiBuYW1lKG1heFVuaWZvcm1TaXplKTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdU
SCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7
CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRB
Y3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgs
ICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5h
bFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIFN0cmluZyhu
YW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBTdHJp
bmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOworICAgIExPRyhXZWJHTCwg
IlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgdW5pZm9ybSAlZCBmcm9tICclcycgdG8gJyVz
JyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5h
bWUudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAKKyAgICBpbmZvLm5hbWUgPSBvcmlnaW5h
bE5hbWU7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3Rp
dmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2
ZUluZm8mIGluZm8pCit7CisgICAgR0NHTGludCBzeW1ib2xDb3VudDsKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAg
ICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0
R0w6OkFDVElWRV9VTklGT1JNUywgJnN5bWJvbENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9z
aGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisg
ICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVl
OworICAgIEdDR0x1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVk
VG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRv
QWN0dWFsVW5pZm9ybUluZGV4TWFwW2luZGV4XSA6IC0xOworICAgIAorICAgIHJldHVybiBnZXRB
Y3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1H
TE9iamVjdCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdl
dEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQor
CitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlSGFzaGVkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB1aW50
NjRfdCBudW1iZXIgPSBuYW1lSGFzaEZvclNoYWRlcihuYW1lLnV0ZjgoKS5kYXRhKCksIG5hbWUu
bGVuZ3RoKCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJ3ZWJnbF8iLCBoZXgobnVtYmVyLCBM
b3dlcmNhc2UpKTsKK30KKworc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjptYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsK
KyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52
YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJv
bE1hcC5maW5kKG5hbWUpOworICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvJiBtYXBwZWROYW1lID0g
c3ltYm9sRW50cnktPnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7CisgICAgcmV0dXJuIFN0cmluZyht
YXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpOworfQorCitTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIEdDR0xzaXplaSBjb3VudCA9IDA7CisgICAgUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdID0geyB9OworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291
bnQsIHNoYWRlcnMpOworCisgICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNl
TWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFwcGVkTmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAg
Ly8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxp
bmtpbmcuCisgICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0p
OworICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKKyAgICAgICAg
YXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKKyAgICAgICAgYXV0byBtYXBwZWRO
YW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwg
c3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAgICAgICAgICAg
cmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBu
YW1lKTsKKyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVk
TmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1C
T0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJp
YnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFu
eSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVu
IHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgorICAgICAgICBpZiAo
IW5hbWVIYXNoTWFwRm9yU2hhZGVycykKKyAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVy
cyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7CisgICAgICAgIHNldEN1cnJlbnROYW1l
SGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOworCisgICAgICAg
IGF1dG8gZ2VuZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKKworICAgICAg
ICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICAgICAgbV9w
b3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7CisKKyAg
ICAgICAgcmV0dXJuIGdlbmVyYXRlZE5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9
CisKK3N0ZDo6b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2lu
YWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVT
aGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBh
dXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVz
dWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xN
YXAoc3ltYm9sVHlwZSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJv
bE1hcCkgeworICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBw
ZWROYW1lLmNfc3RyKCkpCisgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OworICAg
IH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFO
R0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgR0NHTHNpemVpIGNvdW50OworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXTsKKyAg
ICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKyAgICAK
KyAgICBmb3IgKEdDR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0
byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNb
aV0sIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAgICAg
ICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIC8vIFdlIG1p
Z2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgor
ICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsKKyAgICBp
ZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgpKSB7CisgICAgICAgIGF1dG8gbGlu
a2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0g
b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1i
b2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJl
dHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICAgICAgb3JpZ2luYWxOYW1lID0gb3JpZ2lu
YWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlw
ZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCisgICAgICAgICAgICByZXR1cm4g
b3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hB
REVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Ly8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBi
ZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAorICAgICAgICAvLyBhbmQgYXJl
bid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCisKKyAg
ICAgICAgY29uc3QgYXV0byYgY2FjaGVkID0gbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5m
aW5kKG5hbWUpOworICAgICAgICBpZiAoY2FjaGVkICE9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1
dGVNYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGVkLT52YWx1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gbmFtZTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50
LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgZm9yIChzaXplX3Qgc3ltYm9sVHlwZSA9IDA7
IHN5bWJvbFR5cGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihTSEFERVJfU1lNQk9MX1RZUEVfVkFS
WUlORyk7ICsrc3ltYm9sVHlwZSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ldKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3lt
Ym9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3RhdGljX2Nhc3Q8ZW51bSBBTkdMRVNo
YWRlclN5bWJvbFR5cGU+KHN5bWJvbFR5cGUpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9
PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS5rZXk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKwor
ICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJf
U1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0
cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFw
cGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2ludCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAg
ICByZXR1cm4gLTE7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gLTE7CisKKworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIG1vdmVkQW5FcnJv
ciA9IGZhbHNlOworCisgICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0
byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKKyAgICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBh
IGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBuZXZlciBjbGVhciB0aGUgZXJyb3IuCisgICAgLy8gT3Ro
ZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwgd2UgZ290IE5PX0VSUk9SLgorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBHQ0dMZW51bSBlcnJv
ciA9IGdsR2V0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7CisgICAg
ICAgIG1vdmVkQW5FcnJvciA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIG1vdmVkQW5FcnJv
cjsKK30KKworR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKK3sK
KyAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCisgICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhl
IGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJvdGgKKyAgICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0
RXJyb3IgaXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9uY2UuCisgICAgICAgIG1v
dmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgICAgICByZXR1cm4gbV9zeW50aGV0
aWNFcnJvcnMudGFrZUZpcnN0KCk7CisgICAgfQorCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCisgICAgcmV0dXJu
IDo6Z2xHZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFN0cmluZyhHQ0dMZW51bSBuYW1lKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9k
ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6
OmdsSXNCdWZmZXIoYnVmZmVyKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc0Vu
YWJsZWQoY2FwKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
RnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZy
YW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpn
bElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sK
KyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJl
dHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0pOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKworICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKK30K
KworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7Cit9CisKK0dDR0xi
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbExp
bmVXaWR0aCh3aWR0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQ
cm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisKKyAg
ICBHQ0dMc2l6ZWkgY291bnQgPSAwOworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9
IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJz
KTsKKworICAgIGlmIChjb3VudCA9PSAyKQorICAgICAgICBtX2xpbmtlZFNoYWRlck1hcC5zZXQo
cHJvZ3JhbSwgc3RkOjptYWtlX3BhaXIoc2hhZGVyc1swXSwgc2hhZGVyc1sxXSkpOworCisgICAg
OjpnbExpbmtQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsUGl4
ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGlu
dmVydCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNl
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBB
U1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworCisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7CisKKyAgICBlbnRyeS5z
b3VyY2UgPSBzdHJpbmc7CisKKyAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBXVEZN
b3ZlKGVudHJ5KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxG
dW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVu
Y2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdD
R0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2Us
IGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVt
IGZhY2UsIEdDR0x1aW50IG1hc2spCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFz
ayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51
bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxPcChm
YWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6
ZmFpbCwgR0NHTGVudW0genBhc3MpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWws
IHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHZhbHVl
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwg
cG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFmKGxvY2F0
aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwg
djEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNT
RVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXku
YnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEsIEdDR0xmbG9hdCB2MikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCgh
KGFycmF5LmJ1ZlNpemUgJSAzKSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAzLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBH
Q0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sK
KyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50
PiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXku
ZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMmkobG9j
YXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit7
CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlv
biwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NH
TGludCB2MSwgR0NHTGludCB2MikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBBU1NFUlQo
IShhcnJheS5idWZTaXplICUgMykpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5idWZT
aXplIC8gMywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dM
aW50IHYyLCBHQ0dMaW50IHYzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIs
IHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBBU1NF
UlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFy
cmF5LmJ1ZlNpemUgJSA0KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1
ZlNpemUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgOSkpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gOSwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkp
Cit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDE2KSk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXg0
ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAxNiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9n
cmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgs
IHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2
KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0
IHYwLCBHQ0dMZmxvYXQgdjEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMj4gYXJyYXkpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRl
eEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAs
IHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xm
bG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgs
IGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUs
IEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxp
emVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3Bv
cnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKK3sKKyAg
ICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xP
YmplY3QgYXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmRlbGV0ZVZlcnRleEFycmF5T0VT
KGFycmF5KTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVy
dGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKK3sKKyAgICByZXR1cm4gZ2V0RXh0ZW5z
aW9ucygpLmlzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKK3sKKyAg
ICBnZXRFeHRlbnNpb25zKCkuYmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlLmRh
dGEpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJh
bWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2
YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworCisgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRGbG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUuZGF0YSk7Cit9CisKK0dDR0xpbnQ2NCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQoreworICAg
IFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOworICAgIC8vIEZJWE1F
IDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0
byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250
ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCisgICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUs
IHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0dDR0xpbnQ2NCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
R0NHTGludDY0IHZhbHVlID0gMDsKKyAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGlu
ZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0
aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4w
LgorICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7CisgICAg
cmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
YXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg
KGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQorICAgICAgICBhdHRhY2ht
ZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIg
d29ya3MuCisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQor
CitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAg
IDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZh
bHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0
aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1l
IHx8IEFDVElWRV9VTklGT1JNUyA9PSBwbmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLmVuZCgpKSB7CisgICAgICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRG
b3JUeXBlKHBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLnNldChwcm9ncmFtLCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMo
KSk7CisgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSBtX3NoYWRl
clByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pLT52YWx1ZTsKKworICAgIC8vIFJl
dHJpZXZlIHRoZSBhY3RpdmUgYXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5k
IGEgbWFwcGluZyBvZgorICAgIC8vIG91ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8g
dGhlIHJlYWwgdW5maWx0ZXJlZCBpbmRleGVzIGluc2lkZSBPcGVuR0wuCisgICAgR0NHTGludCBh
dHRyaWJ1dGVDb3VudCA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVf
QVRUUklCVVRFUywgJmF0dHJpYnV0ZUNvdW50KTsKKyAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkg
PCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7CisgICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAgICAg
ICAgZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKKyAgICAgICAgaWYgKGlu
Zm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuYXBwZW5k
KGkpOworICAgIH0KKyAgICAKKyAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMuCisgICAg
R0NHTGludCB1bmlmb3JtQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwg
QUNUSVZFX1VOSUZPUk1TLCAmdW5pZm9ybUNvdW50KTsKKyAgICBmb3IgKEdDR0xpbnQgaSA9IDA7
IGkgPCB1bmlmb3JtQ291bnQ7ICsraSkgeworICAgICAgICBBY3RpdmVJbmZvIGluZm87CisgICAg
ICAgIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGksIGluZm8pOworICAgICAgICBpZiAo
aW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIAorICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1h
cC5hcHBlbmQoaSk7CisgICAgfQorICAgIAorICAgICp2YWx1ZSA9IHN5bWJvbENvdW50cy5jb3Vu
dEZvclR5cGUocG5hbWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBHQ0dMc2l6ZWkg
Y291bnQsIGNvbnN0IFN0cmluZyYgbG9nKQoreworICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNo
YWRlckluZm9Mb2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKworICAgIEpTQzo6WWFycjo6
UmVndWxhckV4cHJlc3Npb24gcmVnRXhwKCJ3ZWJnbF9bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl0r
Iik7CisKKyAgICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExvZzsKKyAgICAKKyAgICAvLyBBTkdM
RSBpbnNlcnRzIGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0aGUgc2hhZGVyIHNvdXJjZSB0aGF0
CisgICAgLy8gY2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNvbXBpbGVycy4gVGhlcmUgaXMgbm8g
cG9pbnQgc2hvd2luZworICAgIC8vIHRoaXMgd2FybmluZyB0byB0aGUgdXNlciBzaW5jZSB0aGV5
IGRpZG4ndCB3cml0ZSB0aGUgY29kZSB0aGF0CisgICAgLy8gaXMgY2F1c2luZyBpdC4KKyAgICBz
dGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhbmdsZVdhcm5pbmcgeyAiV0FSTklO
RzogMDoxOiBleHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxu
Il9zIH07CisgICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFydHNXaXRoKGFuZ2xlV2FybmluZykg
PyBhbmdsZVdhcm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOworICAgIGludCBtYXRjaGVkTGVuZ3Ro
ID0gMDsKKworICAgIGRvIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gcmVnRXhwLm1hdGNoKGxvZywg
c3RhcnRGcm9tLCAmbWF0Y2hlZExlbmd0aCk7CisgICAgICAgIGlmIChzdGFydCA9PSAtMSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0
cmluZyhzdGFydEZyb20sIHN0YXJ0IC0gc3RhcnRGcm9tKSk7CisgICAgICAgIHN0YXJ0RnJvbSA9
IHN0YXJ0ICsgbWF0Y2hlZExlbmd0aDsKKworICAgICAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWRT
eW1ib2wgPSBsb2cuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaGVkTGVuZ3RoKTsKKyAgICAgICAgY29u
c3QgU3RyaW5nJiBtYXBwZWRTeW1ib2wgPSBtYXBwZWRTeW1ib2xOYW1lKHNoYWRlcnMsIGNvdW50
LCBtYW5nbGVkU3ltYm9sKTsKKyAgICAgICAgTE9HKFdlYkdMLCAiRGVtYW5nbGluZzogJXMgdG8g
JXMiLCBtYW5nbGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCksIG1hcHBlZFN5bWJvbC51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChtYXBwZWRTeW1ib2wpOworICAgIH0g
d2hpbGUgKHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4obG9nLmxlbmd0aCgpKSk7CisKKyAg
ICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3Ro
KCkgLSBzdGFydEZyb20pKTsKKworICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZv
TG9nOlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBy
ZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQor
eworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAg
OjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgR0xzaXpl
aSBzaXplID0gMDsKKyAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgOjpnbEdl
dFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKwor
ICAgIEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07Cisg
ICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAg
ICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8u
ZGF0YSgpLCBzaXplKSk7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkK
K3sKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cml2RVhUKHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitH
Q0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBH
Q0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gdmFsdWU7CisKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICAKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2Fz
ZSBERUxFVEVfU1RBVFVTOgorICAgIGNhc2UgU0hBREVSX1RZUEU6CisgICAgICAgIDo6Z2xHZXRT
aGFkZXJpdihzaGFkZXIsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENPTVBJTEVfU1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKQorICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFs
dWUuaXNWYWxpZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgor
ICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAg
ICAgdmFsdWUgPSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6CisgICAgICAgIHZhbHVlID0gZ2V0
U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7CisgICAgfQorICAg
IHJldHVybiB2YWx1ZTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFk
ZXIpOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYg
ZW50cnkgPSByZXN1bHQtPnZhbHVlOworICAgIGlmICghZW50cnkuaXNWYWxpZCkKKyAgICAgICAg
cmV0dXJuIGVudHJ5LmxvZzsKKworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFNo
YWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7
CisgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgIDo6Z2xHZXRTaGFkZXJJbmZv
TG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOworCisgICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKKyAgICByZXR1cm4gZ2V0VW5tYW5n
bGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBjb25zdCBh
dXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJl
c3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OyAKKworICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKK30KKworR0NHTGZsb2F0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGZsb2F0IHZhbHVlID0gMC5mOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICA6OmdsR2V0
VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50IHZhbHVlID0g
MDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAg
cmV0dXJuIHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxHQ0dMZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24s
IHZhbHVlLmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxHQ0dMaW50PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2
YWx1ZS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9y
bXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PEdDR0x1aW50PiB2YWx1ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5V
U0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworfQorCitHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dy
YW0pOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0x
OworCisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNI
QURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmdldFVu
aWZvcm1Mb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBt
YXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK0dDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50
IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CisgICAgOjpn
bEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KHBvaW50ZXIpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGlu
dCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhVVNF
KE9QRU5HTF9FUykKKyAgICBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykKKyAgICAgICAgdHlw
ZSA9IEdMX0hBTEZfRkxPQVRfQVJCOworI2VuZGlmCisKKyAgICBpZiAobV91c2luZ0NvcmVQcm9m
aWxlKSAgeworICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4g
V2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3
ZSBuZWVkCisgICAgICAgIC8vIHRvIGFkYXB0IHRoZW0sIGFzIHdlIGRvIGluIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKCkuCisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgICAgIGNhc2UgQUxQSEE6CisgICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkVEIHRv
IGJhY2sgR0xfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAgICAgICAgICAgIGZvcm1h
dCA9IFJFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBI
QToKKyAgICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRyB0byBiYWNrIEdMX0xVTUlOQU5D
RV9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgorICAgICAgICAgICAgZm9ybWF0ID0gUkc7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFs
IHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0
aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgorICAgIDo6Z2xUZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzLmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5j
dXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dm9pZD4gZGF0YSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmRhdGEp
OworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRU
ZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9m
ZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRh
LmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuQnVmZmVy
cygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdWludCBvID0gMDsKKyAg
ICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOwor
ICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dM
ZW51bSB0eXBlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NI
QURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChvKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwor
ICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgeworICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBk
cmF3aW5nCisgICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgorICAg
ICAgICBiaW5kRnJhbWVidWZmZXIoRlJBTUVCVUZGRVIsIDApOworICAgIH0KKyAgICBnbERlbGV0
ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgZ2xEZWxl
dGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xEZWxl
dGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Z2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5ib3Vu
ZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgeworICAgICAg
ICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKKyAgICB9KTsKKyAgICBn
bERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQucmVtb3ZlQWxsKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikKK3sKKyAgICAvLyBOZWVkIHRvIG1v
dmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCB0bworICAg
IC8vIHByZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRvIGdldEVycm9y
IHdpbGwgZ2V0CisgICAgLy8gYW55IGVycm9ycyBmcm9tIGdsRXJyb3IgYmVmb3JlIHRoZSBlcnJv
ciB3ZSBhcmUgc3ludGhlc2l6aW5nLgorICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpOworICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZvcmNlQ29udGV4dExvc3QoKQoreworICAgIGZvciAoYXV0byog
Y2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+Zm9yY2VD
b250ZXh0TG9zdCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xl
Q29udGV4dCgpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGll
bnRzKSkKKyAgICAgICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4dCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkK
K3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAg
ICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGdldEV4dGVuc2lvbnMo
KS5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQp
OworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQor
eworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBj
b3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NH
THVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLnZl
cnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7Cit9CisKKyNpZiBIQVZFKE9Q
RU5HTF80KSAmJiBFTkFCTEUoV0VCR0wyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50IGluZGV4KQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xQcmltaXRpdmVSZXN0
YXJ0SW5kZXgoaW5kZXgpOworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51
bSB1c2FnZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpCit7CisgICAgVU5V
U0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIFVOVVNFRF9Q
QVJBTSh1c2FnZSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7CisgICAgVU5VU0VEX1BB
UkFNKGxlbmd0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZv
aWQqIHNyY0RhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQoreworICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShkc3RCeXRlT2Zmc2V0KTsK
KyAgICBVTlVTRURfUEFSQU0oc3JjRGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7
CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Cit9CisKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBI
QVZFKE9QRU5HTF9FU18zKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZl
clN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xp
bnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNp
emUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbENvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFk
T2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7Cit9CisjZWxzZQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50
cHRyLCBHQ0dMaW50cHRyLCBHQ0dMc2l6ZWlwdHIpCit7Cit9CisjZW5kaWYKKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKK3sKKyNpZiBIQVZFKE9Q
RU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHQ0dMdm9pZCogcHRyID0gOjpnbE1hcEJ1ZmZlclJh
bmdlKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIEdyYXBoaWNzQ29udGV4dEdMOjpNQVBf
UkVBRF9CSVQpOworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm47CisgICAgbWVtY3B5KGRh
dGEuZGF0YSwgcHRyLCBkYXRhLmJ1ZlNpemUpOworICAgIGlmICghOjpnbFVubWFwQnVmZmVyKHRh
cmdldCkpCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVO
VVNFRF9QQVJBTShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKKyAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworI2VuZGlm
Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdD
R0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEs
IEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0
WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpCit7CisgICAgVU5VU0VEX1BB
UkFNKHNyY1gwKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWTApOworICAgIFVOVVNFRF9QQVJBTShz
cmNYMSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WDAp
OworICAgIFVOVVNFRF9QQVJBTShkc3RZMCk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFgxKTsKKyAg
ICBVTlVTRURfUEFSQU0oZHN0WTEpOworICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKKyAgICBVTlVT
RURfUEFSQU0oZmlsdGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJh
bWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1l
bnQpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0dXJlKTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwp
OworICAgIFVOVVNFRF9QQVJBTShsYXllcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNv
bnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
KyAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVudHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgVU5VU0VEX1BBUkFNKHRh
cmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKKyAgICBVTlVTRURfUEFSQU0o
eCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAg
VU5VU0VEX1BBUkFNKGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQoreworICAgIFVOVVNFRF9QQVJBTShzcmMpOworfQor
CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IGRh
dGEpCit7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQs
IGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3Jt
YXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZlNpemUp
OworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQs
IGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIG1fc3RhdGUudGV4
dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFRleFN0b3JhZ2Uz
RCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsK
KyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKK30KKyNlbHNlCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPEdDR0xp
bnQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXpl
aSwgR0NHTHNpemVpKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhT
dG9yYWdlMkQoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNp
emVpKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0Qo
R0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWkpCit7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29w
eVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhv
ZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7CisgICAgVU5VU0VEX1BBUkFN
KHhvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTSh5b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0o
em9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAg
ICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworfQorCitH
Q0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0obmFtZSk7CisKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAg
IFVOVVNFRF9QQVJBTSh2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQorewor
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAgICBV
TlVTRURfUEFSQU0odjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0o
djApOworICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5VU0VEX1BBUkFNKHYyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3sK
KyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh2MCk7CisgICAg
VU5VU0VEX1BBUkFNKHYxKTsKKyAgICBVTlVTRURfUEFSQU0odjIpOworICAgIFVOVVNFRF9QQVJB
TSh2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVO
VVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NH
THVpbnQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURf
UEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQorewor
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFS
QU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sK
KyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2Up
OworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRy
YW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9Q
QVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VE
X1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9u
KTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNF
RF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRh
KQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5z
cG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgp
OworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VE
X1BBUkFNKHopOworICAgIFVOVVNFRF9QQVJBTSh3KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29u
c3QgR0NHTGludCwgND4gdmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAg
VU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IHgsIEdDR0x1aW50IHks
IEdDR0x1aW50IHosIEdDR0x1aW50IHcpCit7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAg
ICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJB
TSh6KTsKKyAgICBVTlVTRURfUEFSQU0odyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdWludCwgND4gdmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5V
U0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVt
IHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIFVOVVNF
RF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworICAgIFVOVVNFRF9QQVJB
TSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RyaWRlKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVu
dHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVp
IGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBVTlVTRURf
UEFSQU0obW9kZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsKKyAgICBVTlVTRURfUEFSQU0o
ZW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY291bnQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsK
KyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGJ1ZnMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Cisg
ICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51
bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZh
bHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0oZHJh
d2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRy
YXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKQoreworICAgIFVOVVNF
RF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBVTlVT
RURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0
IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Cisg
ICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkZXB0aCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0ZW5jaWwpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3Qg
cXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKK30KKworR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKK3sK
KyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxh
dGZvcm1HTE9iamVjdCBxdWVyeSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBV
TlVTRURfUEFSQU0ocXVlcnkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
bmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Cit9
CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKworICAgIHJldHVybiAwOworfQorCitHQ0dM
dWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aShQbGF0Zm9ybUdM
T2JqZWN0IHF1ZXJ5LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkp
OworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK1BsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQoreworICAg
IHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1w
bGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxl
cik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQorewor
ICAgIFVOVVNFRF9QQVJBTSh1bml0KTsKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCit7CisgICAg
VU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5V
U0VEX1BBUkFNKHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVT
RURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Cit9CisKK0dDR0xmbG9h
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Ft
cGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMC5mOworfQorCitH
Q0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQorCit7CisgICAgVU5VU0VEX1BB
UkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9
CisKK0dDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMoR0NHTGVudW0g
Y29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbmRp
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKworICAgIHJldHVybiAwOworfQorCitH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTeW5jKEdDR0xzeW5jIHN5bmMpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworfQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdz
LCBHQ0dMdWludDY0IHRpbWVvdXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVO
VVNFRF9QQVJBTShmbGFncyk7CisgICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOworCisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdDR0xz
eW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisgICAgVU5VU0VE
X1BBUkFNKHRpbWVvdXQpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3luYyk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKwor
UGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3Jt
RmVlZGJhY2soKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQorewor
ICAgIFVOVVNFRF9QQVJBTShpZCk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCit7CisgICAg
VU5VU0VEX1BBUkFNKGlkKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBV
TlVTRURfUEFSQU0oaWQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdp
blRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCit7CisgICAgVU5VU0VE
X1BBUkFNKHByaW1pdGl2ZU1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh2YXJ5aW5ncyk7
CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlck1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYpCit7CisgICAgVU5VU0VEX1BBUkFN
KHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQoreworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VE
X1BBUkFNKGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRC
dWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQoreworICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgVU5VU0VE
X1BBUkFNKHNpemUpOworfQorCitWZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFtZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0p
OworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtTmFtZXMpOworCisgICAgcmV0dXJuIHsgfTsKK30K
KworVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlm
b3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVu
aWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBWZWN0b3I8R0NHTGludD4gcmVz
dWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFW
RShPUEVOR0xfRVNfMykKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIDo6Z2xHZXRBY3RpdmVV
bmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMu
ZGF0YSgpLCBwbmFtZSwgcmVzdWx0LmRhdGEoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShw
cm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1C
bG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3Jt
QmxvY2tOYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFS
QU0odW5pZm9ybUJsb2NrTmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KQoreworICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
dW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCit7CisgICAg
VU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRl
eCk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0JpbmRpbmcpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAg
ICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURf
UEFSQU0oaGVpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKKyAgICBVTlVTRURfUEFS
QU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1aW50IHByb2dyYW0s
IEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NH
TGludD4gcGFyYW1zKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURf
UEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAg
VU5VU0VEX1BBUkFNKHBhcmFtcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtICwgR0NHTGludHB0cikKK3sKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBH
Q0dMZW51bSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51
bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdD
R0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1Yklt
YWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdD
R0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dm9pZD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRU
ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQoreworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dM
ZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGlu
dCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0s
IEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSwgR0NH
TFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnQgdW5wYWNrQWxpZ25tZW50KQoreworICAgIEFTU0VSVCh1bnBhY2tBbGln
bm1lbnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0g
NCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7CisgICAgVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hh
cj4gemVybzsKKyAgICB1bnNpZ25lZCBzaXplID0gMDsKKyAgICBpZiAod2lkdGggPiAwICYmIGhl
aWdodCA+IDApIHsKKyAgICAgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CisgICAgICAgIHBh
cmFtcy5hbGlnbm1lbnQgPSB1bnBhY2tBbGlnbm1lbnQ7CisgICAgICAgIEdDR0xlbnVtIGVycm9y
ID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAx
LCBwYXJhbXMsICZzaXplLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGVycm9yICE9
IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHplcm8gPSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4oc2l6ZSk7CisgICAgICAg
IGlmICghemVybykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKKyAgICB9CisgICAgdGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bhbih6ZXJvLmdldCgpLCBzaXplKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTAzLDYgKzI5NDUsNiBAQCBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRS
ZXN1bHRzRm9yUGFpbgogICAgIHJldHVybiByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKIH0KIAot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgKaW5kZXggNmM4MWVhN2E4ODk1NDBkNTNlMDY1ZDQ1MzRiNDY5NTZmMjBjZmEx
Zi4uNDA4OTJmNmY1YzE1MjVjYjQ0MWIxYTEyZTJmODY0NDAzMjVmYjhmMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTI1LDUzICsyNSwxNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUp
CiAKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRl
IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKLSNp
ZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5oIgotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ0Ep
Ci0jaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCi0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkK
LSNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgotI2Vsc2UKLSNpbmNsdWRlICJBTkdMRVdlYktp
dEJyaWRnZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIgotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BV
UmVxdWVzdC5oIgotI2VuZGlmCi0KLS8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBhdm9p
ZCB0aGUgbmFtZSBjb25mbGljdGlvbiBmb3IgTk9fRVJST1IuCi0jaWYgUExBVEZPUk0oV0lOKQot
I3VuZGVmIE5PX0VSUk9SCi0jZWxpZiBQTEFURk9STShHVEspCi0vLyBUaGlzIGRlZmluZSBpcyBm
cm9tIHRoZSBYMTEgaGVhZGVycywgYnV0IGl0J3MgdXNlZCBiZWxvdywgc28gd2UgbXVzdCB1bmRl
ZmluZSBpdC4KLSN1bmRlZiBWRVJTSU9OCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
T0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXZWJHTExheWVyOwotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOwotfQotI2VuZGlmIC8vIFBM
QVRGT1JNKENPQ09BKQotCiAjaWYgVVNFKE5JQ09TSUEpCiBuYW1lc3BhY2UgTmljb3NpYSB7CiBj
bGFzcyBHQ0dMTGF5ZXI7CkBAIC04MCw5ICs0NCw3IEBAIGNsYXNzIEdDR0xMYXllcjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRXh0ZW5zaW9uc0dMOwotI2lmIFVTRShBTkdMRSkKLWNs
YXNzIEV4dGVuc2lvbnNHTEFOR0xFOwotI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpZiBVU0UoT1BF
TkdMX0VTKQogY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7CiAjZWxpZiBVU0UoT1BFTkdMKQog
Y2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMOwpAQCAtOTcsNTAgKzU5LDE0IEBAIGNsYXNzIFRleHR1
cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKIAogdHlwZWRlZiBIYXNoTWFwPENTdHJpbmcsIHVp
bnQ2NF90PiBTaGFkZXJOYW1lSGFzaDsKIAorLy8gQmFzZSBjbGFzcyBmb3IgR3JhcGhpY3NDb250
ZXh0R0wgY29udGV4dHMgdGhhdCB1c2UgT3BlbkdMIG9yIE9wZW5HTCBFUy4KIGNsYXNzIFdFQkNP
UkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dEdMCiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKTsK
LSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0jaWYg
VVNFKEFOR0xFKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRmb3Jt
RGlzcGxheSgpIGNvbnN0OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgcGxh
dGZvcm1Db25maWcoKSBjb25zdDsKLSAgICBHQ0dMZW51bSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRh
cmdldCgpOwotICAgIHN0YXRpYyBHQ0dMZW51bSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldFF1
ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKLSAgICBzdGF0aWMg
R0NHTGludCBFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZvckRyYXdpbmdUYXJnZXQoR0NH
TGVudW0gZHJhd2luZ1RhcmdldCk7Ci0gICAgZW51bSBjbGFzcyBSZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VCZWhhdmlvciB7Ci0gICAgICAgIC8vIFJlbGVhc2VzIGN1cnJlbnQgY29udGV4dCBhZnRlciBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCBjYWxscyBkb25lIGluIHRoZSB0aHJlYWQuCi0gICAgICAg
IFJlbGVhc2VDdXJyZW50Q29udGV4dCwKLSAgICAgICAgLy8gUmVsZWFzZXMgYWxsIHRocmVhZCBy
ZXNvdXJjZXMgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgY2FsbHMgZG9uZSBpbiB0aGUg
dGhyZWFkLgotICAgICAgICBSZWxlYXNlVGhyZWFkUmVzb3VyY2VzLAotICAgICAgICAvLyBSZWxl
YXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBl
bmRpbmcgb2JqZWN0cyBoYXZlCi0gICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCi0gICAgICAgIFRl
cm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMKLSAgICB9OwotICAgIHN0YXRpYyBib29s
IHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOwot
I2VuZGlmCi0KLSAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNh
bXBsZUZCTyB0byByZWd1bGFyIEZCTy4KLSAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7Ci0KLSAg
ICAvLyBHZXQgYW4gYXR0cmlidXRlIGxvY2F0aW9uIHdpdGhvdXQgY2hlY2tpbmcgdGhlIG5hbWUg
LT4gbWFuZ2xlZG5hbWUgbWFwcGluZy4KLSAgICBpbnQgZ2V0QXR0cmliTG9jYXRpb25EaXJlY3Qo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgLy8g
Q29tcGlsZSBhIHNoYWRlciB3aXRob3V0IGdvaW5nIHRocm91Z2ggQU5HTEUuCi0gICAgdm9pZCBj
b21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QpOwotCi0gICAgLy8gRXF1aXZhbGVu
dCB0byA6OmdsVGV4SW1hZ2UyRCgpLiBBbGxvd3MgcGl4ZWxzPT0wIHdpdGggbm8gYWxsb2NhdGlv
bi4KLSAgICB2b2lkIHRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBj
b25zdCB2b2lkKiBwaXhlbHMpOwotCi0jaWYgIVVTRShBTkdMRSkKLSAgICAvLyBIZWxwZXIgdG8g
dGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8g
MC4KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KLSAg
ICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNldHRp
bmcuCiAgICAgYm9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludCBhbGlnbm1lbnQgPSA0KTsKLSNlbmRpZgogCiAgICAgYm9vbCBpc0dMRVMy
Q29tcGxpYW50KCkgY29uc3QgZmluYWw7Ci0KICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBF
bnRyeSBwb2ludHMgZm9yIFdlYkdMLgogICAgIC8vCkBAIC0yMDYsOSArMTMyLDcgQEAgcHVibGlj
OgogICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5hbWUpIGZpbmFsOwogICAg
IEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkg
ZmluYWw7CiAgICAgR0NHTGludCBnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKLSNpZiAhVVNFKEFOR0xFKQogICAgIHZvaWQgZ2V0Tm9u
QnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKTsKLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQogICAgIFN0
cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKICAgICBTdHJp
bmcgZ2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0WzJdLCBHQ0dMc2l6ZWksIGNv
bnN0IFN0cmluZyYpOwogICAgIEdDR0xpbnQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKQEAgLTI4NiwxMCArMjEwLDggQEAg
cHVibGljOgogCiAgICAgdm9pZCB1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwog
ICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwotI2lmICFV
U0UoQU5HTEUpCiAgICAgYm9vbCBjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybUdMT2JqZWN0
IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7CiAg
ICAgYm9vbCBwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBs
YXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0OwotI2VuZGlmCiAKICAgICB2b2lk
IHZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CiAgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsKQEAgLTMxNywxMCArMjM5LDggQEAgcHVibGljOgogCiAg
ICAgLy8gPT09PT09PT09PSBXZWJHTDIgZW50cnkgcG9pbnRzLgogCi0jaWYgIVVTRShBTkdMRSkK
ICAgICB2b2lkIGJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBH
Q0dMZW51bSB1c2FnZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpOwogICAg
IHZvaWQgYnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgZHN0Qnl0ZU9m
ZnNldCwgY29uc3Qgdm9pZCogc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBs
ZW5ndGgpOwotI2VuZGlmCiAgICAgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFk
VGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dM
aW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkgZmluYWw7CiAKICAgICB2b2lk
IGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NH
TFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwpAQCAtNDU2LDkgKzM3Niw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCk7CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJlZCgpOwotI2Vu
ZGlmCiAKICAgICB2b2lkIHNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpIGZpbmFsOwogCkBAIC00
ODQsMTIgKzQwMSw4IEBAIHB1YmxpYzoKICAgICAvLyBhbGwgbWV0aG9kcyBpdCBjb250YWlucyBt
YXkgbmVjZXNzYXJpbHkgYmUgc3VwcG9ydGVkIG9uIHRoZQogICAgIC8vIGN1cnJlbnQgaGFyZHdh
cmUuIE11c3QgY2FsbCBFeHRlbnNpb25zR0w6OnN1cHBvcnRzKCkgdG8KICAgICAvLyBkZXRlcm1p
bmUgdGhpcy4KLSNpZiAhVVNFKEFOR0xFKQogICAgIC8vIFVzZSBjb3ZhcmlhbnQgcmV0dXJuIHR5
cGUgZm9yIE9QRU5HTC9PUEVOR0xfRVMKICAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIGdl
dEV4dGVuc2lvbnMoKSBmaW5hbDsKLSNlbHNlCi0gICAgRXh0ZW5zaW9uc0dMJiBnZXRFeHRlbnNp
b25zKCkgZmluYWw7Ci0jZW5kaWYKIAogICAgIHZvaWQgc2ltdWxhdGVFdmVudEZvclRlc3Rpbmco
U2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nKSBvdmVycmlkZTsKIApAQCAtNDk3LDI4ICs0MTAsOSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgb3ZlcnJpZGU7CiAKLSNp
ZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0gICAgR3JhcGhpY3NDb250ZXh0
R0xDViogYXNDVigpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBzdGF0aWMgdm9pZCBwYWludFRvQ2Fu
dmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNv
bnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwotCi0jaWYgVVNFKEFO
R0xFKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERp
c3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQTEFZOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGNv
bnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdM
X0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5cGUsIC0xKTsKLSAgICBjb25zdGV4cHIgc3RhdGljIEVH
TE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xO
YXRpdmVEaXNwbGF5VHlwZSwgLTIpOwotI2VuZGlmCi0jZW5kaWYKLQogcHJvdGVjdGVkOgogICAg
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7Ci0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hh
aW4gbV9zd2FwQ2hhaW47Ci0gICAgRUdMRGlzcGxheSBtX2Rpc3BsYXlPYmogeyBudWxscHRyIH07
Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmogeyBudWxscHRyIH07
Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBtX2NvbmZpZ09iaiB7IG51bGxw
dHIgfTsKLSNlbmRpZgorCiAgICAgR0NHTHVpbnQgbV90ZXh0dXJlIHsgMCB9OwogCiBwcml2YXRl
OgpAQCAtNTQ3LDI0ICs0NDEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzb2x2ZU11bHRpc2Ft
cGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiA9IEludFJlY3QoKSk7CiAgICAgdm9pZCBh
dHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHQ0dMdWludCBpbnRlcm5hbERlcHRo
U3RlbmNpbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAotI2lmIFVTRShBTkdMRSkK
LSAgICBib29sIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpOwotI2VuZGlmCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgYm9vbCBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2lu
ZygpOwotICAgIGJvb2wgYmluZERpc3BsYXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJ
T1N1cmZhY2U+IGJhY2tpbmcsIHZvaWQqIHBidWZmZXIpOwotICAgIHN0YXRpYyBib29sIG1ha2VD
dXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMKTsKLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOwot
I2VuZGlmCi0jaWYgVVNFKEFOR0xFKQotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgY29udGV4dCBz
aG91bGQgYmUgbG9zdCBkdWUgdG8gdGltZW91dC4KLSAgICBib29sIHdhaXRBbmRVcGRhdGVPbGRl
c3RGcmFtZSgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAgIC8vIFBsYXRmb3JtIHNwZWNpZmlj
IGJlaGF2aW9yIGZvciByZWxlYXNlUmVzb3VyY2VzKCk7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZv
cm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7Ci0jZW5kaWYKIAotI2lmICFVU0UoQU5HTEUpCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVW5pcXVlUmVmPHNoOjpTaGFkZXJWYXJpYWJsZT4+
IFNoYWRlclN5bWJvbE1hcDsKIAogICAgIHN0cnVjdCBTaGFkZXJTb3VyY2VFbnRyeSB7CkBAIC02
MzEsMTIgKzUwOCw4IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG9yaWdp
bmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xF
U2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTaGFkZXJOYW1lSGFzaD4gbmFtZUhhc2hNYXBGb3JTaGFkZXJzOwotI2VuZGlmIC8vICFV
U0UoQU5HTEUpCiAKLSNpZiBVU0UoQU5HTEUpCi0gICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNH
TEFOR0xFOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xBTkdMRT4gbV9leHRlbnNp
b25zOwotI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogICAgIGZyaWVu
ZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xFUzsKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9u
c0dMT3BlbkdMQ29tbW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xPcGVuR0xF
Uz4gbV9leHRlbnNpb25zOwpAQCAtNjQ4LDkgKzUyMSw3IEBAIHByaXZhdGU6CiAKICAgICBWZWN0
b3I8VmVjdG9yPGZsb2F0Pj4gbV92ZXJ0ZXhBcnJheTsKIAotI2lmICFVU0UoQU5HTEUpCiAgICAg
QU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKLSNlbmRpZgogCiAgICAgR0NHTHVpbnQgbV9m
Ym8geyAwIH07CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNjU4LDU0ICs1Mjks
MTQgQEAgcHJpdmF0ZToKICAgICBHQ0dMdWludCBtX2ludGVybWVkaWF0ZVRleHR1cmUgeyAwIH07
CiAjZW5kaWYKIAotI2lmICFVU0UoQU5HTEUpICYmIFVTRShPUEVOR0xfRVMpCisjaWYgVVNFKE9Q
RU5HTF9FUykKICAgICBHQ0dMdWludCBtX2RlcHRoQnVmZmVyIHsgMCB9OwogICAgIEdDR0x1aW50
IG1fc3RlbmNpbEJ1ZmZlciB7IDAgfTsKICNlbmRpZgogICAgIEdDR0x1aW50IG1fZGVwdGhTdGVu
Y2lsQnVmZmVyIHsgMCB9OwogCiAgICAgR0NHTHVpbnQgbV9pbnRlcm5hbENvbG9yRm9ybWF0IHsg
MCB9OwotI2lmIFVTRShBTkdMRSkKLSAgICBHQ0dMdWludCBtX2ludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0IHsgMCB9OwotI2VuZGlmCi0gICAgc3RydWN0IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUg
ewotICAgICAgICBHQ0dMdWludCBib3VuZFJlYWRGQk8geyAwIH07Ci0gICAgICAgIEdDR0x1aW50
IGJvdW5kRHJhd0ZCTyB7IDAgfTsKLSAgICAgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVuaXQg
eyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKLQotICAgICAgICB1c2luZyBCb3VuZFRl
eHR1cmVNYXAgPSBIYXNoTWFwPEdDR0xlbnVtLAotICAgICAgICAgICAgc3RkOjpwYWlyPEdDR0x1
aW50LCBHQ0dMZW51bT4sCi0gICAgICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKLSAgICAgICAg
ICAgIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LAotICAgICAg
ICAgICAgUGFpckhhc2hUcmFpdHM8V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxH
Q0dMdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+Pgot
ICAgICAgICA+OwotICAgICAgICBCb3VuZFRleHR1cmVNYXAgYm91bmRUZXh0dXJlTWFwOwotICAg
ICAgICBHQ0dMdWludCBjdXJyZW50Qm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gYm91bmRU
ZXh0dXJlKGFjdGl2ZVRleHR1cmVVbml0KTsgfQotICAgICAgICBHQ0dMdWludCBib3VuZFRleHR1
cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1
dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0dXJlVW5pdCk7Ci0gICAgICAg
ICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuZmlyc3Q7Ci0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgfQogCi0gICAgICAgIEdDR0x1aW50IGN1cnJlbnRCb3VuZFRhcmdldCgpIGNvbnN0
IHsgcmV0dXJuIGJvdW5kVGFyZ2V0KGFjdGl2ZVRleHR1cmVVbml0KTsgfQotICAgICAgICBHQ0dM
ZW51bSBib3VuZFRhcmdldChHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1cmVV
bml0KTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5kKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7Ci0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0Qm91bmRUZXh0dXJl
KEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGJvdW5kVGV4dHVyZU1hcC5zZXQodGV4dHVyZVVuaXQs
IHN0ZDo6bWFrZV9wYWlyKHRleHR1cmUsIHRhcmdldCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dXNpbmcgVGV4dHVyZVNlZWRDb3VudCA9IEhhc2hDb3VudGVkU2V0PEdDR0x1aW50LCBJbnRIYXNo
PEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4+
OwotICAgICAgICBUZXh0dXJlU2VlZENvdW50IHRleHR1cmVTZWVkQ291bnQ7Ci0gICAgfTsKIAog
ICAgIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUgbV9zdGF0ZTsKIApAQCAtNzE0LDE2ICs1NDUsNiBA
QCBwcml2YXRlOgogICAgIEdDR0x1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIg
eyAwIH07CiAgICAgR0NHTHVpbnQgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OwogCi0j
aWYgVVNFKEFOR0xFKQotICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dHJ1ZSB3aXRo
b3V0IG11bHRpc2FtcGxpbmcuCi0gICAgR0NHTHVpbnQgbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJU
ZXh0dXJlIHsgMCB9OwotICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVyZSB3aGVuIG1fcHJlc2VydmVE
cmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KLSAgICBHQ0dMdWludCBtX3ByZXNlcnZl
RHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKLSAgICAvLyBRdWVyaWVkIGF0IGRpc3BsYXkgc3RhcnR1
cC4KLSAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCB7IC0xIH07Ci0KLSNl
bmRpZgotCiAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAg
IExpc3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKIApAQCAtNzQ0LDI5ICs1
NjUsOCBAQCBwcml2YXRlOgogI2lmIFVTRShDQUlSTykKICAgICBQbGF0Zm9ybUdMT2JqZWN0IG1f
dmFvIHsgMCB9OwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAvLyBCYWNraW5n
IHN0b3JlIGZvciB0aGUgdGhlIGJ1ZmZlciB3aGljaCBpcyBldmVudHVhbGx5IHVzZWQgZm9yIGRp
c3BsYXkuCi0gICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gZmFsc2UsIHRoaXMg
aXMgdGhlIGRyYXdpbmcgYnVmZmVyIGJhY2tpbmcgc3RvcmUuCi0gICAgLy8gV2hlbiBwcmVzZXJ2
ZURyYXdpbmdCdWZmZXIgPT0gdHJ1ZSwgdGhpcyBpcyBibGl0dGVkIHRvIGR1cmluZyBkaXNwbGF5
IHByZXBhcmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9kaXNwbGF5QnVmZmVy
QmFja2luZzsKLSAgICB2b2lkKiBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyIHsgbnVsbHB0ciB9Owot
I2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGJvb2wgbV9zd2l0Y2hlc0dQVU9uRGlzcGxh
eVJlY29uZmlndXJhdGlvbiB7IGZhbHNlIH07Ci0gICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BV
UmVxdWVzdCBtX2hpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3Q7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
VklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dEdMQ1ZBTkdMRT4gbV9jdjsKLSNlbmRpZgotI2lmIFVTRShBTkdMRSkKLSAgICBib29s
IG1fdXNlRmVuY2VTeW5jRm9yRGlzcGxheVJhdGVMaW1pdCA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG1heFBlbmRpbmdGcmFtZXMgPSAzOwotICAgIHNpemVfdCBtX29sZGVz
dEZyYW1lQ29tcGxldGlvbkZlbmNlIHsgMCB9OwotICAgIFNjb3BlZEdMRmVuY2UgbV9mcmFtZUNv
bXBsZXRpb25GZW5jZXNbbWF4UGVuZGluZ0ZyYW1lc107Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMQ29tbW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwZDZkMzY3
ZjFmOTU0NDViMGE3OWMxNzRkYTg4YTNlZTUxY2I5Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjg4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBP
aCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiAhVVNF
KEFOR0xFKQotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVu
R0xFUy5oIgotI2Vsc2UKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0wuaCIKLSNlbmRpZgot
I2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5j
bHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgotI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRpbmcuaCIKLSNpbmNsdWRlICJX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVn
dWxhckV4cHJlc3Npb24uaD4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhO
dW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgIkVw
b3h5U2hpbXMuaCIKLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSAiT3BlbkdMRVNTaGlt
cy5oIgotI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiT3Bl
bkdMU2hpbXMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBUaHJl
YWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+JiBnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMg
VGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiogc2hhcmVkTmFtZUhhc2g7Ci0gICAgc3Rk
OjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKLSAgICAgICAgc2hhcmVkTmFtZUhhc2ggPSBuZXcg
VGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPjsKLSAgICB9KTsKLQotICAgIHJldHVybiAq
c2hhcmVkTmFtZUhhc2g7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlcihTaGFkZXJOYW1lSGFzaCogc2hhZGVyTmFtZUhhc2gpCi17Ci0gICAgKmdldEN1cnJl
bnROYW1lSGFzaE1hcEZvclNoYWRlcigpID0gc2hhZGVyTmFtZUhhc2g7Ci19Ci0KLS8vIEhhc2gg
ZnVuY3Rpb24gdXNlZCBieSB0aGUgQU5HTEUgdHJhbnNsYXRvci9jb21waWxlciB0byBkbwotLy8g
c3ltYm9sIG5hbWUgbWFuZ2xpbmcuIFNpbmNlIHRoaXMgaXMgYSBzdGF0aWMgbWV0aG9kLCBiZWZv
cmUKLS8vIGNhbGxpbmcgY29tcGlsZVNoYWRlciB3ZSBzZXQgY3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyCi0vLyB0byBwb2ludCB0byB0aGUgbWFwIGtlcHQgYnkgdGhlIGN1cnJlbnQgaW5zdGFu
Y2Ugb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0KLXN0YXRpYyB1aW50NjRfdCBuYW1lSGFz
aEZvclNoYWRlcihjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuZ3RoKQotewotICAgIGlmICgh
bGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENTdHJpbmcgbmFtZUFzQ1N0cmluZyA9
IENTdHJpbmcobmFtZSk7Ci0KLSAgICAvLyBMb29rIHVwIG5hbWUgaW4gb3VyIGxvY2FsIG1hcC4K
LSAgICBTaGFkZXJOYW1lSGFzaComIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlciA9ICpnZXRD
dXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKTsKLSAgICBTaGFkZXJOYW1lSGFzaDo6aXRlcmF0
b3IgZmluZFJlc3VsdCA9IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+ZmluZChuYW1lQXND
U3RyaW5nKTsKLSAgICBpZiAoZmluZFJlc3VsdCAhPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXItPmVuZCgpKQotICAgICAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWU7Ci0KLSAgICB1bnNp
Z25lZCBoYXNoVmFsdWUgPSBuYW1lQXNDU3RyaW5nLmhhc2goKTsKLQotICAgIC8vIENvbnZlcnQg
dGhlIDMyLWJpdCBoYXNoIGZyb20gQ1N0cmluZzo6aGFzaCBpbnRvIGEgNjQtYml0IHJlc3VsdAot
ICAgIC8vIGJ5IHNoaWZ0aW5nIHRoZW4gYWRkaW5nIHRoZSBzaXplIG9mIG91ciB0YWJsZS4gT3Zl
cmZsb3cgd291bGQKLSAgICAvLyBvbmx5IGJlIGEgcHJvYmxlbSBpZiB3ZSdyZSBhbHJlYWR5IGhh
c2hpbmcgdG8gdGhlIHNhbWUgdmFsdWUgKGFuZAotICAgIC8vIHdlJ3JlIGhvcGluZyB0aGF0IG92
ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb250ZXh0IHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSB0aGF0
IG1hbnkgc3ltYm9scykuCi0KLSAgICB1aW50NjRfdCByZXN1bHQgPSBoYXNoVmFsdWU7Ci0gICAg
cmVzdWx0ID0gKHJlc3VsdCA8PCAzMikgKyAoY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5z
aXplKCkgKyAxKTsKLQotICAgIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2V0KG5hbWVB
c0NTdHJpbmcsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2Vk
RGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQotewotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmli
dXRlcygpOwotCi0gICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBleHRlbnNpb25zID0gZ2V0
RXh0ZW5zaW9ucygpOwotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChleHRl
bnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKLSAgICAgICAg
ICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24p
OwotICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgotICAgICAg
ICAgICAgYXR0cnMuZGVwdGggPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGF0
dHJzLnN0ZW5jaWwgPSBmYWxzZTsKLSAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMp
OwotICAgIH0KLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmICFtX2lzRm9yV2ViR0wyKSB7Ci0g
ICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUiKSkgewotICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAg
ICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSIpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlcGFyZVRleHR1cmUoKQotewotICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0KLSNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIFRlbXBvcmFyeU9wZW5H
TFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKLSAgICBU
ZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsK
LSNlbmRpZgotCi0gICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQotICAgICAg
ICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi0gICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVy
ZSk7Ci0gICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgOjpnbEZy
YW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIGdsRmx1c2goKTsK
LQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZC
Tyk7Ci0gICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0
ZS5ib3VuZERyYXdGQk8pOwotICAgIGVsc2UKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICByZXR1cm47Ci0j
ZW5kaWYKLQotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKLSAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zdGF0ZS5ib3VuZFRhcmdldChHTF9URVhUVVJFMCkg
PT0gR0xfVEVYVFVSRV8yRCA/IG1fc3RhdGUuYm91bmRUZXh0dXJlKEdMX1RFWFRVUkUwKSA6IDAp
OwotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQpOwotICAg
IEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0g
ICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQotICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8pOwotICAgIDo6Z2xGbHVzaCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQotewot
ICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAgICBpZiAoY29udGV4dEF0dHJpYnV0
ZXMoKS5hbnRpYWxpYXMpIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2Fy
eSgpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJv
KSB7Ci0gICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8p
OwotICAgICAgICB9Ci0gICAgfQotICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBpeGVsc0ZvclBhaW50
UmVzdWx0cygpOwotICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRE
cmF3RkJPKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAod2lkdGgg
PT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOwotICAgIGlm
ICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7Ci0KLSAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwotICAgIG1fY3VycmVudEhl
aWdodCA9IGhlaWdodDsKLQotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotCi0gICAgVGVtcG9y
YXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0Up
OwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xf
RkFMU0UpOwotICAgIAotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRT
aXplKHdpZHRoLCBoZWlnaHQpKTsKLQotICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0
byAwLgotICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRo
ID0gMDsKLSAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAwOwotICAgIEdMYm9vbGVhbiBjb2xvck1h
c2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0g
R0xfVFJVRTsKLSAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFz
a0JhY2sgPSAweGZmZmZmZmZmOwotICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1Jf
QlVGRkVSX0JJVDsKLSAgICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVh
ckNvbG9yKTsKLSAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICA6OmdsR2V0Qm9v
bGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOwotICAgIDo6Z2xDb2xvck1hc2so
R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7Ci0KLSAgICBhdXRvIGF0dHJzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICA6
OmdsR2V0RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKDEpOwotICAgICAgICA6OmdsR2V0
Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgOjpnbERl
cHRoTWFzayhHTF9UUlVFKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9C
SVQ7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xHZXRJbnRl
Z2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpn
bENsZWFyU3RlbmNpbCgwKTsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJ
VEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0gICAgICAg
IDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9j
YXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrQmFjaykpOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZmZmZmZik7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKEdMX0JBQ0ssIDB4ZmZmZmZmZmYpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RF
TkNJTF9CVUZGRVJfQklUOwotICAgIH0KLQotICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOwotCi0g
ICAgOjpnbENsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xv
clsyXSwgY2xlYXJDb2xvclszXSk7Ci0gICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNv
bG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOwotICAgIGlmIChhdHRycy5k
ZXB0aCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVh
ckRlcHRoKTsKLSAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0aE1hc2spOwotICAgIH0KLSAgICBp
ZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNp
bCk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFz
ayk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNr
QmFjayk7Ci0gICAgfQotCi0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5i
b3VuZERyYXdGQk8pOwotCi0gICAgYXV0byBlcnJvciA9IDo6Z2xHZXRFcnJvcigpOwotICAgIGlm
IChlcnJvciAhPSBHTF9OT19FUlJPUikgewotICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZh
dGFsOiBPcGVuR0wgZXJyb3IgZHVyaW5nIEdyYXBoaWNzQ29udGV4dEdMIGJ1ZmZlciBpbml0aWFs
aXphdGlvbiAoJWQpLiIsIGVycm9yKTsKLSAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLWJvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xPYmplY3Qg
dmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAotewot
ICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKLSAg
ICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKLSAg
ICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4
U2hhZGVyKS0+dmFsdWU7Ci0gICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKLQotICAgIEhhc2hNYXA8U3Ry
aW5nLCBzaDo6U2hhZGVyVmFyaWFibGU+IGNvbWJpbmVkVmFyeWluZ3M7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgOiB2ZXJ0ZXhFbnRyeS52YXJ5aW5nTWFwKSB7Ci0gICAgICAg
IGNvbnN0IFN0cmluZyYgc3ltYm9sTmFtZSA9IHZlcnRleFN5bWJvbC5rZXk7Ci0gICAgICAgIC8v
IFRoZSB2YXJ5aW5nIG1hcCBpbmNsdWRlcyB2YXJpYWJsZXMgZm9yIGVhY2ggaW5kZXggb2YgYW4g
YXJyYXkgdmFyaWFibGUuCi0gICAgICAgIC8vIFdlIG9ubHkgd2FudCBhIHNpbmdsZSB2YXJpYWJs
ZSB0byByZXByZXNlbnQgdGhlIGFycmF5LgotICAgICAgICBpZiAoc3ltYm9sTmFtZS5lbmRzV2l0
aCgiXSIpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gRG9uJ3QgY291bnQg
YnVpbHQgaW4gdmFyeWluZ3MuCi0gICAgICAgIGlmIChzeW1ib2xOYW1lID09ICJnbF9GcmFnQ29v
cmQiIHx8IHN5bWJvbE5hbWUgPT0gImdsX0Zyb250RmFjaW5nIiB8fCBzeW1ib2xOYW1lID09ICJn
bF9Qb2ludENvb3JkIikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IGF1
dG8mIGZyYWdtZW50U3ltYm9sID0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmZpbmQoc3ltYm9s
TmFtZSk7Ci0gICAgICAgIGlmIChmcmFnbWVudFN5bWJvbCAhPSBmcmFnbWVudEVudHJ5LnZhcnlp
bmdNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb21iaW5lZFZhcnlpbmdzLmFkZChzeW1ib2xOYW1l
LCBmcmFnbWVudFN5bWJvbC0+dmFsdWUpOwotICAgIH0KLQotICAgIHNpemVfdCBudW1WYXJ5aW5n
cyA9IGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpOwotICAgIGlmICghbnVtVmFyeWluZ3MpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiB2
YXJpYWJsZXM7Ci0gICAgdmFyaWFibGVzLnJlc2VydmUoY29tYmluZWRWYXJ5aW5ncy5zaXplKCkp
OwotICAgIGZvciAoY29uc3QgYXV0byYgdmFyeWluZ1N5bWJvbCA6IGNvbWJpbmVkVmFyeWluZ3Mu
dmFsdWVzKCkpCi0gICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyeWluZ1N5bWJvbCk7Ci0K
LSAgICBHQ0dMaW50IG1heFZhcnlpbmdWZWN0b3JzID0gMDsKLSNpZiBVU0UoT1BFTkdMX0VTKQot
ICAgIDo6Z2xHZXRJbnRlZ2VydihNQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3Rv
cnMpOwotI2Vsc2UKLSAgICBpZiAobV9pc0ZvcldlYkdMMikKLSAgICAgICAgOjpnbEdldEludGVn
ZXJ2KEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEdDR0xpbnQgbWF4VmFyeWluZ0Zsb2F0cyA9IDA7Ci0gICAgICAgIDo6Z2xH
ZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsICZtYXhWYXJ5aW5nRmxvYXRzKTsKLSAg
ICAgICAgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtYXhWYXJ5aW5nRmxvYXRzIC8gNDsKLSAgICB9Ci0j
ZW5kaWYKLSAgICByZXR1cm4gc2g6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyht
YXhWYXJ5aW5nVmVjdG9ycywgdmFyaWFibGVzKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQ
bGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX3No
YWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKLSAgICBBU1NFUlQobV9zaGFk
ZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKLSAgICBjb25zdCBhdXRvJiB2
ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7
Ci0gICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
ZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6R0xlbnVt
PiB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXA7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5
IDogdmVydGV4RW50cnkudW5pZm9ybU1hcCkgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
bWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7Ci0gICAgICAgIHZlcnRl
eFN5bWJvbFByZWNpc2lvbk1hcC5hZGQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVk
TmFtZS5sZW5ndGgoKSksIGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbik7Ci0gICAgfQotCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGZyYWdtZW50RW50cnkudW5pZm9ybU1hcCkgewot
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgp
Lm1hcHBlZE5hbWU7Ci0gICAgICAgIGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA9IHZlcnRleFN5
bWJvbFByZWNpc2lvbk1hcC5maW5kKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5h
bWUubGVuZ3RoKCkpKTsKLSAgICAgICAgaWYgKHZlcnRleFN5bWJvbCAhPSB2ZXJ0ZXhTeW1ib2xQ
cmVjaXNpb25NYXAuZW5kKCkgJiYgdmVydGV4U3ltYm9sLT52YWx1ZSAhPSBlbnRyeS52YWx1ZS5n
ZXQoKS5wcmVjaXNpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRl
eHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4
dHVyZTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFT
U0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFt
KTsKLSAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNT
RVJUKHByb2dyYW0pOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFt
LCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6
OmJpbmRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0
YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgaW5kZXgsIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdMdWludCBmYm87Ci0gICAgaWYg
KGJ1ZmZlcikKLSAgICAgICAgZmJvID0gYnVmZmVyOwotICAgIGVsc2UKLSAgICAgICAgZmJvID0g
KGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJv
KTsKLSAgICBBU1NFUlQodGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBBU1NFUlQobV9z
dGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChmYm8g
IT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VCh0YXJnZXQsIGZibyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5i
b3VuZFJlYWRGQk8gPSBmYm87Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBy
ZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZm
ZXIpOwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdD
R0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuc2V0Qm91
bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7Ci0g
ICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3Jl
ZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRDb2xvcihy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2Rl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFy
YXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRFcXVh
dGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0
b3IpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0gICAgICAgCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JH
QiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxw
aGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVzYWdlKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCdWZm
ZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3Qgdm9p
ZD4gZGF0YSwgR0NHTGVudW0gdXNhZ2UpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLmJ1
ZlNpemUsIGRhdGEuZGF0YSwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwg
b2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7Ci19Ci0KLUdDR0xlbnVtIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9PUEVSQVRJT047Ci0KLSAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNF
WFQodGFyZ2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xv
cihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDbGVhcihtYXNrKTsKLSAg
ICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhclN0ZW5jaWwoR0NHTGludCBzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xi
b29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsK
LSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGluZy4gRHVlIHRvIHRoZSB3
YXkgQU5HTEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQotICAgIC8vIHBvaW50IGEgZ2xvYmFsIGhh
c2htYXAgdG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRleHQuCi0gICAgU2hCdWlsdEluUmVz
b3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gbV9jb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICBT
aEhhc2hGdW5jdGlvbjY0IHByZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5HTEVSZXNvdXJjZXMuSGFz
aEZ1bmN0aW9uOwotICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9IG5hbWVIYXNoRm9y
U2hhZGVyOwotCi0gICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgIG5hbWVI
YXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Ci0gICAgc2V0
Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7
Ci0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgU3Ry
aW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOwotCi0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0
aW9uID0gcHJldmlvdXNIYXNoRnVuY3Rpb247Ci0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMo
QU5HTEVSZXNvdXJjZXMpOwotICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxs
cHRyKTsKLQotICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcg
PSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiB0cmFuc2xh
dGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOwotICAgIGludCB0
cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcubGVuZ3RoKCk7
Ci0KLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1c
biVzXG4tLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4iLCBnZXRTaGFkZXJTb3Vy
Y2Uoc2hhZGVyKS51dGY4KCkuZGF0YSgpKTsKLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gdHJh
bnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJhbnNsYXRlZCBzaGFkZXIg
c291cmNlIC0tLSIsIHRyYW5zbGF0ZWRTaGFkZXJQdHIpOwotCi0gICAgOjpnbFNoYWRlclNvdXJj
ZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0
aCk7Ci0gICAgCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLSAgICAKLSAgICBpbnQg
Y29tcGlsZVN0YXR1czsKLSAgICAKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxF
X1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOwotCi0gICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgU2hhZGVyU291
cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKLQotICAgIC8vIFBvcHVsYXRlIHRoZSBz
aGFkZXIgbG9nCi0gICAgR0xpbnQgbGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hh
ZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotCi0gICAgaWYgKGxlbmd0aCkgewot
ICAgICAgICBHTHNpemVpIHNpemUgPSAwOwotICAgICAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxl
bmd0aCk7Ci0gICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6
ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9
IHsgc2hhZGVyLCAwIH07Ci0gICAgICAgIGVudHJ5LmxvZyA9IGdldFVubWFuZ2xlZEluZm9Mb2co
c2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci0gICAgfQotCi0gICAgaWYg
KGNvbXBpbGVTdGF0dXMgIT0gR0xfVFJVRSkgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFs
c2U7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBzaGFkZXIgdHJhbnNsYXRvciBwcm9kdWNl
ZCBhIHNoYWRlciB0aGF0IE9wZW5HTCB3b3VsZCBub3QgY29tcGlsZS4iKTsKLSAgICB9Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9y
bUdMT2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBl
bnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VD
U3RyaW5nID0gZW50cnkuc291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3Vy
Y2VQdHIgPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKLSAgICBpbnQgc2hhZGVyU291cmNl
TGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwg
Ii0tLSBiZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBz
aGFkZXIgc291cmNlIC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsKLQotICAgIDo6Z2xTaGFkZXJT
b3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsK
LQotICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0KLSAgICBpbnQgY29tcGlsZVN0YXR1
czsKLQotICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGls
ZVN0YXR1cyk7Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7Ci0gICAgICAg
IGVudHJ5LmlzVmFsaWQgPSB0cnVlOwotICAgICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGls
YXRpb24gb2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbnRy
eS5pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29t
cGlsYXRpb24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYXR0
cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFk
RkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYm
IG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVz
b2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQp
KTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0gICAgOjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAg
IGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNh
bXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRH
TDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09
IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3Rh
dGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKLSAgICB9Ci0gICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChhdHRy
cy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDdWxsRmFjZShtb2RlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbERlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVwdGhNYXNrKEdDR0xib29sZWFuIGZsYWcpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERlcHRoTWFzayhmbGFnKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dy
YW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJl
bW92ZShwcm9ncmFtKTsKLSAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xEaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLSAgICBjaGVja0dQVVN0YXR1
cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NH
TGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9j
YXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci0gICAgY2hlY2tH
UFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdD
R0xlbnVtIGNhcCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsRW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZpbmlzaCgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZpbmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmbHVzaCgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0
LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhU
KHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci0gICAgbV9z
dGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBt
b2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xGcm9udEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2VuZXJhdGVNaXBt
YXAodGFyZ2V0KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
QXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dy
YW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOwot
ICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9B
VFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgotICAgIEdMc2l6
ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUg
PSAwOwotICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0
ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAo
IW5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTdHJpbmcgb3Jp
Z2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQ
RV9BVFRSSUJVVEUsIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOwotICAgIAotI2lm
bmRlZiBOREVCVUcKLSAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5n
dGgpOwotICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgYXR0cmli
dXRlICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0
ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotCi0gICAg
aW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5m
by5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgR0NHTGludCBzeW1ib2xDb3Vu
dDsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQo
cHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cC5lbmQoKSkgewotICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3Jh
bSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9BVFRSSUJVVEVTLCAmc3ltYm9sQ291bnQpOwot
ICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dy
YW0pOwotICAgIH0KLSAgICAKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENv
dW50cyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBz
eW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwLnNpemUoKSkgPyBz
eW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwW2luZGV4XSA6IC0x
OwotCi0gICAgcmV0dXJuIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGlu
Zm8pOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3Jt
SW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZv
JiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdM
aW50IG1heFVuaWZvcm1TaXplID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdM
X0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7Ci0KLSAgICBWZWN0
b3I8R0xjaGFyPiBuYW1lKG1heFVuaWZvcm1TaXplKTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFY
X0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0
aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6
Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVM
ZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBv
cmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIFN0
cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOwotICAgIAotI2lmbmRlZiBOREVCVUcKLSAg
ICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwotICAgIExPRyhX
ZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgdW5pZm9ybSAlZCBmcm9tICclcycg
dG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmln
aW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBpbmZvLm5hbWUgPSBv
cmlnaW5hbE5hbWU7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXpl
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgR0NHTGludCBzeW1ib2xDb3VudDsKLSAgICBhdXRv
IHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0g
ICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewot
ICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3ND
b250ZXh0R0w6OkFDVElWRV9VTklGT1JNUywgJnN5bWJvbENvdW50KTsKLSAgICAgICAgcmVzdWx0
ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICB9Ci0g
ICAgCi0gICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQt
PnZhbHVlOwotICAgIEdDR0x1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZp
bHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0
ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwW2luZGV4XSA6IC0xOwotICAgIAotICAgIHJldHVy
biBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxh
dGZvcm1HTE9iamVjdCogc2hhZGVycykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMp
OwotfQotCi1zdGF0aWMgU3RyaW5nIGdlbmVyYXRlSGFzaGVkTmFtZShjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbmFtZTsKLSAg
ICB1aW50NjRfdCBudW1iZXIgPSBuYW1lSGFzaEZvclNoYWRlcihuYW1lLnV0ZjgoKS5kYXRhKCks
IG5hbWUubGVuZ3RoKCkpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJ3ZWJnbF8iLCBoZXgobnVt
YmVyLCBMb3dlcmNhc2UpKTsKLX0KLQotc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVz
dWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7Ci0gICAgYXV0byBzeW1ib2xFbnRyeSA9
IHN5bWJvbE1hcC5maW5kKG5hbWUpOwotICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBhdXRvJiBtYXBwZWRO
YW1lID0gc3ltYm9sRW50cnktPnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7Ci0gICAgcmV0dXJuIFN0
cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpOwotfQotCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIEdDR0xzaXplaSBjb3VudCA9IDA7Ci0gICAgUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXJzWzJdID0geyB9OwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAy
LCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVy
U291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFw
cGVkTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQot
Ci0gICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFm
dGVyIGxpbmtpbmcuCi0gICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHBy
b2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKLSAg
ICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKLSAgICAgICAgYXV0byBt
YXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5m
aXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAg
ICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKLSAgICAgICAgbWFwcGVkTmFtZSA9IG1h
cHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xU
eXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1hcHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4g
bWFwcGVkTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURF
Ul9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8v
IEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVm
b3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKLSAgICAgICAgLy8gYW5kIGFyZW4n
dCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgotICAgICAg
ICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKLSAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9y
U2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Ci0gICAgICAgIHNldEN1cnJl
bnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOwotCi0g
ICAgICAgIGF1dG8gZ2VuZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKLQot
ICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7Ci0KLSAgICAg
ICAgbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7
Ci0KLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE5hbWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5h
bWU7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwg
QU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsK
LSAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBp
ZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5z
eW1ib2xNYXAoc3ltYm9sVHlwZSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6
IHN5bWJvbE1hcCkgewotICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQo
KS5tYXBwZWROYW1lLmNfc3RyKCkpCi0gICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5
OwotICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi1TdHJpbmcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUp
Ci17Ci0gICAgR0NHTHNpemVpIGNvdW50OwotICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1sy
XTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsK
LSAgICAKLSAgICBmb3IgKEdDR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNo
YWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQot
ICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIC8v
IFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5r
aW5nLgotICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsK
LSAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIGF1
dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgICAgIGF1dG8gb3JpZ2luYWxO
YW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0
LCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICAgICAgb3JpZ2luYWxOYW1lID0g
b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3lt
Ym9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICBy
ZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHN5bWJvbFR5cGUg
PT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVl
c3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAotICAgICAgICAvLyBh
bmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0u
Ci0KLSAgICAgICAgY29uc3QgYXV0byYgY2FjaGVkID0gbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0
ZU1hcC5maW5kKG5hbWUpOwotICAgICAgICBpZiAoY2FjaGVkICE9IG1fcG9zc2libHlVbnVzZWRB
dHRyaWJ1dGVNYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gY2FjaGVkLT52YWx1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90
IGNvdW50LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChzaXplX3Qgc3ltYm9sVHlw
ZSA9IDA7IHN5bWJvbFR5cGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihTSEFERVJfU1lNQk9MX1RZ
UEVfVkFSWUlORyk7ICsrc3ltYm9sVHlwZSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ldKTsKLSAgICAgICAgICAg
IGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1h
cCYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3RhdGljX2Nhc3Q8ZW51bSBB
TkdMRVNoYWRlclN5bWJvbFR5cGU+KHN5bWJvbFR5cGUpKTsKLSAgICAgICAgICAgIGZvciAoY29u
c3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKLSAgICAgICAgICAgICAgICBpZiAo
bmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS5rZXk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4g
LTE7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gLTE7
Ci0KLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBT
SEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6Omds
R2V0QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEo
KSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQot
ICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gLTE7Ci0KLQotICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJv
Z3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIG1vdmVk
QW5FcnJvciA9IGZhbHNlOwotCi0gICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAg
aGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKLSAgICAvLyBhIHByb2JsZW0gZHJpdmVy
IGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBuZXZlciBjbGVhciB0aGUgZXJyb3IuCi0gICAg
Ly8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwgd2UgZ290IE5PX0VSUk9SLgot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewotICAgICAgICBHQ0dMZW51
bSBlcnJvciA9IGdsR2V0RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7
Ci0gICAgICAgIG1vdmVkQW5FcnJvciA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vdmVk
QW5FcnJvcjsKLX0KLQotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9y
KCkKLXsKLSAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewotICAgICAgICAv
LyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3Ig
bGlzdCBpbiBjYXNlCi0gICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2lu
Y2UgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJvdGgKLSAgICAgICAgLy8gZ2xHZXRFcnJvciBh
bmQgZ2V0RXJyb3IgaXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9uY2UuCi0gICAg
ICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgICAgICByZXR1cm4gbV9z
eW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7Ci0gICAgfQotCi0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwotCi0gICAg
cmV0dXJuIDo6Z2xHZXRFcnJvcigpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBTdHJpbmcocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17
Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJl
dHVybiA6OmdsSXNCdWZmZXIoYnVmZmVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6
Z2xJc0VuYWJsZWQoY2FwKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBp
ZiAoIWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1
cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQot
ICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0pOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5k
ZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBH
TF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVy
KTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIGlmICghc2hhZGVyKQotICAgICAgICByZXR1
cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1H
TE9iamVjdCB0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbExpbmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJv
Z3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0KLSAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwotICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
c1syXSA9IHsgfTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBz
aGFkZXJzKTsKLQotICAgIGlmIChjb3VudCA9PSAyKQotICAgICAgICBtX2xpbmtlZFNoYWRlck1h
cC5zZXQocHJvZ3JhbSwgc3RkOjptYWtlX3BhaXIoc2hhZGVyc1swXSwgc2hhZGVyc1sxXSkpOwot
Ci0gICAgOjpnbExpbmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29s
ZWFuIGludmVydCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU2Npc3Nvcih4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVy
U291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsK
LSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotCi0gICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7Ci0KLSAgICBl
bnRyeS5zb3VyY2UgPSBzdHJpbmc7Ci0KLSAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVy
LCBXVEZNb3ZlKGVudHJ5KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1
bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRl
KGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdD
R0xlbnVtIGZhY2UsIEdDR0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFj
ZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChH
Q0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0ZW5j
aWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dM
ZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFm
KGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9u
LCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0g
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwg
YXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEs
IHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFT
U0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5
LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0
IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9u
LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJh
eSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtNGZ2KGxv
Y2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYw
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwg
YXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3Jt
MmkobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJy
YXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJpdihs
b2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwg
djEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJh
eS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYx
LCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2
MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAg
ICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBh
cnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VS
VCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFy
cmF5LmJ1ZlNpemUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsK
LSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgOSkpOwotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxv
Y2F0aW9uLCBhcnJheS5idWZTaXplIC8gOSwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
YXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDE2KSk7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm1N
YXRyaXg0ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAxNiwgdHJhbnNwb3NlLCBhcnJheS5k
YXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZhbGlkYXRlUHJvZ3Jh
bShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMWYo
aW5kZXgsIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwg
djEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMj4gYXJyYXkpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQg
djAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRl
eCwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBh
cnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYo
aW5kZXgsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVt
IHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBu
b3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLVBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkK
LXsKLSAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRm
b3JtR0xPYmplY3QgYXJyYXkpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRlbGV0ZVZlcnRleEFy
cmF5T0VTKGFycmF5KTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICByZXR1cm4gZ2V0
RXh0ZW5zaW9ucygpLmlzVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkK
LXsKLSAgICBnZXRFeHRlbnNpb25zKCkuYmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUs
IEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZh
bHVlLmRhdGEpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZm
ZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NH
TGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuIHZhbHVlOwotCi0gICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5h
bWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRGbG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4g
dmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUuZGF0YSk7Ci19Ci0KLUdDR0xpbnQ2
NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQot
ewotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwotICAgIC8v
IEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2gg
b3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdM
MiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCi0gICAgLy8gOjpnbEdldEludGVnZXI2NHYo
cG5hbWUsIHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQ2NCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQg
aW5kZXgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0oaW5k
ZXgpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgR0NHTGludDY0IHZhbHVlID0gMDsKLSAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBl
bmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5k
IGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wg
RVMgMy4wLgotICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7
Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9
IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQotICAgICAgICBh
dHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBl
aXRoZXIgd29ya3MuCi0gICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVl
OwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaShQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEdDR0xpbnQgdmFsdWUgPSAw
OwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0
dXJuIHZhbHVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXROb25CdWls
dEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJUKEFDVElWRV9BVFRSSUJVVEVTID09
IHBuYW1lIHx8IEFDVElWRV9VTklGT1JNUyA9PSBwbmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9s
Q291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3Jh
bVN5bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUu
Y291bnRGb3JUeXBlKHBuYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnNldChwcm9ncmFtLCBBY3RpdmVTaGFkZXJTeW1ib2xD
b3VudHMoKSk7Ci0gICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pLT52YWx1ZTsKLQotICAg
IC8vIFJldHJpZXZlIHRoZSBhY3RpdmUgYXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3Vu
dCwgYW5kIGEgbWFwcGluZyBvZgotICAgIC8vIG91ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4
ZXMgdG8gdGhlIHJlYWwgdW5maWx0ZXJlZCBpbmRleGVzIGluc2lkZSBPcGVuR0wuCi0gICAgR0NH
TGludCBhdHRyaWJ1dGVDb3VudCA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBB
Q1RJVkVfQVRUUklCVVRFUywgJmF0dHJpYnV0ZUNvdW50KTsKLSAgICBmb3IgKEdDR0xpbnQgaSA9
IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8gaW5mbzsK
LSAgICAgICAgZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKLSAgICAgICAg
aWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAu
YXBwZW5kKGkpOwotICAgIH0KLSAgICAKLSAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMu
Ci0gICAgR0NHTGludCB1bmlmb3JtQ291bnQgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJv
Z3JhbSwgQUNUSVZFX1VOSUZPUk1TLCAmdW5pZm9ybUNvdW50KTsKLSAgICBmb3IgKEdDR0xpbnQg
aSA9IDA7IGkgPCB1bmlmb3JtQ291bnQ7ICsraSkgewotICAgICAgICBBY3RpdmVJbmZvIGluZm87
Ci0gICAgICAgIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGksIGluZm8pOwotICAgICAg
ICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIAotICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1J
bmRleE1hcC5hcHBlbmQoaSk7Ci0gICAgfQotICAgIAotICAgICp2YWx1ZSA9IHN5bWJvbENvdW50
cy5jb3VudEZvclR5cGUocG5hbWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBHQ0dM
c2l6ZWkgY291bnQsIGNvbnN0IFN0cmluZyYgbG9nKQotewotICAgIExPRyhXZWJHTCwgIk9yaWdp
bmFsIFNoYWRlckluZm9Mb2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgpKTsKLQotICAgIEpTQzo6
WWFycjo6UmVndWxhckV4cHJlc3Npb24gcmVnRXhwKCJ3ZWJnbF9bMDEyMzQ1Njc4OWFiY2RlZkFC
Q0RFRl0rIik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExvZzsKLSAgICAKLSAgICAv
LyBBTkdMRSBpbnNlcnRzIGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0aGUgc2hhZGVyIHNvdXJj
ZSB0aGF0Ci0gICAgLy8gY2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNvbXBpbGVycy4gVGhlcmUg
aXMgbm8gcG9pbnQgc2hvd2luZwotICAgIC8vIHRoaXMgd2FybmluZyB0byB0aGUgdXNlciBzaW5j
ZSB0aGV5IGRpZG4ndCB3cml0ZSB0aGUgY29kZSB0aGF0Ci0gICAgLy8gaXMgY2F1c2luZyBpdC4K
LSAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhbmdsZVdhcm5pbmcgeyAi
V0FSTklORzogMDoxOiBleHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBv
cnRlZFxuIl9zIH07Ci0gICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFydHNXaXRoKGFuZ2xlV2Fy
bmluZykgPyBhbmdsZVdhcm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOwotICAgIGludCBtYXRjaGVk
TGVuZ3RoID0gMDsKLQotICAgIGRvIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcmVnRXhwLm1hdGNo
KGxvZywgc3RhcnRGcm9tLCAmbWF0Y2hlZExlbmd0aCk7Ci0gICAgICAgIGlmIChzdGFydCA9PSAt
MSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9n
LnN1YnN0cmluZyhzdGFydEZyb20sIHN0YXJ0IC0gc3RhcnRGcm9tKSk7Ci0gICAgICAgIHN0YXJ0
RnJvbSA9IHN0YXJ0ICsgbWF0Y2hlZExlbmd0aDsKLQotICAgICAgICBjb25zdCBTdHJpbmcmIG1h
bmdsZWRTeW1ib2wgPSBsb2cuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaGVkTGVuZ3RoKTsKLSAgICAg
ICAgY29uc3QgU3RyaW5nJiBtYXBwZWRTeW1ib2wgPSBtYXBwZWRTeW1ib2xOYW1lKHNoYWRlcnMs
IGNvdW50LCBtYW5nbGVkU3ltYm9sKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRGVtYW5nbGluZzog
JXMgdG8gJXMiLCBtYW5nbGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCksIG1hcHBlZFN5bWJvbC51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChtYXBwZWRTeW1ib2wpOwot
ICAgIH0gd2hpbGUgKHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4obG9nLmxlbmd0aCgpKSk7
Ci0KLSAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cu
bGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKLQotICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFk
ZXJJbmZvTG9nOlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
LSAgICByZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7
Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5n
dGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAg
R0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAg
OjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgp
KTsKLQotICAgIEdDR0xzaXplaSBjb3VudDsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNb
Ml07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7
Ci0KLSAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5n
KGluZm8uZGF0YSgpLCBzaXplKSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSkKLXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwot
fQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsK
LSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hh
ZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0g
ICAgY2FzZSBERUxFVEVfU1RBVFVTOgotICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAgIDo6
Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENPTVBJTEVfU1RBVFVTOgotICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291
cmNlTWFwLmVuZCgpKQotICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3Vs
dC0+dmFsdWUuaXNWYWxpZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSU5GT19MT0dfTEVO
R1RIOgotICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAg
ICAgICAgICAgdmFsdWUgPSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikubGVuZ3RoKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6Ci0gICAgICAgIHZhbHVl
ID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7Ci0gICAg
fQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VS
VChzaGFkZXIpOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotCi0gICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5k
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICBjb25zdCBTaGFkZXJTb3VyY2VF
bnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotICAgIGlmICghZW50cnkuaXNWYWxpZCkKLSAg
ICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpn
bEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6
ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgIDo6Z2xHZXRTaGFk
ZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgUGxh
dGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICByZXR1cm4gZ2V0
VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsK
LX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxh
dGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBj
b25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAg
aWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOyAKLQotICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKLX0KLQotR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGZsb2F0IHZhbHVlID0gMC5mOwotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6
OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4g
dmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMaW50IHZh
bHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9j
YXRpb24sIHZhbHVlLmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0
aW9uLCB2YWx1ZS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPEdDR0x1aW50PiB2YWx1ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotfQot
Ci1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJU
KHByb2dyYW0pOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIC0xOwotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dy
YW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6
OmdldFVuaWZvcm1Mb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0
YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiA6OmdsR2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUdDR0xz
aXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdD
R0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdm9pZCogcG9pbnRlciA9IDA7Ci0g
ICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHBvaW50ZXIpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwg
R0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSNp
ZiAhVVNFKE9QRU5HTF9FUykKLSAgICBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykKLSAgICAg
ICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRfQVJCOwotI2VuZGlmCi0KLSAgICBpZiAobV91c2luZ0Nv
cmVQcm9maWxlKSAgewotICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBmb3JtYXQgdmFsdWVzIHVz
ZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5nIGEgY29yZSBwcm9maWxl
LCBzbyB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIGFkYXB0IHRoZW0sIGFzIHdlIGRvIGluIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKCkuCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0
KSB7Ci0gICAgICAgIGNhc2UgQUxQSEE6Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xf
UkVEIHRvIGJhY2sgR0xfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAgICAgICAgICAg
IGZvcm1hdCA9IFJFRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExVTUlOQU5D
RV9BTFBIQToKLSAgICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRyB0byBiYWNrIEdMX0xV
TUlOQU5DRV9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgotICAgICAgICAgICAgZm9ybWF0
ID0gUkc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0
byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVm
ZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgotICAgIDo6Z2xUZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzLmRhdGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9z
dGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRh
LmRhdGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xp
bnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IGRhdGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXpl
LCBkYXRhLmRhdGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5j
dXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2Vu
QnVmZmVycygxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0g
MDsKLSAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0K
LVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0o
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x1aW50IG8g
PSAwOwotICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19
Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRl
cihHQ0dMZW51bSB0eXBlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdN
RU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKLX0K
LQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVy
ZSgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7Ci0gICAgbV9z
dGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVm
ZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1
ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdG
Qk8pOwotICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewotICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2Vk
IGZvciBkcmF3aW5nCi0gICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVk
LgotICAgICAgICBiaW5kRnJhbWVidWZmZXIoRlJBTUVCVUZGRVIsIDApOwotICAgIH0KLSAgICBn
bERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAg
Z2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0
ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgewot
ICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKLSAgICB9KTsK
LSAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLSAgICBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQucmVtb3ZlQWxsKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikKLXsKLSAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCB0
bwotICAgIC8vIHByZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRvIGdl
dEVycm9yIHdpbGwgZ2V0Ci0gICAgLy8gYW55IGVycm9ycyBmcm9tIGdsRXJyb3IgYmVmb3JlIHRo
ZSBlcnJvciB3ZSBhcmUgc3ludGhlc2l6aW5nLgotICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpOwotICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZvcmNlQ29udGV4dExvc3QoKQotewotICAgIGZvciAo
YXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+
Zm9yY2VDb250ZXh0TG9zdCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZWN5Y2xlQ29udGV4dCgpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3Io
bV9jbGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4dCgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0
aW9uKCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMp
KQotICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBm
b3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZCht
X3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdldEV4dGVu
c2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmlt
Y291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkg
Y291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNv
dW50KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSht
b2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVz
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlz
b3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgZ2V0RXh0ZW5zaW9u
cygpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7Ci19Ci0KLSNpZiBI
QVZFKE9QRU5HTF80KSAmJiBFTkFCTEUoV0VCR0wyKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50IGluZGV4KQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xQcmltaXRp
dmVSZXN0YXJ0SW5kZXgoaW5kZXgpOwotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBH
Q0dMZW51bSB1c2FnZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotICAgIFVO
VVNFRF9QQVJBTSh1c2FnZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGxlbmd0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNv
bnN0IHZvaWQqIHNyY0RhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQot
ewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShkc3RCeXRlT2Zm
c2V0KTsKLSAgICBVTlVTRURfUEFSQU0oc3JjRGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY09m
ZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80
KSB8fCBIQVZFKE9QRU5HTF9FU18zKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29w
eUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQs
IEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVp
cHRyIHNpemUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbENvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0
LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7Ci19Ci0jZWxzZQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0sIEdDR0xlbnVtLCBH
Q0dMaW50cHRyLCBHQ0dMaW50cHRyLCBHQ0dMc2l6ZWlwdHIpCi17Ci19Ci0jZW5kaWYKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKLXsKLSNpZiBI
QVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBHQ0dMdm9pZCogcHRyID0gOjpnbE1hcEJ1
ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIEdyYXBoaWNzQ29udGV4dEdM
OjpNQVBfUkVBRF9CSVQpOwotICAgIGlmICghcHRyKQotICAgICAgICByZXR1cm47Ci0gICAgbWVt
Y3B5KGRhdGEuZGF0YSwgcHRyLCBkYXRhLmJ1ZlNpemUpOwotICAgIGlmICghOjpnbFVubWFwQnVm
ZmVyKHRhcmdldCkpCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX09QRVJBVElPTik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwot
ICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLSAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwot
I2VuZGlmCi19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVm
ZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQg
c3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xp
bnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHNyY1gwKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTApOwotICAgIFVOVVNFRF9Q
QVJBTShzcmNYMSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKLSAgICBVTlVTRURfUEFSQU0o
ZHN0WDApOwotICAgIFVOVVNFRF9QQVJBTShkc3RZMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFgx
KTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WTEpOwotICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKLSAg
ICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
bGF5ZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGF0
dGFjaG1lbnQpOwotICAgIFVOVVNFRF9QQVJBTSh0ZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0o
bGV2ZWwpOwotICAgIFVOVVNFRF9QQVJBTShsYXllcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xT
cGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKLXsKLSAgICBVTlVTRURfUEFSQU0odGFy
Z2V0KTsKLSAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVudHMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKLSAgICBVTlVTRURf
UEFSQU0oeCk7Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQotewotICAgIFVOVVNFRF9QQVJBTShzcmMp
OwotfQotCi0jaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xp
bnQ+IGRhdGEpCi17Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0
YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJu
YWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1
ZlNpemUpOwotICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFN0b3JhZ2UyRCh0
YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFN0
b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKLX0KLSNlbHNlCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFu
PEdDR0xpbnQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdD
R0xzaXplaSwgR0NHTHNpemVpKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhTdG9yYWdlMkQoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwg
R0NHTHNpemVpKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9y
YWdlM0QoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMc2l6ZWkpCi17Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHhvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTSh5b2Zmc2V0KTsKLSAgICBVTlVTRURf
UEFSQU0oem9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5
KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwot
fQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIFVO
VVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0obmFtZSk7Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24p
OwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYx
KQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsK
LSAgICBVTlVTRURfUEFSQU0odjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwg
R0NHTHVpbnQgdjIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURf
UEFSQU0odjApOwotICAgIFVOVVNFRF9QQVJBTSh2MSk7Ci0gICAgVU5VU0VEX1BBUkFNKHYyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2
MykKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHYxKTsKLSAgICBVTlVTRURfUEFSQU0odjIpOwotICAgIFVOVVNF
RF9QQVJBTSh2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0x
dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewot
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
bG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRh
KQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVT
RURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0
YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFu
c3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVO
VVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxv
Y2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0o
ZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgz
eDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAg
IFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFN
KHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykKLXsKLSAgICBVTlVTRURfUEFSQU0o
aW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHopOwotICAgIFVOVVNFRF9QQVJBTSh3KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNw
YW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IHgsIEdDR0x1
aW50IHksIEdDR0x1aW50IHosIEdDR0x1aW50IHcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4
KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNF
RF9QQVJBTSh6KTsKLSAgICBVTlVTRURfUEFSQU0odyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIFVOVVNF
RF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RyaWRlKTsKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1Jhbmdl
RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NH
THNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBV
TlVTRURfUEFSQU0obW9kZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsKLSAgICBVTlVTRURf
UEFSQU0oZW5kKTsKLSAgICBVTlVTRURfUEFSQU0oY291bnQpOwotICAgIFVOVVNFRF9QQVJBTSh0
eXBlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZl
cik7Ci0gICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1
ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdihH
Q0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFS
QU0oZHJhd2J1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dM
aW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKQotewotICAg
IFVOVVNFRF9QQVJBTShidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAg
ICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NH
TGZsb2F0IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZl
cik7Ci0gICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkZXB0
aCk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0ZW5jaWwpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCi17Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLX0KLQotR0NHTGJvb2xl
YW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVy
eSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
LSAgICBVTlVTRURfUEFSQU0ocXVlcnkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1
ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLQotICAgIHJldHVybiAwOwotfQot
Ci1HQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aShQbGF0
Zm9ybUdMT2JqZWN0IHF1ZXJ5LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
cXVlcnkpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQot
ewotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0o
c2FtcGxlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Nh
bXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewotICAgIFVOVVNFRF9QQVJBTShzYW1w
bGVyKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
KQotewotICAgIFVOVVNFRF9QQVJBTSh1bml0KTsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGZsb2F0IHBhcmFtKQotewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAg
ICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Ci19Ci0KLUdD
R0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxh
dGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFS
QU0oc2FtcGxlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICByZXR1cm4gMC5mOwot
fQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVy
aShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQotCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMoR0NH
TGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGNvbmRpdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKLQotICAgIHJldHVybiAwOwot
fQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5j
IHN5bmMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTeW5jKEdDR0xzeW5jIHN5
bmMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxk
IGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwot
ICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5j
KEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwotICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRpbWVvdXQpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVT
RURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJh
bnNmb3JtRmVlZGJhY2soKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlk
KQotewotICAgIFVOVVNFRF9QQVJBTShpZCk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGlkKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRh
cmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
LSAgICBVTlVTRURfUEFSQU0oaWQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHByaW1pdGl2ZU1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1v
ZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh2YXJ5
aW5ncyk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlck1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQotewotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCi17
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewot
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQot
ewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHNpemUpOwotfQotCi1WZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFtZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBy
b2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtTmFtZXMpOwotCi0gICAgcmV0dXJuIHsg
fTsKLX0KLQotVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3Rp
dmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWlu
dD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBWZWN0b3I8R0NHTGlu
dD4gcmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7Ci0jaWYgSEFWRShPUEVOR0xfNCkg
fHwgSEFWRShPUEVOR0xfRVNfMykKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIDo6Z2xHZXRB
Y3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUlu
ZGljZXMuZGF0YSgpLCBwbmFtZSwgcmVzdWx0LmRhdGEoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotI2VuZGlmCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1
bmlmb3JtQmxvY2tOYW1lKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVT
RURfUEFSQU0odW5pZm9ybUJsb2NrTmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KQotewotICAgIFVO
VVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgp
OwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxv
Y2tJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0JpbmRpbmcpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTSh4
KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBV
TlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKLSAgICBVTlVT
RURfUEFSQU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1aW50IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gcGFyYW1zKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBV
TlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtICwgR0NHTGludHB0cikKLXsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51
bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xl
bnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVt
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQot
ewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xp
bnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBH
Q0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVu
dW0sIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRl
eFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NH
TFNwYW48Y29uc3QgR0NHTHZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVu
dW0sIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
bXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVp
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBy
ZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBH
Q0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2Uz
RChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVp
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwg
R0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xz
aXplaSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
bXVsdGlEcmF3QXJyYXlzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NH
TGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51
bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48
Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnQgdW5wYWNrQWxpZ25tZW50KQotewotICAgIEFTU0VSVCh1bnBh
Y2tBbGlnbm1lbnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1l
bnQgPT0gNCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7Ci0gICAgVW5pcXVlQXJyYXk8dW5zaWdu
ZWQgY2hhcj4gemVybzsKLSAgICB1bnNpZ25lZCBzaXplID0gMDsKLSAgICBpZiAod2lkdGggPiAw
ICYmIGhlaWdodCA+IDApIHsKLSAgICAgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7Ci0gICAg
ICAgIHBhcmFtcy5hbGlnbm1lbnQgPSB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgICAgIEdDR0xlbnVt
IGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVp
Z2h0LCAxLCBwYXJhbXMsICZzaXplLCBudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgaWYgKGVy
cm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoZXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIHplcm8gPSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4oc2l6ZSk7Ci0g
ICAgICAgIGlmICghemVybykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKLSAgICB9Ci0g
ICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bhbih6ZXJvLmdldCgpLCBzaXplKSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYg
IVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
ci5jcHAKaW5kZXggZTY2ZTAwYWRiMjg3NWFkZjY5YTE5N2ZjYzY5MjMxNmRhNmY5NmU2ZS4uZDI5
OWExOWZhODY2Mzk3NTUyZGQ2ZGU3ODgwY2NhNDMzODJmMjhhNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKQEAgLTI4LDkgKzI4LDEzIEBACiAj
aWYgRU5BQkxFKFdFQkdMKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
ci5oIgogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAKKyNpZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5oIgorI2Vsc2UKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2Vu
ZGlmCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
ciYgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkKQEAgLTU2
LDcgKzYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmRpc3BsYXlX
YXNSZWNvbmZpZ3VyZWQoKQogfQogI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xNYW5hZ2VyOjphZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoUGxhdGZvcm1H
cmFwaGljc0NvbnRleHRHTCogY29udGV4dCkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAg
aWYgKCFjb250ZXh0KQpAQCAtNjYsNyArNzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMTWFuYWdlcjo6YWRkQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dAog
ICAgIG1fY29udGV4dHMuYXBwZW5kKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMTWFuYWdlcjo6cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCog
Y29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFtX2Nv
bnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKaW5kZXggMGVmODZkYzZkZTdmMjFkNWU4
ZTkxMjBlOWEzMmIwYThiMWYxZjczMS4uZDE0ODM0MTBkMDIzZjgzMDM2ZDk3ODU2NDM1ZmFlNTU4
NGIwNDY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIu
aApAQCAtMzYsMTUgKzM2LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgdW5zaWdu
ZWQgTWF4Q29udGV4dHMgPSAxNjsKIAorI2lmIFVTRShBTkdMRSkKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU7CisjZWxzZQogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5k
aWYKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKICAgICBmcmllbmQg
TmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsKIHB1YmxpYzoK
KyNpZiBVU0UoQU5HTEUpCisgICAgdXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCA9IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxzZQorICAgIHVzaW5nIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0wgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKKyNlbmRpZgorCiAgICAgc3RhdGlj
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlciYgc2hhcmVkTWFuYWdlcigpOwogICAgIAot
ICAgIHZvaWQgYWRkQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopOwotICAgIHZvaWQg
cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopOworICAgIHZvaWQgYWRkQ29u
dGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0
KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wqKTsKICAgICAKICAgICB2b2lkIHJlY3ljbGVDb250
ZXh0SWZOZWNlc3NhcnkoKTsKICAgICBib29sIGhhc1Rvb01hbnlDb250ZXh0cygpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dHMuc2l6ZSgpID49IE1heENvbnRleHRzOyB9CkBAIC01OSw3ICs2OSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2Vy
KCkgPSBkZWZhdWx0OwogCi0gICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKj4gbV9j
b250ZXh0czsKKyAgICBWZWN0b3I8UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCo+IG1fY29udGV4
dHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBw
ZXIuY3BwCmluZGV4IDA1NzU0NDQ4YjkwM2UxNDk5M2VkMzFiMGNiZDYxZTg2OTRhOWVlOTkuLjAy
NTkxZmE2MDA0N2Y4MDgwNzY3ZjJiOWZjMmNhZTdjZWRiZjFiOTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1
cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCkBAIC05MSw3ICs5MSw2IEBAIEdy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyKEdyYXBoaWNzQ29udGV4dEdMCiB7CiB9CiAKLS8vIEZJWE1FOiBCZWxvdyBmdW5jdGlvbmFs
aXR5IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIgdG8g
c2ltcGxpZnkgdGhlIGJhc2UgY2xhc3MuCiAKIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTD4gY3Jl
YXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyYgYXR0cmlidXRlcykKIHsKQEAgLTEyNSw2ICsxMjQsOCBAQCBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0R0w+IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFw
aGljc0NvbnRleAogICAgIHJldHVybiBjb250ZXh0OwogfQogCisvLyBGSVhNRTogQmVsb3cgZnVu
Y3Rpb25hbGl0eSBzaG91bGQgYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgorCiAjaWYgVVNFKEFOR0xFKQogR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmli
dXRlcykKQEAgLTQyMSwxNiArNDIyLDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrR1BVU3RhdHVzKCkKIHsKIH0KIAorI2lmICFVU0UoQU5HTEUpCiBib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKIHsKLSNpZiBVU0UoQU5H
TEUpCi0gICAgcmV0dXJuIG1faXNGb3JXZWJHTDI7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQorI2lm
IFVTRShPUEVOR0xfRVMpCiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAgIHJldHVybiBmYWxz
ZTsKICNlbmRpZgogfQorI2VuZGlmCiAKIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKQEAgLTQ2MSwxMSArNDYyLDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCiB7
CiB9CiAKKyNpZiAhVVNFKEFOR0xFKQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2lt
dWxhdGVFdmVudEZvclRlc3RpbmcoU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nIGV2ZW50KQogewog
ICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1
cmUpCiAgICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7CiB9CisjZW5kaWYKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oCmluZGV4IGU0NjYyYjY4
M2VhNDViNmYxOTY2YjMxOTczMzkzMzAzYWFmODYwOTUuLmQzYmM3MWU2MjVmN2FjYTkyMGZhYWNh
MmUxNzJhMDlmMzAxYzY4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyLmgKQEAgLTI3LDE1ICsyNywyNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCisj
aWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKKyNlbHNl
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7CisjaWYgVVNFKEFO
R0xFKQordXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSA9IEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU7CisjZWxzZQordXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyQmFzZSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOworI2VuZGlmCisKK2NsYXNzIFdFQkNP
UkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXJCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcj4gY3JlYXRlKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyYmKTsKICAgICB+R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyKCk7CiAKKyAgICAvLyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJCYXNlIG92ZXJy
aWRlcy4KICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVyZUZyb21NZWRpYShN
ZWRpYVBsYXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGZpbmFsOwog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ckFOR0xFLmNwcAppbmRleCAwODUzOWE3ZDkyOTgxMTQ1ZGMwNjAwMWI1NzRjYThjOWE3MWY4OTU1
Li5jNjBkMGVkYTgwZmYyM2MxNmJhNDRkY2ZmYTAyZDU4MThkMzlkOGY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKQEAgLTQw
LDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMRGlzcGxheSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1EaXNwbGF5KCkg
Y29uc3QKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnN0CiB7CiAjaWYgVVNFKE5JQ09TSUEpCiAgICAg
cmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0Zm9ybURpc3BsYXkoKTsKQEAgLTQ5LDcgKzQ5LDcg
QEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnMKICNlbmRpZgogfQogCi1QbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygp
IGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJQSkKICAgICBy
ZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtQ29uZmlnKCk7CkBAIC01OCw3ICs1OCw3IEBA
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKICNlbmRpZgogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQorYm9vbCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogewogICAgIGF1dG8g
YXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogICAgIGNvbnN0IGF1dG8gc2l6ZSA9IGdldElu
dGVybmFsRnJhbWVidWZmZXJTaXplKCk7CkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtUmVsZWFz
ZVRocmVhZFJlc291cmNlcygpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3Jt
UmVsZWFzZVRocmVhZFJlc291cmNlcygpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERp
cmVjdDJELmNwcAppbmRleCAxMjE1MGIxZDUwZTViYzg5Mzc0ZWFhODExZTIzMmIzY2M1MGYzMTUx
Li4zYjRiNzU4MDI3ZjY5NjRlMDA5ZWIyZTU3MjBkNGEzYzFiY2NlZGI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJl
Y3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCkBAIC00OCw3ICs0OCw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNv
bnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEdMOjpwYWludFRvQ2Fu
dmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKIHsKICAgICBpZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2Fu
dmFzU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQppbmRleCA5NTQ0YjUxYzI3OGRmNTY5
ZWE0YWIwYmZlZjdlZjc0NGFjNTJjNzM1Li42ZDc3MDdkNDBjMzJmMjg0MjljM2QzMjQ1MTVhNWNj
Njk3NzYxYmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dl
YkNvcmVUaHJlYWQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJD
b3JlVGhyZWFkLm1tCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbXBvcnQgIkNvbW1vblZNLmgiCiAj
aW1wb3J0ICJGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCiAjaW1w
b3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNp
bXBvcnQgIlRocmVhZEdsb2JhbERhdGEuaCIKQEAgLTc3LDEzICs3NywxMyBAQCB2b2lkIFJlbGVh
c2VXZWJUaHJlYWRHbG9iYWxTdGF0ZSgpCiAgICAgLy8gSW4gc2luZ2xlLXRocmVhZGVkIGVudmly
b25tZW50cyB3ZSBkbyBub3QgbmVlZCB0byB1bnNldCB0aGUgY29udGV4dCwgYXMgdGhlcmUgc2hv
dWxkIG5vdCBiZSBhY2Nlc3MgZnJvbQogICAgIC8vIG11bHRpcGxlIHRocmVhZHMuCiAgICAgQVNT
RVJUKFdlYlRocmVhZElzRW5hYmxlZCgpKTsKLSAgICB1c2luZyBSZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VCZWhhdmlvciA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpSZWxlYXNlVGhy
ZWFkUmVzb3VyY2VCZWhhdmlvcjsKKyAgICB1c2luZyBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhh
dmlvciA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OlJlbGVhc2VUaHJlYWRSZXNv
dXJjZUJlaGF2aW9yOwogICAgIC8vIEZvciB3ZWIgdGhyZWFkLCBqdXN0IHJlbGVhc2UgdGhlIGNv
bnRleHQgYXMgd2Uga25vdyB3ZSB3aWxsIHNlZSBjYWxscyB0byBpdCBhZ2Fpbi4KICAgICAvLyBG
b3Igbm9uLXdlYiB0aHJlYWRzLCBlLmcuIHRoaXJkLXBhcnR5IGNsaWVudCB0aHJlYWRzLCB3ZSBk
b24ndCBrbm93IGlmIHdlIGV2ZXIgc2VlIGFub3RoZXIgY2FsbCBmcm9tIHRoZQogICAgIC8vIHRo
cmVhZCwgc28gd2UgYWxzbyByZWxlYXNlIHRoZSB0aHJlYWQgcmVzb3VyY2VzLgogICAgIFJlbGVh
c2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHJlbGVhc2VCZWhhdmlvciA9CiAgICAgICAgIFdlYlRo
cmVhZElzQ3VycmVudCgpID8gUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6OlJlbGVhc2VD
dXJyZW50Q29udGV4dCA6IFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpSZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxl
YXNlVGhyZWFkUmVzb3VyY2VzKHJlbGVhc2VCZWhhdmlvcik7CisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cmVsZWFzZVRocmVhZFJlc291cmNlcyhyZWxlYXNlQmVoYXZpb3Ip
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAppbmRleCBhYzk1OTUyMGEyZTNkZmFk
OWZjZDgyYjM5MmYxMGE5YTVhNjA0ODQwLi44NGIyZTY4NDVkMDc0OWNkYWExZTc4Yjg1MzBkOGY4
ZWE1YTBlMDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKQEAgLTIzNiw3ICsyMzYsNyBA
QCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1
ZmZlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcgogICAgICAgICAgICAgLy8gSGVyZSB3ZSBkbyBub3Qg
dHJ5IHRvIHBsYXkgYmFjayBwZW5kaW5nIGNvbW1hbmRzIGZvciBpbWFnZUJ1ZmZlci4gQ3VycmVu
dGx5IHRoaXMgY2FsbCBpcyBvbmx5IG1hZGUgZm9yIGVtcHR5CiAgICAgICAgICAgICAvLyBpbWFn
ZSBidWZmZXJzIGFuZCB0aGVyZSdzIG5vIGdvb2Qgd2F5IHRvIGFkZCBkaXNwbGF5IGxpc3RzLgog
ICAgICAgICAgICAgaWYgKHBpeGVsQnVmZmVyKQotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBXVEZNb3ZlKCpw
aXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpKTsKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRUb0NhbnZh
cyhjb250ZXh0QXR0cmlidXRlcywgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci0+
YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5jbGVhclJlY3QoeyBJbnRQ
b2ludCgpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSB9KTsKICAgICAgICAgICAgIC8vIFVu
Zm9ydHVuYXRlbHkgImZsdXNoIiBpbXBsZW1lbnRhdGlvbiBpbiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kIG92ZXJsb2FkcyBvcmRlcmluZyBhbmQgZWZmZWN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1Jl
cXVlc3QuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdM
UmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAKaW5kZXggNWE2Y2U2NWU3NDQ3ZDI0ZTFlNzcz
NjBmMmQ4Y2ZlNjRlYTg4YjMyYS4uMGRhN2I5NWQxNGU5YWRmY2RkMzY2OTM5OTMzZDgwMGYwMGJm
OGZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3Bl
ZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5j
cHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
LmgiCiAjaW5jbHVkZSAiU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0R0wuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9T
ZWNvbmRzLmg+CiAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBTY29wZWRXZWJHTFJlbmRlcmluZ1Jl
c291cmNlc1JlcXVlc3Q6OmZyZWVXZWJHTFJlbmRlcmluZ1Jlc291cmNlcygpCiAgICAgaWYgKHNf
cmVxdWVzdHMpCiAgICAgICAgIHJldHVybjsKICAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0
cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFtdIHsKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpUZXJtaW5hdGVB
bmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTsKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cmVsZWFzZVRocmVhZFJlc291cmNlcyhXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6VGVybWluYXRlQW5kUmVs
ZWFzZVRocmVhZFJlc291cmNlcyk7CiAgICAgfSk7CiB9CiAK
</data>
<flag name="commit-queue"
          id="470427"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445275</attachid>
            <date>2021-11-29 05:59:06 -0800</date>
            <delta_ts>2021-11-29 11:06:44 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211129155904.patch</filename>
            <type>text/plain</type>
            <size>555482</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5hMjc3NmJmMzcwMzNkNDc5NGRjNTk0YTJlNDdlZjNkNmNk
ZmI4ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MDUsNiArMTQwNSw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0FOR0xFSGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGls
aXRpZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4
MDExODYuLjE1ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
N2I2ZDU2MTQ2OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVj
MmQ1MzE4YWIzOTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEz
Niw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvaXNvL0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09WVFRDdWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTky
OTQ5ODk1MjBjMjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVy
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlNGQ5ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJl
ZTAyNmE2YTlkMTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBA
CiAJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAv
KiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAq
LzsgfTsKIAkJN0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRl
eHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYw
OTRERDI3MEM0NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAv
KiBBTkdMRVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJm
b3JtYW5jZUdQVVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFu
Y2VHUFVSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIz
MDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRl
eHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVE
Mjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYw
Q0UgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0No
ZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAy
MTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBH
cmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVG
MjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBB
MThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEw
MzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFB
QyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xDVkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ix
NjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4
MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1
Nyw4IEBACiAJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhD
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCOTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAw
NjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0
QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJ
CTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJ
CQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJ
CQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
ICovLAorCQkJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmggKi8sCiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xF
U2V0dGluZy5jcHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFy
eUFOR0xFU2V0dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3
QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgg
Ki8sCiAJCQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAw
MDA2MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2
OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBA
QAogCQkJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJ
CTdCOEVENUVGMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEw
MzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdC
MTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICov
LAotCQkJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCAqLywKKwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8q
IEltYWdlUm90YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdG
RjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4
MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0
MjYyLDE2IEBACiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4
dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3Jh
cGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3
MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdCOTVDRkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIx
MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAv
KiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4
MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0
MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5
RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGlj
c0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5
MTVmYTVmNzRkYzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2
MzQ1NTlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8g
UmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRh
KEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25l
ZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50
UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGlu
dCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0R0xTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNi
NGQ3ZTljZWUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBH
Q0dMdWludCBib3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVu
aXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4
dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwg
R0NHTGVudW0+LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJh
aXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5k
VGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0K
KyAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91
bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0
dXJlLCBHQ0dMZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0
KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIElu
dEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1
aW50Pj47CisgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYw
ZmI1ZWUxYWMzOTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2
NDBmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNp
bmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dM
QU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
KQorRXh0ZW5zaW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUqIGNvbnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhm
YWxzZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5k
ZXggMGE2MWVmYzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRi
OWY2MTVjM2IzYTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0z
MiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMu
Ci0gICAgZXhwbGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
KTsKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVu
c2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRl
bnNpb25zR0xBTkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4
ICs2NCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRl
bnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAg
Ly8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFj
ayB0byBHcmFwaGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUq
IG1fY29udGV4dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0
aW5nLXBvaW50IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAg
ICBib29sIG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBk
ZmEyYjdhNTA5Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmgiCiAKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJl
c3Npb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFW
Rk9VTkRBVElPTikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBk
ZWZpbml0aW9uIHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAg
LTc2LDggKzcxLDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpCiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEp
CiAgICAgICAgIEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3Jt
Q29uZmlnKCksIEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQor
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBz
d2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyAr
OTksNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2lu
Z1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1Rh
cmdldCkgewogICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZv
ckRyYXdpbmdUYXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJl
aGF2aW9yIHJlbGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNl
QmVoYXZpb3IpCiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAg
LTE2MSw3ICsxNTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xf
UmVsZWFzZVRocmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFp
bnRSZXN1bHRzKCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpA
QCAtMTg3LDE0ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBw
aXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1
dGVzKCkKIHsKICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygp
LmFscGhhID8gR0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11
c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hE
ZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChH
THVpbnQgaW50ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3Bl
ZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAg
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+
IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBnbDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwg
bnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBw
cmVjaXNpb25UeXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lz
aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48
R0NHTGludCwgMj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xl
bnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNo
YWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAg
ICAgICAgIGludGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihn
ZXRFeHRlbnNpb25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZz
ZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQg
eW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0wKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwg
R0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewogICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VT
aXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNl
dCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQg
eW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBH
Q0dMY2xhbXBmIHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGds
OjpEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oekZhcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRo
KEdDR0xjbGFtcGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVw
dGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVw
dGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lv
bnMpCiAgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+
KHRoaXMpOwogICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpy
ZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0
YS5kYXRhLCBmYWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRu
UGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJ
bXBsKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBs
ZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0
YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMs
IEdDR0xzaXplaSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZm
ZXJPYmplY3QpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYK
IH0KIAotLy8gVGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZv
bGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygp
OwogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZv
cm1zIGFyZSBub3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQog
ICAgICAgICByZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFT
U0VSVCghbV9sYXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVS
ZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5i
b3VuZFJlYWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpA
QCAtNTg3LDcgKzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhl
bHNGb3JQYWludFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBt
X2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1
cm47CkBAIC02NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0
dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTY4Miw3ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVU
ZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNT
RVJUKHNoYWRlcik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8K
ICAgICBnbDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC03MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0CiB9CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGds
OjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xj
bGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBn
cmVlbiwgR0NHTGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVu
dW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dM
ZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dM
ZW51bSBtb2RlQWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9
CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShH
Q0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xl
bnVtIGRzdEFscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBh
cmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEs
IEdDR0xlbnVtIGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJH
QgogICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0
ciBzaXplLCBHQ0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRh
dGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xT
cGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdD
R0x2b2lkPiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0
YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciBy
ZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVh
ZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NH
TGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0
aXZSb2J1c3RBTkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXpl
LCBudWxscHRyLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODQ4LDcgKzg0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
IGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgs
IGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRl
ciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAg
Z2w6OlRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6
ZSwgcGl4ZWxzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQq
PihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50
IHhvZmYKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIHBpeGVscy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50
IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4
OTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
aW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+
KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5
MDcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1
YkltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZz
ZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0Qo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBw
bmFtZSkKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVV
bmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4m
IHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4g
cmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpA
QCAtOTI5LDcgKzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwpAQCAtOTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6
OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNs
YW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTk0NSw3ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNv
bG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVh
cihHQ0dMYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05
NjIsNyArOTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KEdDR0xpbnQgcykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdy
ZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwg
R0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNv
bXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEw
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEw
MzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAg
ICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVu
YyhmdW5jKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdD
R0xib29sZWFuIGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhH
Q0dMYm9vbGVhbiBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxh
Zyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAg
QVNTRVJUKHNoYWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMTwogICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAg
IGdsOjpEaXNhYmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODks
NyArMTA4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5
cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBm
aXJzdCwgR0NHTHNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xlCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2Fw
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0NHTHVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50
IGluZGV4KQogICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1
c2goKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExMzksNyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNo
KCkKICAgICBnbDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBs
ZXZlbCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMTU2LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE2NCw3ICsxMTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3Miw3ICsxMTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVN
aXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9W
QUxVRSk7CkBAIC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwg
aW5mbyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1J
bXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDRwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJv
Z3JhbSwgaW5kZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4
Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZv
cm1HTE9iamVjdCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwg
bWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBp
ZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAg
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0
cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJu
IG1vdmVkQW5FcnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEVycm9yKCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsK
ICAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCkBAIC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0xMzA3LDcgKzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0
cmluZyhHQ0dMZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1v
ZGUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTMxNSw3ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2Rl
KTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKICAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0xMzM0LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXAp
OwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZl
cihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQog
ewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEz
NDUsNyArMTMzOSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0Zy
YW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJ
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpA
QCAtMTM1Niw3ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1By
b2dyYW0ocHJvZ3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgcmVuZGVyYnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBy
ZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
QEAgLTEzODksNyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNU
ZXh0dXJlKHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0
aCh3aWR0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQgcGFyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFt
KQogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9h
dCB1bml0cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dM
ZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYg
dmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAs
NyArMTQyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdl
KEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVy
YWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
Y2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0x
NDUxLDcgKzE0NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJT
b3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0g
ZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBt
YXNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE0NTksNyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywg
R0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGlu
dCByZWYsIEdDR0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLAogICAgIGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQ3NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE1hc2soR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0
ZShmYWNlLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdD
R0xlbnVtCiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShm
YWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xm
bG9hdCB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsx
NTAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2
YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyAr
MTUxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbAogICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAg
ICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0y
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsK
ICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAog
ICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2
MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXpl
ICUgMykpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyAr
MTU3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlm
b3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJh
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50
IHYxCiAgICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
IHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bgogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXku
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCwgR0NHTGludCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAzLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xp
bnQgdjIsIEdDR0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBH
Q0dMaW50IHYzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQog
ewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
CiAgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1N
YXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAg
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAg
ICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MTY3NSw3ICsxNjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRl
eEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAg
ICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZgogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxv
YXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBn
bDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgND4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cK
ICAgICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRl
eCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBH
Q0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNp
emUsCiAgICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1h
bGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTc3Myw3ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVy
dGV4QXR0cmliSVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
CiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE3OTQsNyArMTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTgwNiw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0
ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTE4MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGds
OjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4MjgsNyArMTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJv
b2xlYW4+CiAgICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNp
emUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0g
MDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAg
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xF
KHBuYW1lLCB2YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdD
R0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBu
YW1lKQorR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dM
ZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgpCiB7CiAgICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYs
NyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTg5MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBj
b25zdCBTdHJpbmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAg
VU5VU0VEX1BBUkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sCiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogCkBAIC0xOTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmko
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChz
aGFkZXIpOwogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTcz
LDEyICsxOTY3LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVk
SW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxh
dGZvcm1HTE9iamVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAg
IEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTk4Nyw3ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlv
biwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9n
cmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3
ICsyMDE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVp
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5k
YXRhKTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogCkBAIC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAg
IHJldHVybiBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CiB9CiAKLUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQg
aW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5k
ZXgsIEdDR0wKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAg
IHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICBy
ZXR1cm4gbzsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlUHJvZ3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVByb2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVh
dGVQcm9ncmFtKCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
ICAgIHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIw
ODMsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
aGFkZXIoR0NHTGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9
PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURF
Uik7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRleHR1cmUoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVh
dGVUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRl
bGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAg
ICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6
RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVy
KQogICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6
OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2
MSw3ICsyMTU1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LnJlbW92ZUFsbCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQg
dG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRv
CiAgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0
RXJyb3Igd2lsbCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50
aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zm9yY2VDb250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNl
Q29udGV4dExvc3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNw
YXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIy
MjMsNyArMjIxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0
ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIy
Niw3IEBAIEdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJ
bmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3Jt
QmxvY2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yMjUyLDcgKzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTAogCiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0
dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGds
OjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6
OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRRdWVyeU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogCiAvLyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVl
ZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5z
Zm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAg
ICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVk
YmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0
IHRyYW5zZm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xP
YmplY3QgdHJhbnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9y
bUZlZWRiYWNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1G
ZWVkYmFjaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MzM0LDcgKzIzMjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNm
b3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJh
bnNmb3JtRmVlZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1G
ZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2Rl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjM1MCw3ICsyMzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dM
ZW51bSBidWZmZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyhwcm9ncmFtLCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3Mu
ZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0g
MDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAg
Z2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZT
aXplKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBp
bmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsCiAgICAgZ2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNy
Y1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50
IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dM
Yml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNDAzLDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpC
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NH
TGludCBsYXllcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0
dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVM
YXllcih0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0
YXJnZXQsIGF0dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVi
dWZmZXIodGFyZ2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRC
dWZmZXIoR0NHTGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNy
Yyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlclRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIC0xOwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMK
ICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yNDc2LDcgKzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlm
b3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSwgR0NHTHVpbnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
NDg0LDcgKzI0NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3Jt
M3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYw
LCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dQogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gMiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCgh
KGRhdGEuYnVmU2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MjUxOCw3ICsyNTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9y
bTN1aXYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1CiAgICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSA2KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyAr
MjUzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgy
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgz
eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlv
biwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZT
aXplIC8gOCwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xl
YW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAg
ICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJh
bnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQo
IShkYXRhLmJ1ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yNTcyLDcgKzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlm
b3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRh
dGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDEyKSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyAr
MjU3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dM
dWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShp
bmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+
IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyAr
MjU5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0
aXYoaW5kZXgsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQg
eSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwg
R0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4
LCBHQ0dMdQogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMu
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1l
bnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50
IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcK
ICAgICBnbDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3Qg
R0NHTGVudW0+IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6
OkRyYXdCdWZmZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIs
IGRyYXdidWZmZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZh
bHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZm
ZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRo
LCBHQ0dMaW50IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsCiAgICAgZ2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3Rl
bmNpbCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
ICAgICBnbDo6RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJu
IGdsOjpJc1F1ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVl
KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
U2FtcGxlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0
ZVNhbXBsZXIoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAg
ICBnbDo6RGVsZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIp
CiAgICAgcmV0dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcy
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJp
KHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAK
LUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NH
TGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dM
c3luYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9u
LCBHQ0dMYml0ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZp
ZWxkIGZsYQogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQog
Ci1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5
bmMpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMg
c3luYykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMo
c3luYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NH
THN5bmMgc3luYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dM
c3luYyBzeW5jKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xz
eW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywg
R0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4
OSw3ICsyNzgzLDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdh
aXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNs
aWVudFdhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdz
LCBHQ0dMaW50NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5
bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
Nzk3LDcgKzI3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhH
Q0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3lu
YyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBw
bmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1G
ZWVkYmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVl
ZGJhY2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVk
YmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgyMyw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgzMSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6
QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0K
IAotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5p
Zm9ybU5hbWVzKQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRV
bmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB1bmlmb3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBw
YXJhbXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJs
b2NraXZSb2J1c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFt
cy5idWZTaXplLCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xzaXplaSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRp
RHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZp
cnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjg1OSw3ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVs
dGlEcmF3QXJyYXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291
bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJz
dHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBt
b2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBH
Q0dMc2l6ZWkgZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTCiAgICAgZ2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5k
YXRhLCBjb3VudHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
ODgwLDcgKzI4NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdF
bGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURy
YXdFbGVtZW50c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCks
IGRyYXdjb3VudCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9m
ZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3
Y291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjg5Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVs
dGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6
TXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwg
cG9pbnRlcnMuZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQog
ewogICAgIHNpemVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVD
b21wbGV0aW9uRmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKQEAgLTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVs
YXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVk
RXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1
cmUpIHsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29t
cGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVm
ZmVyKSwgaW1hZ2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RG
TW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZl
ci5jb250ZXh0KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAg
ICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRp
cGx5aW5nLCB3aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byBy
ZXN1bHRzID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1
bHRzICYmICFyZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1
bHRzLT5mb3JtYXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0
cy0+Zm9ybWF0KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAg
Ly8gRklYTUU6IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJv
d0J5dGVzIGFuZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXpl
ID0gcmVzdWx0cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6
ZS53aWR0aCgpICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRh
dGEoKTsKKyAgICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAx
KSAqIHJvd1N0cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChu
ZXcgdWludDhfdFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9w
ICs9IHJvd1N0cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5
KHRlbXAuZ2V0KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0
b20sIHRvcCwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCks
IHJvd1N0cmlkZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHNGb3JQYWludGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI0ZWM1YjM0YjdiNGRhNzI4Y2U3YzQ2NGQzNzY1OGE2MDUxZjQ5YTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29z
aWEgeworY2xhc3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBI
b3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNz
IFBpeGVsQnVmZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBo
aWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7Cisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
OworICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGlj
IEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0
KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0
KTsKKyAgICBlbnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAg
ICAgLy8gUmVsZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRl
eHQsCisgICAgICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRl
LiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisg
ICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNh
bXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAg
dm9pZCBwcmVwYXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlv
biB3aXRob3V0IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAg
aW50IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2lu
ZyB0aHJvdWdoIEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdM
T2JqZWN0KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dz
IHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkg
ZmluYWw7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRp
b24oUGxhdGZvcm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkg
ZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCkgZmluYWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVu
ZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUs
IEdDR0xjbGFtcGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51
bSBtb2RlKSBmaW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBt
b2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdD
R0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRG
dW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNy
Y0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAg
dm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEsIEdDR0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEpIGZpbmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVu
dW0gdGFyZ2V0KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4s
IEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVh
ckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdD
R0xpbnQgcykgZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dM
Ym9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFs
OworICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0g
bW9kZSkgZmluYWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7Cisg
ICAgdm9pZCBkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0
aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9p
ZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7
CisgICAgdm9pZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0Fy
cmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFs
OworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxl
KEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lk
IGZsdXNoKCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dM
ZW51bSB0YXJnZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBi
b29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7Cisg
ICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSog
Y291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmli
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAg
ICB2b2lkIGdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4g
dmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZp
bmFsOworICAgIHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxv
YXQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBw
bmFtZSkgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5n
IGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJp
KFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0
U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5h
bDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIFN0cmluZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0
IGdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CisgICAgR0NHTGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7
CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRV
bmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTHVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdD
R0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBt
b2RlKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBm
aW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAg
IEdDR0xib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVh
biBpc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgo
R0NHTGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qp
IGZpbmFsOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pIGZpbmFsOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCByZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUs
IEdDR0xib29sZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAg
IHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFs
OworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1
aW50IG1hc2spIGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7Cisg
ICAgdm9pZCBzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAg
dm9pZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAg
dm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwg
R0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVs
cykgZmluYWw7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
aW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgp
IGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gdikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGludCB4LCBHQ0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2
b2lkIHVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJv
Z3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NH
THVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NH
TGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBH
Q0dMZmxvYXQgeikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHks
IEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmlu
YWw7CisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdD
R0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
c29yKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmlu
YWw7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICBHQ0dMYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZv
aWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVU
YXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NH
THNpemVpcHRyKSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdD
R0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAs
IEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51
bSBmaWx0ZXIpIGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0
ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0
dGFjaG1lbnRzKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7
CisgICAgdm9pZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXpl
aSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5h
bDsKKyAgICB2b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9p
ZCB0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNl
dCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRy
IG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dM
aW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNz
ZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmlu
YWw7CisgICAgR0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZp
bmFsOworICAgIHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3Vp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAg
ICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCB1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwg
R0NHTGludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBH
Q0dMdWludCB6LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2
KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1
aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdi
dWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xm
bG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVF1ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2Jq
ZWN0IHF1ZXJ5KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmpl
Y3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0g
dGFyZ2V0KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0
dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2Ft
cGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlz
U2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNh
bXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAg
ICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRl
cmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBh
cmFtKSBmaW5hbDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRT
YW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
KSBmaW5hbDsKKyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dM
Yml0ZmllbGQgZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykg
ZmluYWw7CisgICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51
bSBjbGllbnRXYWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0
IHRpbWVvdXQpIGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVs
ZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2ko
R0NHTHN5bmMsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1Ry
YW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmlu
ZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkg
ZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2
ZU1vZGUpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAg
ICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lk
IHBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9y
bUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAg
dm9pZCBiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZp
bmFsOworICAgIFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsK
KyAgICBWZWN0b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsK
KyAgICBTdHJpbmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9p
ZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykg
ZmluYWw7CisgICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRl
OworICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBtdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRz
LCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZUJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZm
ZXIoKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsK
KyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdl
dEV4dGVuc2lvbnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsK
KyAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZp
bmFsOworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRl
ZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5kaWYKKyAgICB2b2lkIHByZXBhcmVG
b3JEaXNwbGF5KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGZvcmNlQ29udGV4dExvc3QoKTsKKyAg
ICB2b2lkIHJlY3ljbGVDb250ZXh0KCk7CisgICAgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFJlbmRl
cmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CisKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgIHVuc2ln
bmVkIHRleHR1cmVTZWVkKEdDR0x1aW50IHRleHR1cmUpOworCisgICAgY29uc3RleHByIHN0YXRp
YyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkZWZhdWx0RGlzcGxheSA9IEVHTF9ERUZBVUxUX0RJU1BM
QVk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVE
aXNwbGF5VHlwZSBsb3dQb3dlckRpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlw
ZSwgLTEpOworICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgaGlnaFBl
cmZvcm1hbmNlRGlzcGxheSA9IEVHTF9DQVNUKEVHTE5hdGl2ZURpc3BsYXlUeXBlLCAtMik7Cisj
ZW5kaWYKKworcHJvdGVjdGVkOgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzKTsKKyAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1Ymxp
YyBlbnRyeSBwb2ludHMgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIC8vIENhbGxl
ZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhh
dCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkg
V0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIn
cyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAorICAgIC8vIGluIHBhcnRp
Y3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9y
CisgICAgLy8gY291bGQgbm90IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBv
ZiB0aGUgT3BlbkdMCisgICAgLy8gaW1wbGVtZW50YXRpb24uCisgICAgdm9pZCB2YWxpZGF0ZURl
cHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOworICAg
IHZvaWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAgICB2b2lkIHJlYWRuUGl4ZWxzSW1wbChH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6
ZWkqIGxlbmd0aCwgR0NHTHNpemVpKiBjb2x1bW5zLCBHQ0dMc2l6ZWkqIHJvd3MsIEdDR0x2b2lk
KiBkYXRhLCBib29sIHJlYWRpbmdUb1BpeGVsQnVmZmVyT2JqZWN0KTsKKworICAgIC8vIERpZCB0
aGUgbW9zdCByZWNlbnQgZHJhd2luZyBvcGVyYXRpb24gbGVhdmUgdGhlIEdQVSBpbiBhbiBhY2Nl
cHRhYmxlIHN0YXRlPworICAgIHZvaWQgY2hlY2tHUFVTdGF0dXMoKTsKKworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CisgICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOworCisgICAgYm9v
bCByZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZUlt
cGwoKTsKKyAgICB2b2lkIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50
UmVjdCYgPSBJbnRSZWN0KCkpOworICAgIHZvaWQgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVy
SWZOZWVkZWQoR0NHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisKKyAgICBib29sIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpOwor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGJvb2wgYWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoKTsKKyAgICBib29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKKyAgICBzdGF0aWMgYm9v
bCBtYWtlQ3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSwgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHRHTCk7CisjZW5kaWYKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGNvbnRl
eHQgc2hvdWxkIGJlIGxvc3QgZHVlIHRvIHRpbWVvdXQuCisgICAgYm9vbCB3YWl0QW5kVXBkYXRl
T2xkZXN0RnJhbWUoKSBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICAvLyBQbGF0Zm9ybSBzcGVj
aWZpYyBiZWhhdmlvciBmb3IgcmVsZWFzZVJlc291cmNlcygpOworICAgIHN0YXRpYyB2b2lkIHBs
YXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygpOworCisgICAgR0NHTHVpbnQgbV90ZXh0dXJl
IHsgMCB9OworICAgIEdDR0x1aW50IG1fZmJvIHsgMCB9OworICAgIEdDR0x1aW50IG1fZGVwdGhT
dGVuY2lsQnVmZmVyIHsgMCB9OworICAgIEdDR0x1aW50IG1faW50ZXJuYWxDb2xvckZvcm1hdCB7
IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0IHsgMCB9Owor
ICAgIEdDR0x1aW50IG1fbXVsdGlzYW1wbGVGQk8geyAwIH07CisgICAgR0NHTHVpbnQgbV9tdWx0
aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX211bHRpc2Ft
cGxlQ29sb3JCdWZmZXIgeyAwIH07CisgICAgLy8gRm9yIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjp0
cnVlIHdpdGhvdXQgbXVsdGlzYW1wbGluZy4KKyAgICBHQ0dMdWludCBtX3ByZXNlcnZlRHJhd2lu
Z0J1ZmZlclRleHR1cmUgeyAwIH07CisgICAgLy8gQXR0YWNoZXMgbV90ZXh0dXJlIHdoZW4gbV9w
cmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIGlzIG5vbi16ZXJvLgorICAgIEdDR0x1aW50IG1f
cHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPIHsgMCB9OworICAgIC8vIFF1ZXJpZWQgYXQgZGlzcGxh
eSBzdGFydHVwLgorICAgIEVHTGludCBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0IHsgLTEg
fTsKKyAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCisgICAgTGlz
dEhhc2hTZXQ8R0NHTGVudW0+IG1fc3ludGhldGljRXJyb3JzOworICAgIGJvb2wgbV9pc0Zvcldl
YkdMMiB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV9zdGF0dXNDaGVja0NvdW50IHsgMCB9Owor
ICAgIGJvb2wgbV9mYWlsTmV4dFN0YXR1c0NoZWNrIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdXNl
RmVuY2VTeW5jRm9yRGlzcGxheVJhdGVMaW1pdCA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG1heFBlbmRpbmdGcmFtZXMgPSAzOworICAgIHNpemVfdCBtX29sZGVzdEZyYW1l
Q29tcGxldGlvbkZlbmNlIHsgMCB9OworICAgIFNjb3BlZEdMRmVuY2UgbV9mcmFtZUNvbXBsZXRp
b25GZW5jZXNbbWF4UGVuZGluZ0ZyYW1lc107CisgICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBt
X3N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xBTkdMRT4gbV9leHRlbnNp
b25zOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZh
Y2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47CisgICAgRUdMRGlzcGxheSBtX2Rpc3BsYXlPYmogeyBu
dWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmogeyBu
dWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBtX2NvbmZpZ09i
aiB7IG51bGxwdHIgfTsKKyAgICAvLyBCYWNraW5nIHN0b3JlIGZvciB0aGUgdGhlIGJ1ZmZlciB3
aGljaCBpcyBldmVudHVhbGx5IHVzZWQgZm9yIGRpc3BsYXkuCisgICAgLy8gV2hlbiBwcmVzZXJ2
ZURyYXdpbmdCdWZmZXIgPT0gZmFsc2UsIHRoaXMgaXMgdGhlIGRyYXdpbmcgYnVmZmVyIGJhY2tp
bmcgc3RvcmUuCisgICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gdHJ1ZSwgdGhp
cyBpcyBibGl0dGVkIHRvIGR1cmluZyBkaXNwbGF5IHByZXBhcmUuCisgICAgc3RkOjp1bmlxdWVf
cHRyPElPU3VyZmFjZT4gbV9kaXNwbGF5QnVmZmVyQmFja2luZzsKKyAgICB2b2lkKiBtX2Rpc3Bs
YXlCdWZmZXJQYnVmZmVyIHsgbnVsbHB0ciB9OworI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIGJvb2wgbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbiB7IGZhbHNlIH07
CisgICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdCBtX2hpZ2hQZXJmb3JtYW5jZUdQ
VVJlcXVlc3Q7CisjZW5kaWYKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgR0NH
THVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybWVk
aWF0ZVRleHR1cmUgeyAwIH07CisjZW5kaWYKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Tmljb3NpYTo6R0NHTExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbGlmIFVTRShU
RVhUVVJFX01BUFBFUikKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyPiBtX3RleG1hcExheWVyOworI2VuZGlmCisKKyAgICBmcmllbmQgY2xhc3MgRXh0
ZW5zaW9uc0dMQU5HTEU7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgZnJpZW5kIGNsYXNzIE5pY29z
aWE6OkdDR0xMYXllcjsKKyNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBmcmllbmQgY2xh
c3MgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCit9OworCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAppbmRleCBjY2NiNTcyNGE0Y2Q5
MmZmMGJmOGU3MzgzYzVkOWZlNjg5ZDc3Yjg2Li40ZDU5Y2IxMmM1ZTQ0NzUzN2RlMGFlZTIxMGRl
MDAyY2JkNzlmZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcApAQCAtMTA2
LDcgKzEwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFj
dEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxC
dWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhj
b25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVz
LCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXpl
KCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFzU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENH
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dEdMQ0cuY3BwCmluZGV4IGY3OWYyMmUzMTNlYTExNzM4OWM1ZjQwOWRkMGY0OTRhZTE1YWViOTMu
LmFmNGMxN2Q1MWZhNTlmNDY4OGRmNDM5NjUzNTE4ZjVjYTBkYWFmMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dEdMQ0cuY3BwCkBAIC01MDYsNyArNTA2LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTEltYWdl
RXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRU
b0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRB
dHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRTaXplJiBjYW52
YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
OjpwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNl
Q29udGV4dEF0dHJpYnV0ZXMsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNp
emUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQo
IXBpeGVsQnVmZmVyLnNpemUoKS5pc0VtcHR5KCkpOwogICAgIGlmIChjYW52YXNTaXplLmlzRW1w
dHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaAppbmRleCAyNTU1ZmYwODMyOGUzNDY5
Y2Q3YTRhMjk3ZGJlZjc5MGY2MzA1Mjg4Li43ZWNmZGQxNmI4MTBlZDJkOGFmMjI5ZjU2YmI1ZTRh
ZGJjYjdkNzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCkBAIC0yNywxMiArMjcs
MTggQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgogI2luY2x1ZGUg
IklPU3VyZmFjZS5oIgogCisjaWYgRU5BQkxFKFZJREVPKQorbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6
IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBH
cmFwaGljc0NvbnRleHRHTENvY29hIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xDb2NvYT4gY3JlYXRl
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsKICAgICB+R3JhcGhpY3ND
b250ZXh0R0xDb2NvYSgpOwpAQCAtNDksMTQgKzU1LDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIGRl
dGFjaElPU3VyZmFjZUZyb21TaGFyZWRUZXh0dXJlKHZvaWQqIGhhbmRsZSk7CiAjZW5kaWYKIAot
ICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIG92ZXJyaWRlcy4KKyAgICAvLyBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFIG92ZXJyaWRlcy4KKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGJvb2wgY29weVRl
eHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5ZXImLCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29s
IGZsaXBZKSBmaW5hbDsKICNlbmRpZgorI2lmIEVOQUJMRShWSURFTykKKyAgICBHcmFwaGljc0Nv
bnRleHRHTENWKiBhc0NWKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBo
aWNzQ29udGV4dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYp
OwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3
MmM3N2VjYjIxOWUzOS4uZmFmMWRhOTdkN2M0ZDZhMDNmZmYxYjVkNWMzNmRlZGNlY2IzMGFhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5k
aWYKIAogI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxh
dGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJs
ZSgpID09IHRydWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJl
YWRlZCBtYW5uZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxz
ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1
dCBhbHdheXMgc2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIg
YW5kIG51bGxwdHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUqIGN1cnJlbnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGlj
dGFibGUoKQogewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxp
emVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAg
ICAgfQogCiAgICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNr
ZW5kLiIsIGF0dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRp
dmVEaXNwbGF5VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
ZmF1bHREaXNwbGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNl
TWV0YWwpIHsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9Q
TEFURk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0
YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAg
ICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0Vf
QU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9X
RVJfQU5HTEUpOwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpsb3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYg
KHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJl
ZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRl
cy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxh
eUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5h
dGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlz
cGxheTsKKyAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpoaWdoUGVyZm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFw
aGljc0NvbnRleHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xB
TkdMRShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVu
Y3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29h
IHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJz
KQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRy
cykKIHsKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVu
c2lvbik7CiAgICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0g
ICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRo
cm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkg
b24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3Rz
IGFyZSBub3Qgc2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVy
cywgc28KICAgICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0
bGluZy4gT3BlbkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21l
IHNvcnQgb2YgaW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAot
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIs
IHRoaXMpOworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
ICglcCkuIiwgdGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVu
dCgpKSB7CkBAIC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAh
PSB0aGlzKTsKICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9H
KFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlz
KTsKKyAgICBMT0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICgl
cCkuIiwgdGhpcyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgp
IGNvbnN0CkBAIC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6
OmlzVmFsaWQoKSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRm
b3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXND
aGVjaykgewogICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0
ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRT
dGF0dXMgPSAwOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0
VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIGlmICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUy
MCw3ICs1MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIGlmIChtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcg
KzUyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQoKQogICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5n
KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNr
aW5nKCkKIHsKICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0
eSgpKTsKICAgICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxs
b2NhdGluZyBhIG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVz
c3VyZS4KQEAgLTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAg
ICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBh
dXRvIGJhY2tpbmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoKQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShi
YWNraW5nKSwgcGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5n
LCB2b2lkKiBwYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCog
cGJ1ZmZlcikKIHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJp
bmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4
dHVyZVRhcmdldCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNU
QU5HTEVfQVJCKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtl
Q3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VS
RkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNo
bWVudFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwg
R0NHTHVpbnQgcGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewog
ICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19j
YXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2
NywyNCArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZh
Y2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1faXNGb3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNp
bXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsK
LSAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdl
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdl
cigpLmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJl
KSB7Ci0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JE
aXNwbGF5KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXko
KQogewogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0
LDE1ICs3MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRp
c3BsYXkoKQogCiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGlj
c0NvbnRleHRHTENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1f
Y3YuZ2V0KCk7CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHMoKQogewogICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVm
ZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIu
aGFuZGxlKQpAQCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxN
ZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvTWVkaWFTYW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFp
bi5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRp
c3BsYXlCdWZmZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZv
cm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3Jt
RwogfQogI2VuZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZp
ZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdP
Ymo7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxF
KFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRl
ICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSA8cGFsL3NwaS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi9TY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNp
bmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0
dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNp
emU7IgotICAgICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBp
bnQgdV9mbGlwWTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4o
KSIKLSAgICAieyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAx
LjApOyIKLSAgICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41
ICsgLjU7IgotICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFs
aXplZFBvc2l0aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2
X3lUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2
VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19Owot
Ci1zdGF0aWMgY29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
IHsKLSAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1
X3lUZXh0dXJlU2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29y
ZGluYXRlOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAg
InZvaWQgbWFpbigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9z
aXRpb24sIDAsIDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bv
c2l0aW9uICogLjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAg
ICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIK
LSAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95
VGV4dHVyZVNpemU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXpl
ZFBvc2l0aW9uICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHBy
IGF1dG8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVu
aWZvcm0gc2FtcGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JN
YXRyaXg7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2
YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0g
ICAgInsiCi0gICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1
X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0
ZXh0dXJlMkQodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIg
ICAgeXV2LmEgPSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1h
dHJpeDsiCi0gICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdt
ZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3Jt
IHNhbXBsZXIyRFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1h
dHJpeDsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZh
cnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAg
ICAieyIKLSAgICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVj
dCh1X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2Ig
PSB0ZXh0dXJlMkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIK
LSAgICAiICAgIHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVf
Y29sb3JNYXRyaXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2Ugewot
ICAgIFVua25vd24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJh
bnNmZXJGdW5jdGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBr
SVRVX1JfNjAxXzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQ
M19ENjUsCi0gICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJh
bmdlRnJvbVBpeGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBp
eGVsRm9ybWF0KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4Ogot
ICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhB
VkUoQ09SRVZJREVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlm
Ci0gICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
X0FSR0IyMTAxMDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBD
YkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZ
cENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0
NFlwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NF
RF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxS
YW5nZTo6RnVsbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5r
bm93bjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5j
dGlvbkZyb21TdHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQot
ICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAg
ICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENG
RXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkp
Ci0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0g
ICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1Az
KCkgJiYgQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkK
LSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2Fu
TG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVW
aWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0
cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0
dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVy
RnVuY3Rpb25DVjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAg
ICAgR0xmbG9hdCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxv
YXQgY2I7Ci0gICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07
Ci0KLSAgICBjb25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZs
b2F0IGIpCi0gICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkK
LSAgICAgICAgOiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAg
IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xm
bG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0K
LX07Ci0KLXN0cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBibGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRD
b2xvciB3aGl0ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xv
ciByZWQgICAgIHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBn
cmVlbiAgIHswLCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVl
ICAgIHswLCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAg
IHswLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsx
LCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAx
LCAwfTsKLX07Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0
XVs0XTsKLQotICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNi
Q29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25z
dCBHTGZsb2F0KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0g
ICAgfQotCi0gICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9h
dENvbG9yJikgY29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4
KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZm
aWNpZW50KQotICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlD
YkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiAr
IEtnICogRyArIEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0g
ICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFs
dWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlz
IGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0
aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6
Ci0gICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAq
ICgxIC0gS2IpKSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtn
KSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8g
V2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBb
MTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEg
cmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZh
bHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFu
Z2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2Vm
ZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0
IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5m
IC8gMjE5LmY7Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVs
UmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlT
Y2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNy
U2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10g
PSAwOwotCi0gICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0g
PSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZm
aWNpZW50IC8gY2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZm
aWNpZW50KTsKLSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGlu
Z0ZhY3RvcjsKLSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBj
YkNvZWZmaWNpZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsK
LQotICAgIHJvd3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11b
Ml0gPSAwOwotICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5h
bCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4
XQotICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0
byBbMTYsIDI0MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7
ICsrcm93TnVtYmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAg
ICAgICAgYXV0byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAg
ICAgYXV0byYgeiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAg
ICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJh
bmdlOjpWaWRlbykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQot
Y29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxv
YXRDb2xvciYgY29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAg
ICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsg
cm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVsw
XSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAq
IGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJn
Yi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5i
ICsgcm93c1syXVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRv
UkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRy
YW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9
IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1h
dHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20g
dGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAg
Ly8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0
YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4x
MTRmLCAwLjI5OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxs
TWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAx
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwg
MCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
eWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRy
aWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2
IDIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJU
LjcwOS0yLTE5OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5Vmlk
ZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25z
dGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVs
bCwgMC4wNzIyLCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwg
MjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAg
IDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQs
IDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRh
LCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFn
ZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBm
dWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTks
ICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAg
ICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIu
NzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRo
ZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8v
IGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAu
MDU5MywgMC4yNjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAx
MjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxh
Y2sgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIw
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVu
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMx
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2Vu
dGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwg
MCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0g
ICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01Q
VEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVl
Lm9yZy9kb2N1bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXgg
c21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07
Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQw
TVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNN
UFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0
MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVs
bG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNv
bG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRl
MjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwg
IDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJl
ZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJT
TVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAx
LCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpj
eWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsK
LSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8s
IFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAg
ICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJh
bnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAg
IG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1h
dHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVu
Y3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlv
bkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMu
Z2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNW
OjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQo
KS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjpr
U01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQot
ICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQg
d2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxS
YW5nZTo6VW5rbm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0g
ICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBt
YXRyaWNlcy5nZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8g
QXNzdW1lIHVua25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRl
cmF0b3IgPT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmlj
ZXMuZ2V0KCkuZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7
Ci0KLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJl
dHVybiBpdGVyYXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4
dCkgfTsKLSAgICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rl
c3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFOjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmIG93bmVyKQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0
aWJsZSBjb250ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBk
b2VzIG5vdAotICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5Lgot
ICAgIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09O
VEVYVF9DTElFTlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAy
LAotICAgICAgICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUs
Ci0gICAgICAgIEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19F
TkFCTEVEX0FOR0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJ
TkRfR0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAg
ICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0
Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25m
aWcoKTsKLSAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5
LCBjb25maWcsIG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlm
IChjb250ZXh0ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAg
YXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRl
eHQpOwotICAgIH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQp
IHsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9y
ZWN0YW5nbGUiKTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3Rl
eHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBH
TF9OT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdM
aW50IHZlcnRleFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0g
ICAgR0xpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUik7Ci0gICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAg
IGF1dG8gcHJvZ3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyLCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4
U2hhZGVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAg
ICAgIGdsOjpEZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNl
IGFyZSB3cml0dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQg
dnNMZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5n
dGgoKSA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBH
TGludCBmc0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
MkQubGVuZ3RoKCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgo
KTsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBz
X3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUy
RCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4
dHVyZVJlY3RhbmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAm
dmVydGV4U2hhZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJh
Z21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBn
bDo6Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNo
YWRlcik7Ci0gICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2w6OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlz
IGNoZWNrZWQgYWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24g
YmVuZWZpdC4KLQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5C
dWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVs
ZXRlQnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0
aWNlc1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsK
LSAgICBnbDo6QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0
aWNlcywgR0xfU1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAg
ICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1
ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGlu
dCBzdGF0dXMgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFt
LCBHTF9MSU5LX1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMp
IHsKLSAgICAgICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZS
b2J1c3RBTkdMRSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAm
dnNTdGF0dXMpOwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRT
aGFkZXJpdlJvYnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwg
bnVsbHB0ciwgJmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFKCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIs
IHRoaXMsIHN0YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjb250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xl
YW51cC5yZWxlYXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBt
X2Rpc3BsYXkgPSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25m
aWcgPSBjb25maWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0g
ICAgbV9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7
Ci0gICAgbV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9u
KHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4
Iik7Ci0gICAgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRp
b24oeXV2UHJvZ3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2Nh
dGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXpl
Iik7Ci0gICAgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1M
b2NhdGlvbih5dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlv
bkF0dHJpYnV0ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJh
X3Bvc2l0aW9uIik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdo
aWxlIHRoZSBwcm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0o
eXV2UHJvZ3JhbSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRp
b25BdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQ
b3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAg
IGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2Us
IFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQy
MGYnIHBpeGVsIGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3Jt
YXRzLgotICAgIE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1h
dFR5cGUoaW1hZ2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVf
NDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShD
T1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVs
Rm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9S
YW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZv
cm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJl
ZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFz
dXJmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVk
ID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0Rmxp
cFkKLSAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1
cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7
Ci0gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRo
ZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhp
cyBpcyBhIG5vLW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2Nv
bnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXks
IG1fY29udGV4dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9
IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4
ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmlu
aXRpYWxpemVkIGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAv
LyBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xf
VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUs
IG51bGxwdHIpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0g
ICAgfSk7Ci0gICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0g
ICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBn
bDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0
YXR1cyA9IGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBp
ZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1
cmUuIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0
ZXh0dXJlcyBmb3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9T
dXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0
ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxh
bmVXaWR0aCA9IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRv
IHV2UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwot
Ci0gICAgR0xlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5U
ZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtl
U2NvcGVFeGl0KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1
dlRleHR1cmUpOwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsK
LSAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3Jl
OjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZp
ZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1
dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEp
OwotICAgIGlmICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2
SGFuZGxlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFu
ZGxlXSB7Ci0gICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNl
KGRpc3BsYXksIHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7
Ci0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNs
ZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4
dHVyZXMoMSwgJnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9
IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2Nv
bmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwg
R0xfUkVELCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJm
YWNlLCAwKTsKLSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBh
dXRvIHlIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwg
eUhhbmRsZV0gewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNw
bGF5LCB5SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBw
YXJhbWV0ZXJzLgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwg
MCk7Ci0gICAgZ2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0g
ICAgZ2w6OlVuaWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlw
WTo6WWVzID8gMSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYo
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWln
aHQpOwotCi0gICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxG
b3JtYXQpOwotICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9t
U3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50
KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBj
b2xvck1hdHJpeCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24o
cmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29s
b3JNYXRyaXhVbmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAg
ICAvLyBEbyB0aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5H
TEVTLCAwLCA2KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1
cmZhY2VTZWVkID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91
dHB1dFRleHR1cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1f
bGFzdEZsaXBZID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
QU5HTEUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQz
MDFmMTI1MWI3MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5o
IgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0v
LyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9m
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBp
bnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5H
TEUgQ29jb2EuCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUo
Q1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBGbGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4
dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RU
ZXh0dXJlU2VlZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmIG1fb3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9k
aXNwbGF5IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9j
b25maWcgeyBudWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIg
eyAwIH07Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAg
ICBHQ0dMaW50IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQg
bV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlw
WVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2Nh
dGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7
IC0xIH07Ci0gICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9
OwotCi0gICAgRmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2lu
dGVyPElPU3VyZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJm
YWNlU2VlZCB7IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dM
dWludCwgdW5zaWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVy
ZVNlZWQ7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBo
aWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJ
T04pCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckND
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVy
ZTJEIHsKKyAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVj
MiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7Igor
ICAgICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVD
b29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZvaWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFf
cG9zaXRpb24sIDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBh
X3Bvc2l0aW9uICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAi
ICAgICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55
OyIKKyAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIK
KyAgICAiICAgIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisg
ICAgIn0iX3MKK307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRl
eHR1cmVSZWN0YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAi
dW5pZm9ybSB2ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIg
dl95VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29y
ZGluYXRlOyIKKyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlv
biA9IHZlYzQoYV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQ
b3NpdGlvbiA9IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09
IDEpIgorICAgICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXpl
ZFBvc2l0aW9uLnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVk
UG9zaXRpb24gKiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5h
dGUgPSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9
OworCitjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0
dXJlOyIKKyAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3Jt
IG1hdDQgdV9jb2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRp
bmF0ZTsiCisgICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2
b2lkIG1haW4oKSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5y
ID0gdGV4dHVyZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAi
ICAgIHl1di5nYiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRl
KS5yZzsiCisgICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5
dXYgKiB1X2NvbG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBh
dXRvIHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsi
CisgICAgInVuaWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0g
bWF0NCB1X2NvbG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGlu
YXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZv
aWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIg
PSB0ZXh0dXJlMkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAg
ICAiICAgIHl1di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29v
cmRpbmF0ZSkucmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0Nv
bG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3Mg
UGl4ZWxSYW5nZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKwor
ZW51bSBjbGFzcyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9S
XzcwOV8yLAorICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtE
Q0lfUDMsCisgICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhl
bFJhbmdlIHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQorewor
ICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
NDQ0QVlwQ2JDcjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoK
KyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAg
IGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisg
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFu
Z2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVv
UmFuZ2U6CisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMp
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVv
UmFuZ2U6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVW
SURFT19DT01QUkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25D
ViB0cmFuc2ZlckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAg
aWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247
CisgICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9S
XzcwOV8yKSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8y
OworICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVf
Ul82MDFfNCkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFf
NDsKKyAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01Q
VEVfMjQwTV8xOTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRF
XzI0ME1fMTk5NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9EQ0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1h
dHJpeF9EQ0lfUDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1Az
OworICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1Az
X0Q2NSgpICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2
NSkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYg
KGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgp
ICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAp
KQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENv
bG9yIHsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0
IHI7CisgICAgICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAg
ICAgIH0gcmdiOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAg
ICAgICAgICAgR0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0g
eWNiY3I7CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBH
TGZsb2F0IGcsIEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7Cisg
ICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBH
TGZsb2F0IHNjYWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8g
c2NhbGUgfQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJz
KEdMZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVl
IDogLXZhbHVlOworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVx
dWFsVG8oY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4
RGVsdGEpOworICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25z
dGV4cHIgR0xmbG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHTGZsb2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR0xmbG9hdENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JN
YXRyaXggeworICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1h
dHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmlj
aWVudCk7CisKKyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRD
b2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4
cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JD
b2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAg
ICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhl
IGZvcm06CisgICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0g
KEIgLSBZKSAvICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAt
IEtyKSkKKyAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBp
biBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0g
MQorICAgIC8vCisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBh
bmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3Ip
KSAqIENyCisgICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkg
LSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3Ig
LyBLZykgKiBDcgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRl
byByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwg
YW5kIENiICYgQ3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0
aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFu
ZCBDciBhbGwgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9m
IDI1Ni4KKworICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0g
Y3JDb2VmZmljaWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4
ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2Nh
bGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIy
NC5mOworCisgICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0g
PSAwOworICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29l
ZmZpY2llbnQpOworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2Fs
aW5nRmFjdG9yOworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEg
LSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAg
cm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
ICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsK
KworICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2Jj
clNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJd
ID0gMDsKKyAgICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJv
d3NbM11bMV0gPSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOwor
CisgICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252
ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2Yg
dmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJv
d051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8m
IHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAg
ICAgYXV0byYgeSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAg
YXV0byYgdyA9IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Cisg
ICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0g
eCAqIDE2IC8gMjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1h
dHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEdMZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsg
cm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93
c1swXVszXSwKKyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAq
IGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAg
ICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5n
ICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0
YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1
bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0
aW9uKQoreworICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0
IFlDYkNyTWF0cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBt
YXRyaWNlczsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8v
IE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYw
MSByZXYgNCBzcGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1S
RUMtQlQuNjAxCisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRy
aXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIg
c3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4x
MTRmLCAwLjI5OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1
LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
ci42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUw
LCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fz
c2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1
LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAx
NzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFu
LCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21w
b25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBz
Oi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywg
MC4wNzIyLCAwLjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEu
NWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChy
NzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDEx
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAx
LjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisK
KyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNr
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJs
YWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41
ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIz
NywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBH
TGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBN
YXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4y
MDIwLTIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVD
LUJULjIwMjAKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0
cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwg
MC4wNTkzLCAwLjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4
ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQs
ICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpy
ZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAx
NiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxs
b3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsK
KworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwg
ICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAx
MSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAv
IDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgY3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJv
bSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAg
ICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNv
bnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJh
bmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1h
dHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEy
IH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYy
LCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAx
MTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Ymx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICog
R0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRh
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
Ojp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3Jl
ZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21w
dGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3
NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUg
MjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRp
c3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFj
ZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYw
MV80KSwgcjYwMVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShN
YXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQp
LCByNjAxRnVsbE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5
KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3
MDlWaWRlb01hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBp
eGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1
bGxNYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVv
TWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5n
ZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRy
aXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpW
aWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlk
ZW9NYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0
ME1GdWxsTWF0cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tl
ZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4K
KyAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdl
ID09IFBpeGVsUmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVs
bDsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5j
dGlvbnMgYXJlIHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQo
KSkKKyAgICAgICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1hdHJpY2VzLmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBH
cmFwaGljc0NvbnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRl
eHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBp
ZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9k
aXNwbGF5LCBtX2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJm1feXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZtX2ZyYW1lYnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2Nv
bnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYShHcmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3du
ZXIpCit7CisgICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0
ZSB3aXRoIG93bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5l
c3Mgb3IgV2ViR0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAg
IG93bmVyLm1faXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdM
X0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAg
IEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZB
TFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlV
TSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdM
RGlzcGxheSBkaXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmln
IGNvbmZpZyA9IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0
ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmos
IGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50
KGRpc3BsYXksIGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6bWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVz
dHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29s
IHVzZVRleHR1cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBH
TF9URVhUVVJFXzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlT
VCkKKyAgICBpZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVz
dEV4dGVuc2lvbkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAg
ICAgaWYgKGdsOjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNo
YWRlcihHTF9WRVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpD
cmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9
IGdsOjpDcmVhdGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAg
ICAgZ2w6OkRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgfSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJl
IGNvbXBpbGUtdGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
VmVydGV4U2hhZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8g
c195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRl
clNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195
dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUy
RCA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRl
clNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7
CisgICAgZ2w6OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVy
U291cmNlLCAmZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7
CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hT
aGFkZXIoeXV2UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1
dlByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgLy8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0
aWNhbCBwYXJhbGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRl
eEJ1ZmZlciA9IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7Cisg
ICAgYXV0byB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4
QnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIp
OworICAgIH0pOworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwg
MSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgeXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZG
RVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBH
THVpbnQgZnJhbWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1l
YnVmZmVyKTsKKyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Zy
YW1lYnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVm
ZmVyKTsKKyAgICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dy
YW1pdlJvYnVzdEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAm
c3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7
CisgICAgICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09N
UElMRV9TVEFUVVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3Rh
dHVzID0gMDsKKyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFk
ZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFp
bGVkIHRvIGxpbms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0
dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2Uo
KTsKKyAgICB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZl
ckNsZWFudXAucmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250
ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1
ZmZlciA9IHl1dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7
CisgICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7Cisg
ICAgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0
aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAg
IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVy
ZVNpemUiKTsKKyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0
cmliTG9jYXRpb24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlz
IGRlbGV0ZWQgYnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGlu
IHVzZS4KKyAgICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6
VmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdM
X0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1
cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJl
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgRmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9u
bHkgc3VwcG9ydHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUg
c3VwcG9ydGluZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0g
Q1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9y
bWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8v
IE5PTElOVAorICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9Q
SVhFTF9GT1JNQVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhl
bEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxS
YW5nZQorI2VuZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBB
c2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywg
Rm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1
ZmZlckdldElPU3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChz
dXJmYWNlKTsKKyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFj
ZSA9PSBtX2xhc3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1
cmZhY2VTZWVkCisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBt
X293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0
ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVk
IHRvIGl0LCBhbmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNp
bmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRo
KGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFn
ZSk7CisKKyAgICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBU
aGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBl
YXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVy
cm9yIGlzIG5vdCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFr
ZVNjb3BlRXhpdChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQs
IHR5cGVdIHsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRl
eHR1cmUpOworICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGds
OjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0
ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUy
RChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91
dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRv
IGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCk7CisKKyAgICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8g
c291cmNlLgorICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUo
c3VyZmFjZSwgMCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRP
ZlBsYW5lKHN1cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3Vy
ZmFjZUdldEhlaWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0
dXJlVGFyZ2V0ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAg
R0x1aW50IHV2VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OworICAgIGF1dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0g
eworICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7Cisg
ICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2
aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRh
Y2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xf
SU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhl
aWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNj
b3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29y
ZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOwor
ICAgIH0pOworCisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMo
MSwgJnlUZXh0dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQo
W3lUZXh0dXJlXSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOwor
ICAgIH0pOworICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6Qmlu
ZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZl
ckFuZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJn
ZXQsIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5
UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhh
bmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRl
c3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0p
OworCisgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVu
aWZvcm0xaShtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFp
KG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2
RmxpcFlVbmlmb3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAg
Z2w6OlVuaWZvcm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgs
IHlQbGFuZUhlaWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdl
ID0gcGl4ZWxSYW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFu
c2ZlckZ1bmN0aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0
PENGU3RyaW5nUmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JH
Qk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlv
bik7CisgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biwgMSwgR0xfRkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJh
d2luZy4KKyAgICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9s
YXN0U3VyZmFjZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNl
U2VlZDsKKyAgICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50
ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAg
ICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0
ZTM5NjBiNmQ3MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx3dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHcmFwaGljc0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxl
bWVudGF0aW9uIGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBw
YXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENv
Y29hLgorY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZD
b2NvYSgpIGZpbmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBGbGlwWSkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
KEdyYXBoaWNzQ29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2Vl
ZChHQ0dMdWludCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVT
ZWVkLmdldCh0ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBt
X293bmVyOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7
IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51
bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsg
bnVsbHB0ciB9OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9Owor
ICAgIFBsYXRmb3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGlu
dCBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3Jt
TG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biB7IC0xIH07CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAt
MSB9OworICAgIEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9Owor
ICAgIEdDR0xpbnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAg
IEZsaXBZIG1fbGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1
cmZhY2VSZWY+IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQg
eyAwIH07CisKKyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVu
c2lnbmVkLCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOwor
fTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCmlu
ZGV4IGI4MzJhMTg2YTQyYzhiZTMyMmE0YzcwODFmNzVkY2Q0OTBjMjdmODguLjNmZDc0YmUyMDlh
MTNjNTAxNmVmNTU3ZTIxYWI3YzU5ZmQ0OGNhZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwyMiArMjMsMjg2
MyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBF
TkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIK
KyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKLSNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0
dGluZy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgorI2luY2x1ZGUgPGNzdHJpbmc+
CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFy
cmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZiBVU0UoT1BF
TkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1
ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNpZiBVU0UoTElCRVBPWFkpCisj
aW5jbHVkZSAiRXBveHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJP
cGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKKyNp
bmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
c3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlcigpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwor
ICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWROYW1lSGFz
aDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBzaGFyZWROYW1l
SGFzaCA9IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OworICAgIH0pOworCisg
ICAgcmV0dXJuICpzaGFyZWROYW1lSGFzaDsKK30KKworc3RhdGljIHZvaWQgc2V0Q3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkKK3sKKyAg
ICAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFzaDsKK30K
KworLy8gSGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2NvbXBpbGVy
IHRvIGRvCisvLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBt
ZXRob2QsIGJlZm9yZQorLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXIKKy8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0aGUgY3Vy
cmVudCBpbnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KKworc3RhdGljIHVpbnQ2
NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmluZyBuYW1l
QXNDU3RyaW5nID0gQ1N0cmluZyhuYW1lKTsKKworICAgIC8vIExvb2sgdXAgbmFtZSBpbiBvdXIg
bG9jYWwgbWFwLgorICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyID0gKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOworICAgIFNoYWRlck5hbWVI
YXNoOjppdGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5m
aW5kKG5hbWVBc0NTdHJpbmcpOworICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlci0+ZW5kKCkpCisgICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZTsK
KworICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOworCisgICAg
Ly8gQ29udmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8gYSA2NC1i
aXQgcmVzdWx0CisgICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUgb2Ygb3Vy
IHRhYmxlLiBPdmVyZmxvdyB3b3VsZAorICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlmIHdlJ3Jl
IGFscmVhZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCisgICAgLy8gd2UncmUgaG9w
aW5nIHRoYXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKKyAgICAvLyBkb24n
dCBoYXZlIHRoYXQgbWFueSBzeW1ib2xzKS4KKworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGhhc2hW
YWx1ZTsKKyAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXItPnNpemUoKSArIDEpOworCisgICAgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVy
LT5zZXQobmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBj
aGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCit7CisgICAgYXV0byBhdHRycyA9IGNv
bnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIGV4dGVu
c2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAg
ICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkg
eworICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNp
bEV4dGVuc2lvbik7CisgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRy
dWUuCisgICAgICAgICAgICBhdHRycy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZhbHNlOworICAgICAgICBzZXRDb250ZXh0QXR0cmli
dXRlcyhhdHRycyk7CisgICAgfQorICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1faXNGb3JX
ZWJHTDIpIHsKKyAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7CisgICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBm
YWxzZTsKKyAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCit7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKworI2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgVGVt
cG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFM
U0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwg
R0xfRkFMU0UpOworI2VuZGlmCisKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxp
YXMpCisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2NvbXBv
c2l0b3JUZXh0dXJlKTsKKyAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVkaWF0ZVRl
eHR1cmUpOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsK
KyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAg
Z2xGbHVzaCgpOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKKyAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgZWxzZQorICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
IHJldHVybjsKKyNlbmRpZgorCisgICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwor
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3N0YXRlLmJvdW5kVGFyZ2V0KEdM
X1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUoR0xfVEVY
VFVSRTApIDogMCk7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJl
VW5pdCk7CisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmRE
cmF3RkJPKTsKKyAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBt
X3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgOjpnbEZsdXNoKCk7Cit9CisKK3N0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVz
dWx0cygpCit7CisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChjb250
ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGlu
Z0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0g
dHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8g
PT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdG
Qk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX2Zibyk7CisgICAgICAgIH0KKyAgICB9CisgICAgYXV0byByZXN1bHQgPSByZWFkUGl4
ZWxzRm9yUGFpbnRSZXN1bHRzKCk7CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9z
dGF0ZS5ib3VuZERyYXdGQk8pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAg
IGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0g
MCk7CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKKworICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CisgICAg
bV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OworCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisK
KyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNU
LCBHTF9GQUxTRSk7CisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xf
RElUSEVSLCBHTF9GQUxTRSk7CisgICAgCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHJlc2hh
cGVGQk9zKEludFNpemUod2lkdGgsIGhlaWdodCkpOworCisgICAgLy8gSW5pdGlhbGl6ZSByZW5k
ZXJidWZmZXJzIHRvIDAuCisgICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7IDAsIDAsIDAsIDAg
fSwgY2xlYXJEZXB0aCA9IDA7CisgICAgR0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKKyAgICBHTGJv
b2xlYW4gY29sb3JNYXNrW10gPSB7IEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUg
fSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZm
ZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZmOworICAgIEdMYml0ZmllbGQgY2xlYXJN
YXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NM
RUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsK
KyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAg
IDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CisKKyAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRycy5kZXB0
aCkgeworICAgICAgICA6OmdsR2V0RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJE
ZXB0aCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKDEpOwor
ICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsK
KyAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdM
X0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2ls
KTsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2
KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxN
YXNrKSk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNL
LCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrQmFjaykpOworICAgICAgICA6
OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZmZmZmZik7CisgICAgICAgIDo6
Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIDB4ZmZmZmZmZmYpOworICAgICAgICBjbGVh
ck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0KKworICAgIDo6Z2xDbGVhcihj
bGVhck1hc2spOworCisgICAgOjpnbENsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xv
clsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CisgICAgOjpnbENvbG9yTWFzayhj
b2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOwor
ICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0aE1hc2sp
OworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsQ2xlYXJTdGVu
Y2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZS
T05ULCBzdGVuY2lsTWFzayk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JB
Q0ssIHN0ZW5jaWxNYXNrQmFjayk7CisgICAgfQorCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworCisgICAgYXV0byBlcnJvciA9IDo6Z2xHZXRF
cnJvcigpOworICAgIGlmIChlcnJvciAhPSBHTF9OT19FUlJPUikgeworICAgICAgICBSRUxFQVNF
X0xPRyhXZWJHTCwgIkZhdGFsOiBPcGVuR0wgZXJyb3IgZHVyaW5nIEdyYXBoaWNzQ29udGV4dEdM
IGJ1ZmZlciBpbml0aWFsaXphdGlvbiAoJWQpLiIsIGVycm9yKTsKKyAgICAgICAgZm9yY2VDb250
ZXh0TG9zdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgOjpnbEZsdXNoKCk7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBs
YXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hh
ZGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0
ZXhTaGFkZXIpKTsKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21l
bnRTaGFkZXIpKTsKKyAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7CisgICAgY29uc3QgYXV0byYgZnJhZ21lbnRF
bnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6U2hhZGVyVmFyaWFibGU+IGNvbWJpbmVkVmFyeWluZ3M7
CisgICAgZm9yIChjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgOiB2ZXJ0ZXhFbnRyeS52YXJ5aW5n
TWFwKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3ltYm9sTmFtZSA9IHZlcnRleFN5bWJvbC5r
ZXk7CisgICAgICAgIC8vIFRoZSB2YXJ5aW5nIG1hcCBpbmNsdWRlcyB2YXJpYWJsZXMgZm9yIGVh
Y2ggaW5kZXggb2YgYW4gYXJyYXkgdmFyaWFibGUuCisgICAgICAgIC8vIFdlIG9ubHkgd2FudCBh
IHNpbmdsZSB2YXJpYWJsZSB0byByZXByZXNlbnQgdGhlIGFycmF5LgorICAgICAgICBpZiAoc3lt
Ym9sTmFtZS5lbmRzV2l0aCgiXSIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Ly8gRG9uJ3QgY291bnQgYnVpbHQgaW4gdmFyeWluZ3MuCisgICAgICAgIGlmIChzeW1ib2xOYW1l
ID09ICJnbF9GcmFnQ29vcmQiIHx8IHN5bWJvbE5hbWUgPT0gImdsX0Zyb250RmFjaW5nIiB8fCBz
eW1ib2xOYW1lID09ICJnbF9Qb2ludENvb3JkIikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50U3ltYm9sID0gZnJhZ21lbnRFbnRyeS52YXJ5aW5n
TWFwLmZpbmQoc3ltYm9sTmFtZSk7CisgICAgICAgIGlmIChmcmFnbWVudFN5bWJvbCAhPSBmcmFn
bWVudEVudHJ5LnZhcnlpbmdNYXAuZW5kKCkpCisgICAgICAgICAgICBjb21iaW5lZFZhcnlpbmdz
LmFkZChzeW1ib2xOYW1lLCBmcmFnbWVudFN5bWJvbC0+dmFsdWUpOworICAgIH0KKworICAgIHNp
emVfdCBudW1WYXJ5aW5ncyA9IGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpOworICAgIGlmICghbnVt
VmFyeWluZ3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3RkOjp2ZWN0b3I8c2g6OlNo
YWRlclZhcmlhYmxlPiB2YXJpYWJsZXM7CisgICAgdmFyaWFibGVzLnJlc2VydmUoY29tYmluZWRW
YXJ5aW5ncy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgdmFyeWluZ1N5bWJvbCA6IGNv
bWJpbmVkVmFyeWluZ3MudmFsdWVzKCkpCisgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFy
eWluZ1N5bWJvbCk7CisKKyAgICBHQ0dMaW50IG1heFZhcnlpbmdWZWN0b3JzID0gMDsKKyNpZiBV
U0UoT1BFTkdMX0VTKQorICAgIDo6Z2xHZXRJbnRlZ2VydihNQVhfVkFSWUlOR19WRUNUT1JTLCAm
bWF4VmFyeWluZ1ZlY3RvcnMpOworI2Vsc2UKKyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAgICAg
ICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVj
dG9ycyk7CisgICAgZWxzZSB7CisgICAgICAgIEdDR0xpbnQgbWF4VmFyeWluZ0Zsb2F0cyA9IDA7
CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsICZtYXhWYXJ5
aW5nRmxvYXRzKTsKKyAgICAgICAgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtYXhWYXJ5aW5nRmxvYXRz
IC8gNDsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gc2g6OkNoZWNrVmFyaWFibGVzV2l0aGlu
UGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5nVmVjdG9ycywgdmFyaWFibGVzKTsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3Qg
dmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAorewor
ICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAg
ICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAg
ICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4
U2hhZGVyKS0+dmFsdWU7CisgICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3Ry
aW5nLCBzaDo6R0xlbnVtPiB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXA7CisKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGVudHJ5IDogdmVydGV4RW50cnkudW5pZm9ybU1hcCkgeworICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7
CisgICAgICAgIHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5hZGQoU3RyaW5nKG1hcHBlZE5hbWUu
Y19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSksIGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lv
bik7CisgICAgfQorCisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGZyYWdtZW50RW50cnku
dW5pZm9ybU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVu
dHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7CisgICAgICAgIGNvbnN0IGF1dG8mIHZlcnRleFN5
bWJvbCA9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5maW5kKFN0cmluZyhtYXBwZWROYW1lLmNf
c3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpKTsKKyAgICAgICAgaWYgKHZlcnRleFN5bWJvbCAh
PSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZW5kKCkgJiYgdmVydGV4U3ltYm9sLT52YWx1ZSAh
PSBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlLmFjdGl2ZVRl
eHR1cmVVbml0ID0gdGV4dHVyZTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHBy
b2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFw
LnJlbW92ZShwcm9ncmFtKTsKKyAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3lt
Ym9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAg
ICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIDo6Z2xC
aW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEo
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmluZEJ1ZmZlcih0YXJn
ZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFt
ZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdMdWlu
dCBmYm87CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UK
KyAgICAgICAgZmJvID0gKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNh
bXBsZUZCTyA6IG1fZmJvKTsKKyAgICBBU1NFUlQodGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKTsK
KyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8p
OworICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pIHsKKyAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3
RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBmYm87CisgICAgfQorfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxh
dGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFy
Z2V0LCByZW5kZXJidWZmZXIpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1
cmUsIHRhcmdldCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQs
IEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxl
bmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymxl
bmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3Is
IEdDR0xlbnVtIGRmYWN0b3IpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30g
ICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRl
KEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NH
TGVudW0gZHN0QWxwaGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBz
cmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
dWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVz
YWdlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NH
TFNwYW48Y29uc3Qgdm9pZD4gZGF0YSwgR0NHTGVudW0gdXNhZ2UpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJ1ZmZlckRhdGEo
dGFyZ2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJT
dWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7Cit9CisKK0dD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdD
R0xlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisKKyAgICByZXR1cm4gOjpnbENoZWNrRnJh
bWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBi
LCBHQ0dMY2xhbXBmIGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xD
bGVhcihtYXNrKTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NHTGludCBzKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhclN0ZW5jaWwo
cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9v
bGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVh
biBhbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGlu
Zy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQorICAgIC8vIHBv
aW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRleHQuCisg
ICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gbV9jb21waWxlci5nZXRSZXNv
dXJjZXMoKTsKKyAgICBTaEhhc2hGdW5jdGlvbjY0IHByZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5H
TEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOworICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlv
biA9IG5hbWVIYXNoRm9yU2hhZGVyOworCisgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMp
CisgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhh
c2g+KCk7CisgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9y
U2hhZGVycy5nZXQoKSk7CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJj
ZXMpOworCisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMt
PmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOworCisgICAgQU5HTEVSZXNv
dXJjZXMuSGFzaEZ1bmN0aW9uID0gcHJldmlvdXNIYXNoRnVuY3Rpb247CisgICAgbV9jb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1h
cEZvclNoYWRlcihudWxscHRyKTsKKworICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5s
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRl
ZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKKyAgICBjb25z
dCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0
YSgpOworICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlckNT
dHJpbmcubGVuZ3RoKCk7CisKKyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gb3JpZ2luYWwgc2hh
ZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4i
LCBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coV2ViR0ws
ICItLS0gYmVnaW4gdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJh
bnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLSIsIHRyYW5zbGF0ZWRTaGFkZXJQdHIpOworCisgICAg
OjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNs
YXRlZFNoYWRlckxlbmd0aCk7CisgICAgCisgICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsK
KyAgICAKKyAgICBpbnQgY29tcGlsZVN0YXR1czsKKyAgICAKKyAgICA6OmdsR2V0U2hhZGVyaXYo
c2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgU2hhZGVyU291
cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
CisgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKworICAgIC8v
IFBvcHVsYXRlIHRoZSBzaGFkZXIgbG9nCisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICA6Omds
R2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworCisgICAg
aWYgKGxlbmd0aCkgeworICAgICAgICBHTHNpemVpIHNpemUgPSAwOworICAgICAgICBWZWN0b3I8
R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRl
ciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOworCisgICAgICAgIFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07CisgICAgICAgIGVudHJ5LmxvZyA9IGdldFVu
bWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Cisg
ICAgfQorCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgIT0gR0xfVFJVRSkgeworICAgICAgICBlbnRy
eS5pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBzaGFkZXIgdHJh
bnNsYXRvciBwcm9kdWNlZCBhIHNoYWRlciB0aGF0IE9wZW5HTCB3b3VsZCBub3QgY29tcGlsZS4i
KTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFk
ZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SGFzaE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQg
PT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRl
clNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICBjb25zdCBDU3RyaW5n
JiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50cnkuc291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBj
aGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKKyAgICBp
bnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsKKwor
ICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4t
LS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsKKwor
ICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVy
U291cmNlTGVuZ3RoKTsKKworICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgICBp
bnQgY29tcGlsZVN0YXR1czsKKworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVf
U1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7CisKKyAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9U
UlVFKSB7CisgICAgICAgIGVudHJ5LmlzVmFsaWQgPSB0cnVlOworICAgICAgICBMT0coV2ViR0ws
ICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIExPRyhXZWJHTCwgIkVy
cm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsKKyAgICB9Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9y
ZGVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgQVNTRVJUKG1f
c3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0
cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
IHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgQVNTRVJUKG1fc3RhdGUu
Ym91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0cnMuYW50
aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAg
ICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRo
LCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9t
dWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0Nv
bnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDdWxsRmFj
ZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdD
R0xlbnVtIGZ1bmMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbERlcHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFuIGZsYWcpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERlcHRoTWFz
ayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVy
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7Cisg
ICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5
bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dy
YW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUo
R0NHTGVudW0gY2FwKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xEaXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAg
ICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBl
LCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBl
LCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQp
KSk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50
IGluZGV4KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZpbmlzaCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmbHVzaCgpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZsdXNoKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVy
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250
RmFjZShHQ0dMZW51bSBtb2RlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKKyAgICA6OmdsR2V0
UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0
dHJpYnV0ZVNpemUpOworICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7
IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0
aW9uLgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7Cisg
ICAgR0xlbnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5k
ZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0
YSgpKTsKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNI
QURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0
aCkpOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5k
YXRhKCksIG5hbWVMZW5ndGgpOworICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGlu
ZyBhY3RpdmUgYXR0cmlidXRlICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgs
IHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsK
KyNlbmRpZgorCisgICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9
IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0NH
TGludCBzeW1ib2xDb3VudDsKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dy
YW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3lt
Ym9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9BVFRSSUJVVEVTLCAm
c3ltYm9sQ291bnQpOworICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5maW5kKHByb2dyYW0pOworICAgIH0KKyAgICAKKyAgICBBY3RpdmVTaGFkZXJTeW1ib2xD
b3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+dmFsdWU7CisgICAgR0NHTHVpbnQgcmF3SW5k
ZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4
TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4
TWFwW2luZGV4XSA6IC0xOworCisgICAgcmV0dXJuIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3Jh
bSwgcmF3SW5kZXgsIGluZm8pOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3Jh
bWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6
ZSk7CisKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heFVuaWZvcm1TaXplKTsgLy8gR0xfQUNU
SVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgorICAgIEdM
c2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5
cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBtYXhVbmlm
b3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOworICAgIGlm
ICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFN0cmluZyBv
cmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9U
WVBFX1VOSUZPUk0sIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOworICAgIAorI2lm
bmRlZiBOREVCVUcKKyAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5n
dGgpOworICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgdW5pZm9y
bSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4
KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAKKyAg
ICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBp
bmZvLnNpemUgPSBzaXplOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
R0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0NHTGludCBzeW1ib2xD
b3VudDsKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZp
bmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5lbmQoKSkgeworICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJv
Z3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9VTklGT1JNUywgJnN5bWJvbENvdW50KTsK
KyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9n
cmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xD
b3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDR0x1aW50IHJhd0luZGV4ID0gKGluZGV4IDwg
c3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgpKSA/IHN5
bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwW2luZGV4XSA6IC0xOwor
ICAgIAorICAgIHJldHVybiBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCByYXdJbmRleCwg
aW5mbyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNp
emVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVjdCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dy
YW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwg
Y291bnQsIHNoYWRlcnMpOworfQorCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlSGFzaGVkTmFtZShj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbmFtZTsKKyAgICB1aW50NjRfdCBudW1iZXIgPSBuYW1lSGFzaEZvclNoYWRlcihuYW1l
LnV0ZjgoKS5kYXRhKCksIG5hbWUubGVuZ3RoKCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJ3
ZWJnbF8iLCBoZXgobnVtYmVyLCBMb3dlcmNhc2UpKTsKK30KKworc3RkOjpvcHRpb25hbDxTdHJp
bmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5
cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYg
c3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgYXV0
byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1hcC5maW5kKG5hbWUpOworICAgIGlmIChzeW1ib2xFbnRy
eSA9PSBzeW1ib2xNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBhdXRvJiBtYXBwZWROYW1lID0gc3ltYm9sRW50cnktPnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7
CisgICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3Ro
KCkpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9s
VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDR0xzaXplaSBjb3VudCA9IDA7Cisg
ICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyB9OworICAgIGdldEF0dGFjaGVkU2hh
ZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworCisgICAgZm9yIChHQ0dMc2l6ZWkg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBl
ZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOwor
ICAgICAgICBpZiAobWFwcGVkTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZh
bHVlKCk7CisgICAgfQorCisgICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVk
IHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCisgICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNo
YWRlck1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJN
YXAuZW5kKCkpIHsKKyAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsK
KyAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAo
bGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBw
ZWROYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICAgICAg
bWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMu
c2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAg
ICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIGlmIChzeW1i
b2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgp
KSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBi
ZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAgICAg
ICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBw
cm9ncmFtLgorICAgICAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKKyAgICAgICAgICAg
IG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Cisg
ICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRl
cnMuZ2V0KCkpOworCisgICAgICAgIGF1dG8gZ2VuZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVk
TmFtZShuYW1lKTsKKworICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVs
bHB0cik7CisKKyAgICAgICAgbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJh
dGVkTmFtZSwgbmFtZSk7CisKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE5hbWU7CisgICAgfQor
CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0g
cmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgZm9yIChjb25zdCBhdXRv
JiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgeworICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xF
bnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCisgICAgICAgICAgICByZXR1cm4g
c3ltYm9sRW50cnkua2V5OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitT
dHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgR0NHTHNpemVpIGNvdW50OworICAgIFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyc1syXTsKKyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNv
dW50LCBzaGFkZXJzKTsKKyAgICAKKyAgICBmb3IgKEdDR0xzaXplaSBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hh
ZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAo
b3JpZ2luYWxOYW1lKQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwor
ICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hh
ZGVycyBhZnRlciBsaW5raW5nLgorICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAu
ZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgp
KSB7CisgICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7CisgICAgICAg
IGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5r
ZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFs
TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICAgICAg
b3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFk
ZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUp
CisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAg
aWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRo
ZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVk
LAorICAgICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkg
c2hhZGVyIHByb2dyYW0uCisKKyAgICAgICAgY29uc3QgYXV0byYgY2FjaGVkID0gbV9wb3NzaWJs
eVVudXNlZEF0dHJpYnV0ZU1hcC5maW5kKG5hbWUpOworICAgICAgICBpZiAoY2FjaGVkICE9IG1f
cG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gY2Fj
aGVkLT52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFtZTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3Qgc2hh
ZGVyc1syXSwgc2l6ZV90IGNvdW50LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgZm9yIChz
aXplX3Qgc3ltYm9sVHlwZSA9IDA7IHN5bWJvbFR5cGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihT
SEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORyk7ICsrc3ltYm9sVHlwZSkgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIFNoYWRlclNvdXJj
ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ld
KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0
IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3Rh
dGljX2Nhc3Q8ZW51bSBBTkdMRVNoYWRlclN5bWJvbFR5cGU+KHN5bWJvbFR5cGUpKTsKKyAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAg
ICAgICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
LmNfc3RyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS5rZXk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK2lu
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQor
ICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gLTE7CisKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9s
TmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAgICBM
T0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5h
bWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4g
OjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7
Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJl
Y3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
aWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKworICAgIHJldHVybiA6OmdsR2V0QXR0
cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOworCisgICAgLy8gU2V0IGFuIGFyYml0cmFy
eSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKKyAgICAvLyBh
IHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBuZXZlciBjbGVhciB0
aGUgZXJyb3IuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwgd2Ug
Z290IE5PX0VSUk9SLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewor
ICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9y
ID09IE5PX0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG1fc3ludGhldGljRXJy
b3JzLmFkZChlcnJvcik7CisgICAgICAgIG1vdmVkQW5FcnJvciA9IHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKK30KKworR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEVycm9yKCkKK3sKKyAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBz
eW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCisgICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxy
ZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJvdGgKKyAgICAgICAg
Ly8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBj
b2RlIG9uY2UuCisgICAgICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAg
ICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7CisgICAgfQorCisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BF
UkFUSU9OOworCisgICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJl
dHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhu
YW1lKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOworfQorCitH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKKworICAgIHJldHVybiA6OmdsSXNCdWZmZXIoYnVmZmVyKTsKK30KKworR0NHTGJvb2xl
YW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwor
CisgICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2FwKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1
ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOworfQor
CitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0pOworfQorCitH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZv
cm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJF
WFQocmVuZGVyYnVmZmVyKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIGlmICghc2hhZGVy
KQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzU2hhZGVy
KHNoYWRlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Rl
eHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4
dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dM
ZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbExpbmVXaWR0aCh3aWR0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sK
KyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisKKyAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOworICAgIFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3Jh
bSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIGlmIChjb3VudCA9PSAyKQorICAgICAgICBt
X2xpbmtlZFNoYWRlck1hcC5zZXQocHJvZ3JhbSwgc3RkOjptYWtlX3BhaXIoc2hhZGVyc1swXSwg
c2hhZGVyc1sxXSkpOworCisgICAgOjpnbExpbmtQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NH
TGludCBwYXJhbSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBH
Q0dMZmxvYXQgdW5pdHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYg
dmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGlu
dmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJp
bmcmIHN0cmluZykKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworCisgICAgU2hhZGVyU291cmNlRW50cnkg
ZW50cnk7CisKKyAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7CisKKyAgICBtX3NoYWRlclNvdXJj
ZU1hcC5zZXQoc2hhZGVyLCBXVEZNb3ZlKGVudHJ5KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dM
dWludCBtYXNrKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZh
Y2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVu
Y2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5j
aWxNYXNrKG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
TWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1hc2spCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxN
YXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBh
c3MpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dM
ZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxP
cFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGZsb2F0IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUs
IHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVy
aShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0PiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwg
YXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5p
Zm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9y
bTJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNmKGxv
Y2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFy
cmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZnYo
bG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5p
Zm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwg
YXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYx
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGludD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBh
cnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2l2
KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50
IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYzKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGko
bG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50
PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3Jt
NGl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5
KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXgy
ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgOSkpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlm
b3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gOSwgdHJhbnNwb3NlLCBhcnJh
eS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJp
eDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDE2
KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAxNiwgdHJh
bnNwb3NlLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVzZVByb2dyYW0ocHJv
Z3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQsIDE+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dM
dWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJp
YjJmKGluZGV4LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwg
Mj4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0
ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0LCAzPiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5k
YXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIs
IEdDR0xmbG9hdCB2MykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYz
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdD
R0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBz
dHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4
LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVZlcnRleEFycmF5KCkKK3sKKyAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmNyZWF0ZVZlcnRl
eEFycmF5T0VTKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZl
cnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygp
LmRlbGV0ZVZlcnRleEFycmF5T0VTKGFycmF5KTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKK3sK
KyAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmlzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1H
TE9iamVjdCBhcnJheSkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuYmluZFZlcnRleEFycmF5T0VT
KGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYo
R0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0Qm9v
bGVhbnYocG5hbWUsIHZhbHVlLmRhdGEpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRl
cml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xmbG9hdD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUuZGF0YSk7
Cit9CisKK0dDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdD
R0xlbnVtIHBuYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHQ0dMaW50NjQgdmFs
dWUgPSAwOworICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVz
dCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRp
YWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCisgICAgLy8gOjpn
bEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0dD
R0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBw
bmFtZSwgR0NHTHVpbnQgaW5kZXgpCit7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBV
TlVTRURfUEFSQU0oaW5kZXgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgR0NHTGludDY0IHZhbHVlID0gMDsKKyAgICAvLyBGSVhNRSAx
NDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8g
dXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4
dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjRpX3YocG5hbWUs
IGluZGV4LCB2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
R0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UKQorICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJ
TF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Cisg
ICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEdD
R0xpbnQgdmFsdWUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKEFDVElW
RV9BVFRSSUJVVEVTID09IHBuYW1lIHx8IEFDVElWRV9VTklGT1JNUyA9PSBwbmFtZSk7CisgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFk
ZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9
IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7CisgICAgICAgICp2YWx1ZSA9
IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBlKHBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnNldChwcm9ncmFtLCBBY3Rp
dmVTaGFkZXJTeW1ib2xDb3VudHMoKSk7CisgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBz
eW1ib2xDb3VudHMgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0p
LT52YWx1ZTsKKworICAgIC8vIFJldHJpZXZlIHRoZSBhY3RpdmUgYXR0cmlidXRlcywgYnVpbGQg
YSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEgbWFwcGluZyBvZgorICAgIC8vIG91ciBpbnRlcm5hbCBh
dHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhlIHJlYWwgdW5maWx0ZXJlZCBpbmRleGVzIGluc2lkZSBP
cGVuR0wuCisgICAgR0NHTGludCBhdHRyaWJ1dGVDb3VudCA9IDA7CisgICAgOjpnbEdldFByb2dy
YW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklCVVRFUywgJmF0dHJpYnV0ZUNvdW50KTsKKyAgICBm
b3IgKEdDR0xpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7CisgICAgICAgIEFj
dGl2ZUluZm8gaW5mbzsKKyAgICAgICAgZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpLCBp
bmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0
cmlidXRlSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAvLyBEbyB0aGUgc2Ft
ZSBmb3IgdW5pZm9ybXMuCisgICAgR0NHTGludCB1bmlmb3JtQ291bnQgPSAwOworICAgIDo6Z2xH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX1VOSUZPUk1TLCAmdW5pZm9ybUNvdW50KTsKKyAg
ICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCB1bmlmb3JtQ291bnQ7ICsraSkgeworICAgICAgICBB
Y3RpdmVJbmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGks
IGluZm8pOworICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRU
b0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBlbmQoaSk7CisgICAgfQorICAgIAorICAgICp2YWx1
ZSA9IHN5bWJvbENvdW50cy5jb3VudEZvclR5cGUocG5hbWUpOworfQorCitTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdLCBHQ0dMc2l6ZWkgY291bnQsIGNvbnN0IFN0cmluZyYgbG9nKQoreworICAgIExP
RyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRlckluZm9Mb2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgp
KTsKKworICAgIEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24gcmVnRXhwKCJ3ZWJnbF9bMDEy
MzQ1Njc4OWFiY2RlZkFCQ0RFRl0rIik7CisKKyAgICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExv
ZzsKKyAgICAKKyAgICAvLyBBTkdMRSBpbnNlcnRzIGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0
aGUgc2hhZGVyIHNvdXJjZSB0aGF0CisgICAgLy8gY2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNv
bXBpbGVycy4gVGhlcmUgaXMgbm8gcG9pbnQgc2hvd2luZworICAgIC8vIHRoaXMgd2FybmluZyB0
byB0aGUgdXNlciBzaW5jZSB0aGV5IGRpZG4ndCB3cml0ZSB0aGUgY29kZSB0aGF0CisgICAgLy8g
aXMgY2F1c2luZyBpdC4KKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBh
bmdsZVdhcm5pbmcgeyAiV0FSTklORzogMDoxOiBleHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVy
NScgaXMgbm90IHN1cHBvcnRlZFxuIl9zIH07CisgICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFy
dHNXaXRoKGFuZ2xlV2FybmluZykgPyBhbmdsZVdhcm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOwor
ICAgIGludCBtYXRjaGVkTGVuZ3RoID0gMDsKKworICAgIGRvIHsKKyAgICAgICAgaW50IHN0YXJ0
ID0gcmVnRXhwLm1hdGNoKGxvZywgc3RhcnRGcm9tLCAmbWF0Y2hlZExlbmd0aCk7CisgICAgICAg
IGlmIChzdGFydCA9PSAtMSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHByb2Nlc3Nl
ZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIHN0YXJ0IC0gc3RhcnRGcm9tKSk7
CisgICAgICAgIHN0YXJ0RnJvbSA9IHN0YXJ0ICsgbWF0Y2hlZExlbmd0aDsKKworICAgICAgICBj
b25zdCBTdHJpbmcmIG1hbmdsZWRTeW1ib2wgPSBsb2cuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaGVk
TGVuZ3RoKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBtYXBwZWRTeW1ib2wgPSBtYXBwZWRTeW1i
b2xOYW1lKHNoYWRlcnMsIGNvdW50LCBtYW5nbGVkU3ltYm9sKTsKKyAgICAgICAgTE9HKFdlYkdM
LCAiRGVtYW5nbGluZzogJXMgdG8gJXMiLCBtYW5nbGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCksIG1h
cHBlZFN5bWJvbC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZCht
YXBwZWRTeW1ib2wpOworICAgIH0gd2hpbGUgKHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4o
bG9nLmxlbmd0aCgpKSk7CisKKyAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmco
c3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKKworICAgIExPRyhXZWJHTCwg
IlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7Cit9CisK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEdM
aW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xP
R19MRU5HVEgsICZsZW5ndGgpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7IAorCisgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICBWZWN0b3I8R0xjaGFyPiBpbmZv
KGxlbmd0aCk7CisgICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNp
emUsIGluZm8uZGF0YSgpKTsKKworICAgIEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7CisKKyAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJz
LCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Cit9CisKK0dDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgOjpnbEdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAg
cmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBB
U1NFUlQoc2hhZGVyKTsKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKworICAgIGNvbnN0IGF1dG8m
IHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICAKKyAgICBzd2l0
Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBERUxFVEVfU1RBVFVTOgorICAgIGNhc2UgU0hBREVSX1RZ
UEU6CisgICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCAmdmFsdWUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0
ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSU5GT19MT0dfTEVOR1RIOgorICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKQorICAgICAgICAgICAgdmFsdWUgPSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRlciku
bGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6
CisgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFM
SURfRU5VTSk7CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworU3RyaW5nIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
KQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0g
bV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFk
ZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBjb25z
dCBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworICAgIGlmICghZW50
cnkuaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKKworICAgIEdMaW50IGxlbmd0
aCA9IDA7CisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAm
bGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKwor
ICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwor
ICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRh
KCkpOworCisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsK
KyAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5k
YXRhKCksIHNpemUpKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRl
cik7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJj
ZTsKK30KKworR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0
ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGZsb2F0IHZh
bHVlID0gMC5mOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biB2YWx1ZTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgJnZhbHVl
KTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sK
KyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwg
cG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRVbmlmb3Jt
ZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9ybWl2
KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0x1aW50PiB2YWx1ZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFS
QU0odmFsdWUpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRT
eW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKKyAg
ICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVy
biA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEo
KSk7Cit9CisKK0dDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdm9pZCog
cG9pbnRlciA9IDA7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFt
ZSwgJnBvaW50ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
IEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+IHBpeGVscykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyNpZiAhVVNFKE9QRU5HTF9FUykKKyAgICBpZiAodHlwZSA9PSBIQUxGX0ZM
T0FUX09FUykKKyAgICAgICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRfQVJCOworI2VuZGlmCisKKyAg
ICBpZiAobV91c2luZ0NvcmVQcm9maWxlKSAgeworICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBm
b3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5n
IGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGFkYXB0IHRoZW0sIGFz
IHdlIGRvIGluIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKCkuCisgICAgICAg
IHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgQUxQSEE6CisgICAgICAgICAgICAvLyBX
ZSBhcmUgdXNpbmcgR0xfUkVEIHRvIGJhY2sgR0xfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2Vs
bC4KKyAgICAgICAgICAgIGZvcm1hdCA9IFJFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIExVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9S
RyB0byBiYWNrIEdMX0xVTUlOQU5DRV9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgorICAg
ICAgICAgICAgZm9ybWF0ID0gUkc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6
IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5n
IHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgor
ICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXpl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
aW1hZ2VTaXplLCBkYXRhLmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCitQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8g
PSAwOworICAgIGdsR2VuQnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CisgICAg
cmV0dXJuIG87Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOworfQorCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIo
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBlKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVy
KCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJU
RVhfU0hBREVSKTsKK30KKworUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygx
LCAmbyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChvKTsKKyAgICByZXR1cm4g
bzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1H
TE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9z
dGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTykgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBn
b2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCisgICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0ZXIg
aXQgZ2V0cyBkZWxldGVkLgorICAgICAgICBiaW5kRnJhbWVidWZmZXIoRlJBTUVCVUZGRVIsIDAp
OworICAgIH0KKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUo
cHJvZ3JhbSk7CisgICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBy
ZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRv
JiBrZXlWYWx1ZSkgeworICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4
dHVyZTsKKyAgICB9KTsKKyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVtb3ZlQWxsKHRleHR1cmUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikK
K3sKKyAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0
aWMgZXJyb3IgbGlzdCB0bworICAgIC8vIHByZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNv
IGEgY2FsbGVyIHRvIGdldEVycm9yIHdpbGwgZ2V0CisgICAgLy8gYW55IGVycm9ycyBmcm9tIGds
RXJyb3IgYmVmb3JlIHRoZSBlcnJvciB3ZSBhcmUgc3ludGhlc2l6aW5nLgorICAgIG1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJv
cik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZvcmNlQ29udGV4dExvc3Qo
KQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisg
ICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQg
OiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4
dCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRD
aGFuZ2VkTm90aWZpY2F0aW9uKCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1Zl
Y3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWRO
b3RpZmljYXRpb24oKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1h
Z2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9k
ZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQor
eworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmly
c3QsIGNvdW50LCBwcmltY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBt
b2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBH
Q0dMc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJ
bnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOworICAg
IGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCit7Cisg
ICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNv
cik7Cit9CisKKyNpZiBIQVZFKE9QRU5HTF80KSAmJiBFTkFCTEUoV0VCR0wyKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50IGluZGV4
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xQcmltaXRpdmVSZXN0YXJ0SW5kZXgoaW5kZXgpOworfQorI2VuZGlmCisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25z
dCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWlu
dCBsZW5ndGgpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFN
KGRhdGEpOworICAgIFVOVVNFRF9QQVJBTSh1c2FnZSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY09m
ZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRz
dEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNyY0RhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NH
THVpbnQgbGVuZ3RoKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9Q
QVJBTShkc3RCeXRlT2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oc3JjRGF0YSk7CisgICAgVU5V
U0VEX1BBUkFNKHNyY09mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Cit9CisKKyNp
ZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVu
dW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9m
ZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJn
ZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7Cit9CisjZWxz
ZQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVu
dW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyLCBHQ0dMaW50cHRyLCBHQ0dMc2l6ZWlwdHIpCit7Cit9
CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0
YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4g
ZGF0YSkKK3sKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQorICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHQ0dMdm9pZCog
cHRyID0gOjpnbE1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIEdy
YXBoaWNzQ29udGV4dEdMOjpNQVBfUkVBRF9CSVQpOworICAgIGlmICghcHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgbWVtY3B5KGRhdGEuZGF0YSwgcHRyLCBkYXRhLmJ1ZlNpemUpOworICAgIGlm
ICghOjpnbFVubWFwQnVmZmVyKHRhcmdldCkpCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9PUEVSQVRJT04pOworI2VuZGlmCit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQg
c3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xp
bnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0
ZXIpCit7CisgICAgVU5VU0VEX1BBUkFNKHNyY1gwKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWTAp
OworICAgIFVOVVNFRF9QQVJBTShzcmNYMSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKKyAg
ICBVTlVTRURfUEFSQU0oZHN0WDApOworICAgIFVOVVNFRF9QQVJBTShkc3RZMCk7CisgICAgVU5V
U0VEX1BBUkFNKGRzdFgxKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTEpOworICAgIFVOVVNFRF9Q
QVJBTShtYXNrKTsKKyAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAg
VU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0dXJlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV2ZWwpOworICAgIFVOVVNFRF9QQVJBTShsYXllcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3sKKyAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVudHMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7
CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRz
KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNF
RF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQoreworICAgIFVO
VVNFRF9QQVJBTShzcmMpOworfQorCisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xf
RVNfMykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xTcGFuPEdDR0xpbnQ+IGRhdGEpCit7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0SW50
ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXpl
LCBkYXRhLmRhdGEpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVT
RURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAg
VU5VU0VEX1BBUkFNKGJ1ZlNpemUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworI2VuZGlm
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91
bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9y
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVw
dGgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1f
c3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKyNlbHNlCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NH
TGVudW0sIEdDR0xTcGFuPEdDR0xpbnQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0sIEdDR0xzaXpl
aSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCit7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zm
c2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShsZXZl
bCk7CisgICAgVU5VU0VEX1BBUkFNKHhvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTSh5b2Zmc2V0
KTsKKyAgICBVTlVTRURfUEFSQU0oem9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAg
IFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9Q
QVJBTShoZWlnaHQpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRG
cmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0obmFt
ZSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3sKKyAgICBVTlVTRURf
UEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh2MCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQg
djAsIEdDR0x1aW50IHYxKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5V
U0VEX1BBUkFNKHYwKTsKKyAgICBVTlVTRURfUEFSQU0odjEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYw
LCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9u
KTsKKyAgICBVTlVTRURfUEFSQU0odjApOworICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5V
U0VEX1BBUkFNKHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyLCBHQ0dMdWludCB2MykKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKKyAgICBVTlVTRURfUEFSQU0o
djIpOworICAgIFVOVVNFRF9QQVJBTSh2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1
aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BB
UkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxv
Y2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5V
U0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0
aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0
YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBk
YXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRy
YW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAg
VU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAg
ICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
bG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Cisg
ICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkoR0NHTHVpbnQg
aW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVTRURf
UEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHopOworICAgIFVOVVNFRF9QQVJBTSh3KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWlu
dCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQoreworICAgIFVOVVNF
RF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdD
R0x1aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50IHosIEdDR0x1aW50IHcpCit7CisgICAgVU5V
U0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFN
KHkpOworICAgIFVOVVNFRF9QQVJBTSh6KTsKKyAgICBVTlVTRURfUEFSQU0odyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGlu
ZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQoreworICAgIFVOVVNFRF9Q
QVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBH
Q0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KQoreworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHNp
emUpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RyaWRlKTsK
KyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdD
R0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCkKK3sKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0
KTsKKyAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY291bnQpOworICAg
IFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NH
TGVudW0+IGJ1ZnMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZnMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGlu
dCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsK
KyAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVu
dW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
dmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShk
cmF3YnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCit7CisgICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVO
VVNFRF9QQVJBTShkZXB0aCk7CisgICAgVU5VU0VEX1BBUkFNKHN0ZW5jaWwpOworfQorCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1
ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsK
K30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZv
cm1HTE9iamVjdCBxdWVyeSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKK3sKKyAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit7CisgICAgVU5V
U0VEX1BBUkFNKHRhcmdldCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKworICAg
IHJldHVybiAwOworfQorCitHQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVl
cnlPYmplY3R1aShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocXVlcnkpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgcmV0
dXJuIDA7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVNhbXBsZXIoKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQoreworICAgIFVO
VVNFRF9QQVJBTShzYW1wbGVyKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyKQoreworICAgIFVOVVNFRF9QQVJBTSh1bml0KTsKKyAgICBVTlVTRURf
UEFSQU0oc2FtcGxlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBs
ZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQgcGFyYW0pCit7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9Q
QVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1w
bGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJB
TShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShw
YXJhbSk7Cit9CisKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxl
clBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAg
ICByZXR1cm4gMC5mOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
KQorCit7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFt
ZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK0dDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGNvbmRpdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKwor
ICAgIHJldHVybiAwOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNTeW5jKEdDR0xzeW5jIHN5bmMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVT
eW5jKEdDR0xzeW5jIHN5bmMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworfQorCitHQ0dM
ZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3lu
YywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisgICAgVU5VU0VEX1BBUkFN
KHRpbWVvdXQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OndhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGlu
dDY0IHRpbWVvdXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJB
TShmbGFncyk7CisgICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOworfQorCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFt
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3luYyk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
KyAgICByZXR1cm4gMDsKK30KKworUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQoreworICAgIHJldHVybiAwOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0
Zm9ybUdMT2JqZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTShpZCk7Cit9CisKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3Jt
R0xPYmplY3QgaWQpCit7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oaWQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2
ZU1vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2ZU1vZGUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdD
R0xlbnVtIGJ1ZmZlck1vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVO
VVNFRF9QQVJBTSh2YXJ5aW5ncyk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlck1vZGUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJh
Y2soKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zv
cm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRC
dWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJB
TShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50
IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xz
aXplaXB0ciBzaXplKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9Q
QVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFN
KG9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworfQorCitWZWN0b3I8R0NHTHVpbnQ+
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFtZXMpCit7CisgICAg
VU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtTmFtZXMpOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAg
ICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CisjaWYg
SEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNp
emUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcmVzdWx0LmRhdGEoKSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwor
I2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
Y29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9n
cmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrTmFtZSk7CisgICAgcmV0dXJuIDA7
Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0lu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5p
Zm9ybUJsb2NrSW5kZXgpOworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1C
bG9ja0JpbmRpbmcpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9Q
QVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0Jp
bmRpbmcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAg
IFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFN
KHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0oZm9y
bWF0KTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQoreworICAgIFVOVVNFRF9QQVJBTShw
cm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNF
RF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtICwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBH
Q0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0sIEdD
R0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVp
LCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0s
IEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xp
bnQsIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dM
aW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBH
Q0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVt
LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dM
aW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBH
Q0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVp
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51
bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBH
Q0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVz
c2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NH
TGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXpl
aSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7Cisg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5z
dGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMc2l6ZWk+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7
CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVu
dHNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dM
ZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0
IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRFJlc291cmNlU2Fm
ZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgdW5wYWNrQWxpZ25tZW50KQorewor
ICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8
fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7CisgICAgVW5p
cXVlQXJyYXk8dW5zaWduZWQgY2hhcj4gemVybzsKKyAgICB1bnNpZ25lZCBzaXplID0gMDsKKyAg
ICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKKyAgICAgICAgUGl4ZWxTdG9yZVBhcmFt
cyBwYXJhbXM7CisgICAgICAgIHBhcmFtcy5hbGlnbm1lbnQgPSB1bnBhY2tBbGlnbm1lbnQ7Cisg
ICAgICAgIEdDR0xlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0
eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJhbXMsICZzaXplLCBudWxscHRyLCBudWxscHRyKTsK
KyAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHplcm8gPSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQg
Y2hhcj4oc2l6ZSk7CisgICAgICAgIGlmICghemVybykgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBz
aXplKTsKKyAgICB9CisgICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bhbih6ZXJv
LmdldCgpLCBzaXplKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTAzLDYg
KzI5NDUsNiBAQCBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbgogICAgIHJldHVybiByZWFkQ29tcG9z
aXRlZFJlc3VsdHMoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfQogCi0jZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXggNmM4MWVhN2E4ODk1NDBkNTNl
MDY1ZDQ1MzRiNDY5NTZmMjBjZmExZi4uNDA4OTJmNmY1YzE1MjVjYjQ0MWIxYTEyZTJmODY0NDAz
MjVmYjhmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTI1LDUzICsy
NSwxNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBFTkFCTEUo
V0VCR0wpICYmICFVU0UoQU5HTEUpCiAKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oIgogI2luY2x1
ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KICNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5oIgotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgot
I2VuZGlmCi0KLSNpZiBVU0UoQ0EpCi0jaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCi0jZW5k
aWYKLQotI2lmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgotI2Vsc2UK
LSNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9w
ZW5HTENvbW1vbi5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU2Nv
cGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdC5oIgotI2VuZGlmCi0KLS8vIEZJWE1FOiBGaW5k
IGEgYmV0dGVyIHdheSB0byBhdm9pZCB0aGUgbmFtZSBjb25mbGljdGlvbiBmb3IgTk9fRVJST1Iu
Ci0jaWYgUExBVEZPUk0oV0lOKQotI3VuZGVmIE5PX0VSUk9SCi0jZWxpZiBQTEFURk9STShHVEsp
Ci0vLyBUaGlzIGRlZmluZSBpcyBmcm9tIHRoZSBYMTEgaGVhZGVycywgYnV0IGl0J3MgdXNlZCBi
ZWxvdywgc28gd2UgbXVzdCB1bmRlZmluZSBpdC4KLSN1bmRlZiBWRVJTSU9OCi0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKENPQ09BKQotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXZWJH
TExheWVyOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQotCiAjaWYgVVNFKE5JQ09TSUEpCiBu
YW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBHQ0dMTGF5ZXI7CkBAIC04MCw5ICs0NCw3IEBAIGNs
YXNzIEdDR0xMYXllcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRXh0ZW5zaW9uc0dM
OwotI2lmIFVTRShBTkdMRSkKLWNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOwotI2VsaWYgVVNFKE9Q
RU5HTF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7
CiAjZWxpZiBVU0UoT1BFTkdMKQogY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMOwpAQCAtOTcsNTAg
KzU5LDE0IEBAIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKIAogdHlwZWRl
ZiBIYXNoTWFwPENTdHJpbmcsIHVpbnQ2NF90PiBTaGFkZXJOYW1lSGFzaDsKIAorLy8gQmFzZSBj
bGFzcyBmb3IgR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dHMgdGhhdCB1c2UgT3BlbkdMIG9yIE9w
ZW5HTCBFUy4KIGNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIDog
cHVibGljIEdyYXBoaWNzQ29udGV4dEdMCiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0woKTsKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0jaWYgVVNFKEFOR0xFKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0OwotICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0xDb25maWcgcGxhdGZvcm1Db25maWcoKSBjb25zdDsKLSAgICBHQ0dMZW51bSBk
cmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOwotICAgIHN0YXRpYyBHQ0dMZW51bSBkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5n
VGFyZ2V0KTsKLSAgICBzdGF0aWMgR0NHTGludCBFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dEZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCk7Ci0gICAgZW51bSBjbGFz
cyBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciB7Ci0gICAgICAgIC8vIFJlbGVhc2VzIGN1
cnJlbnQgY29udGV4dCBhZnRlciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjYWxscyBkb25lIGlu
IHRoZSB0aHJlYWQuCi0gICAgICAgIFJlbGVhc2VDdXJyZW50Q29udGV4dCwKLSAgICAgICAgLy8g
UmVsZWFzZXMgYWxsIHRocmVhZCByZXNvdXJjZXMgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgotICAgICAgICBSZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VzLAotICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQgYmUgdXNl
ZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCi0gICAgICAgIC8vIGJlZW4g
cmVsZWFzZWQuCi0gICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMKLSAg
ICB9OwotICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFzZVRocmVh
ZFJlc291cmNlQmVoYXZpb3IpOwotI2VuZGlmCi0KLSAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcg
b24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4KLSAgICB2b2lkIHBy
ZXBhcmVUZXh0dXJlKCk7Ci0KLSAgICAvLyBHZXQgYW4gYXR0cmlidXRlIGxvY2F0aW9uIHdpdGhv
dXQgY2hlY2tpbmcgdGhlIG5hbWUgLT4gbWFuZ2xlZG5hbWUgbWFwcGluZy4KLSAgICBpbnQgZ2V0
QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJp
bmcmIG5hbWUpOwotCi0gICAgLy8gQ29tcGlsZSBhIHNoYWRlciB3aXRob3V0IGdvaW5nIHRocm91
Z2ggQU5HTEUuCi0gICAgdm9pZCBjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qp
OwotCi0gICAgLy8gRXF1aXZhbGVudCB0byA6OmdsVGV4SW1hZ2UyRCgpLiBBbGxvd3MgcGl4ZWxz
PT0wIHdpdGggbm8gYWxsb2NhdGlvbi4KLSAgICB2b2lkIHRleEltYWdlMkREaXJlY3QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwotCi0jaWYgIVVTRShBTkdM
RSkKLSAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVs
cyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJv
ciBpcyBzeW50aGVzaXplZC4KLSAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhl
IE9wZW5HTCBkZWZhdWx0IHNldHRpbmcuCiAgICAgYm9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZl
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCBhbGlnbm1lbnQgPSA0KTsKLSNlbmRp
ZgogCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3QgZmluYWw7Ci0KICAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KICAgICAvLyBFbnRyeSBwb2ludHMgZm9yIFdlYkdMLgogICAgIC8vCkBAIC0y
MDYsOSArMTMyLDcgQEAgcHVibGljOgogICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NHTGVu
dW0gcG5hbWUpIGZpbmFsOwogICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBu
YW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CiAgICAgR0NHTGludCBnZXRQcm9ncmFtaShQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKLSNpZiAhVVNFKEFO
R0xFKQogICAgIHZvaWQgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKTsKLSNlbmRpZiAv
LyAhVVNFKEFOR0xFKQogICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2Jq
ZWN0KSBmaW5hbDsKICAgICBTdHJpbmcgZ2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2Jq
ZWN0WzJdLCBHQ0dMc2l6ZWksIGNvbnN0IFN0cmluZyYpOwogICAgIEdDR0xpbnQgZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsK
QEAgLTI4NiwxMCArMjEwLDggQEAgcHVibGljOgogCiAgICAgdm9pZCB1c2VQcm9ncmFtKFBsYXRm
b3JtR0xPYmplY3QpIGZpbmFsOwogICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xP
YmplY3QpIGZpbmFsOwotI2lmICFVU0UoQU5HTEUpCiAgICAgYm9vbCBjaGVja1ZhcnlpbmdzUGFj
a2luZyhQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFn
bWVudFNoYWRlcikgY29uc3Q7CiAgICAgYm9vbCBwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9i
amVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0
OwotI2VuZGlmCiAKICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dM
ZmxvYXQgeCkgZmluYWw7CiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsKQEAgLTMxNywxMCAr
MjM5LDggQEAgcHVibGljOgogCiAgICAgLy8gPT09PT09PT09PSBXZWJHTDIgZW50cnkgcG9pbnRz
LgogCi0jaWYgIVVTRShBTkdMRSkKICAgICB2b2lkIGJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0
LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBH
Q0dMdWludCBsZW5ndGgpOwogICAgIHZvaWQgYnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnRwdHIgZHN0Qnl0ZU9mZnNldCwgY29uc3Qgdm9pZCogc3JjRGF0YSwgR0NHTHVpbnQg
c3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpOwotI2VuZGlmCiAgICAgdm9pZCBjb3B5QnVmZmVy
U3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGlu
dHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6
ZSkgZmluYWw7CiAKICAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwpAQCAtNDU2
LDkgKzM3Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dM
dWludCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgZGlzcGxheVdh
c1JlY29uZmlndXJlZCgpOwotI2VuZGlmCiAKICAgICB2b2lkIHNldENvbnRleHRWaXNpYmlsaXR5
KGJvb2wpIGZpbmFsOwogCkBAIC00ODQsMTIgKzQwMSw4IEBAIHB1YmxpYzoKICAgICAvLyBhbGwg
bWV0aG9kcyBpdCBjb250YWlucyBtYXkgbmVjZXNzYXJpbHkgYmUgc3VwcG9ydGVkIG9uIHRoZQog
ICAgIC8vIGN1cnJlbnQgaGFyZHdhcmUuIE11c3QgY2FsbCBFeHRlbnNpb25zR0w6OnN1cHBvcnRz
KCkgdG8KICAgICAvLyBkZXRlcm1pbmUgdGhpcy4KLSNpZiAhVVNFKEFOR0xFKQogICAgIC8vIFVz
ZSBjb3ZhcmlhbnQgcmV0dXJuIHR5cGUgZm9yIE9QRU5HTC9PUEVOR0xfRVMKICAgICBFeHRlbnNp
b25zR0xPcGVuR0xDb21tb24mIGdldEV4dGVuc2lvbnMoKSBmaW5hbDsKLSNlbHNlCi0gICAgRXh0
ZW5zaW9uc0dMJiBnZXRFeHRlbnNpb25zKCkgZmluYWw7Ci0jZW5kaWYKIAogICAgIHZvaWQgc2lt
dWxhdGVFdmVudEZvclRlc3RpbmcoU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nKSBvdmVycmlkZTsK
IApAQCAtNDk3LDI4ICs0MTAsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHByZXBhcmVGb3JEaXNw
bGF5KCkgb3ZlcnJpZGU7CiAKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04p
Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBz
dGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29u
dGV4dCYpOwotCi0jaWYgVVNFKEFOR0xFKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZl
RGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQTEFZOwotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUg
bG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5cGUsIC0xKTsKLSAg
ICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQZXJmb3JtYW5jZURp
c3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwotI2VuZGlmCi0jZW5k
aWYKLQogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcyk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47Ci0gICAgRUdMRGlzcGxheSBtX2Rp
c3BsYXlPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2Nv
bnRleHRPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZp
ZyBtX2NvbmZpZ09iaiB7IG51bGxwdHIgfTsKLSNlbmRpZgorCiAgICAgR0NHTHVpbnQgbV90ZXh0
dXJlIHsgMCB9OwogCiBwcml2YXRlOgpAQCAtNTQ3LDI0ICs0NDEsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiA9IElu
dFJlY3QoKSk7CiAgICAgdm9pZCBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChH
Q0dMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKIAotI2lmIFVTRShBTkdMRSkKLSAgICBib29sIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2lu
ZygpOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYm9vbCBhbGxvY2F0ZUFuZEJp
bmREaXNwbGF5QnVmZmVyQmFja2luZygpOwotICAgIGJvb2wgYmluZERpc3BsYXlCdWZmZXJCYWNr
aW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGJhY2tpbmcsIHZvaWQqIHBidWZmZXIpOwot
ICAgIHN0YXRpYyBib29sIG1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNw
bGF5LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKTsKLSAgICBmcmllbmQgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0R0xDVkFOR0xFOwotI2VuZGlmCi0jaWYgVVNFKEFOR0xFKQotICAgIC8vIFJldHVy
bnMgZmFsc2UgaWYgY29udGV4dCBzaG91bGQgYmUgbG9zdCBkdWUgdG8gdGltZW91dC4KLSAgICBi
b29sIHdhaXRBbmRVcGRhdGVPbGRlc3RGcmFtZSgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAg
IC8vIFBsYXRmb3JtIHNwZWNpZmljIGJlaGF2aW9yIGZvciByZWxlYXNlUmVzb3VyY2VzKCk7Ci0g
ICAgc3RhdGljIHZvaWQgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7Ci0jZW5kaWYK
IAotI2lmICFVU0UoQU5HTEUpCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVW5pcXVlUmVm
PHNoOjpTaGFkZXJWYXJpYWJsZT4+IFNoYWRlclN5bWJvbE1hcDsKIAogICAgIHN0cnVjdCBTaGFk
ZXJTb3VyY2VFbnRyeSB7CkBAIC02MzEsMTIgKzUwOCw4IEBAIHByaXZhdGU6CiAgICAgc3RkOjpv
cHRpb25hbDxTdHJpbmc+IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkZXJOYW1lSGFzaD4gbmFtZUhhc2hNYXBGb3JT
aGFkZXJzOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAKLSNpZiBVU0UoQU5HTEUpCi0gICAgZnJp
ZW5kIGNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNp
b25zR0xBTkdMRT4gbV9leHRlbnNpb25zOwotI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpZiBVU0Uo
T1BFTkdMX0VTKQogICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xFUzsKICAgICBm
cmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxFeHRlbnNpb25zR0xPcGVuR0xFUz4gbV9leHRlbnNpb25zOwpAQCAtNjQ4LDkgKzUyMSw3IEBA
IHByaXZhdGU6CiAKICAgICBWZWN0b3I8VmVjdG9yPGZsb2F0Pj4gbV92ZXJ0ZXhBcnJheTsKIAot
I2lmICFVU0UoQU5HTEUpCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKLSNlbmRp
ZgogCiAgICAgR0NHTHVpbnQgbV9mYm8geyAwIH07CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQpAQCAtNjU4LDU0ICs1MjksMTQgQEAgcHJpdmF0ZToKICAgICBHQ0dMdWludCBtX2ludGVy
bWVkaWF0ZVRleHR1cmUgeyAwIH07CiAjZW5kaWYKIAotI2lmICFVU0UoQU5HTEUpICYmIFVTRShP
UEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKICAgICBHQ0dMdWludCBtX2RlcHRoQnVmZmVy
IHsgMCB9OwogICAgIEdDR0x1aW50IG1fc3RlbmNpbEJ1ZmZlciB7IDAgfTsKICNlbmRpZgogICAg
IEdDR0x1aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9OwogCiAgICAgR0NHTHVpbnQgbV9p
bnRlcm5hbENvbG9yRm9ybWF0IHsgMCB9OwotI2lmIFVTRShBTkdMRSkKLSAgICBHQ0dMdWludCBt
X2ludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0IHsgMCB9OwotI2VuZGlmCi0gICAgc3RydWN0IEdy
YXBoaWNzQ29udGV4dEdMU3RhdGUgewotICAgICAgICBHQ0dMdWludCBib3VuZFJlYWRGQk8geyAw
IH07Ci0gICAgICAgIEdDR0x1aW50IGJvdW5kRHJhd0ZCTyB7IDAgfTsKLSAgICAgICAgR0NHTGVu
dW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKLQot
ICAgICAgICB1c2luZyBCb3VuZFRleHR1cmVNYXAgPSBIYXNoTWFwPEdDR0xlbnVtLAotICAgICAg
ICAgICAgc3RkOjpwYWlyPEdDR0x1aW50LCBHQ0dMZW51bT4sCi0gICAgICAgICAgICBJbnRIYXNo
PEdDR0xlbnVtPiwKLSAgICAgICAgICAgIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8R0NHTHVpbnQ+LAotICAgICAgICAgICAgUGFpckhhc2hUcmFpdHM8V1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8R0NHTHVpbnQ+PgotICAgICAgICA+OwotICAgICAgICBCb3VuZFRleHR1cmVNYXAg
Ym91bmRUZXh0dXJlTWFwOwotICAgICAgICBHQ0dMdWludCBjdXJyZW50Qm91bmRUZXh0dXJlKCkg
Y29uc3QgeyByZXR1cm4gYm91bmRUZXh0dXJlKGFjdGl2ZVRleHR1cmVVbml0KTsgfQotICAgICAg
ICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1cmVNYXAuZmluZCh0
ZXh0dXJlVW5pdCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFw
LmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuZmlyc3Q7Ci0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQogCi0gICAgICAgIEdDR0x1aW50IGN1cnJl
bnRCb3VuZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGFyZ2V0KGFjdGl2ZVRleHR1cmVV
bml0KTsgfQotICAgICAgICBHQ0dMZW51bSBib3VuZFRhcmdldChHQ0dMZW51bSB0ZXh0dXJlVW5p
dCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4
dHVyZU1hcC5maW5kKHRleHR1cmVVbml0KTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBi
b3VuZFRleHR1cmVNYXAuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52
YWx1ZS5zZWNvbmQ7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0
dXJlLCBHQ0dMZW51bSB0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvdW5kVGV4dHVy
ZU1hcC5zZXQodGV4dHVyZVVuaXQsIHN0ZDo6bWFrZV9wYWlyKHRleHR1cmUsIHRhcmdldCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdXNpbmcgVGV4dHVyZVNlZWRDb3VudCA9IEhhc2hDb3VudGVk
U2V0PEdDR0x1aW50LCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czxHQ0dMdWludD4+OwotICAgICAgICBUZXh0dXJlU2VlZENvdW50IHRleHR1cmVT
ZWVkQ291bnQ7Ci0gICAgfTsKIAogICAgIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUgbV9zdGF0ZTsK
IApAQCAtNzE0LDE2ICs1NDUsNiBAQCBwcml2YXRlOgogICAgIEdDR0x1aW50IG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CiAgICAgR0NHTHVpbnQgbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyIHsgMCB9OwogCi0jaWYgVVNFKEFOR0xFKQotICAgIC8vIEZvciBwcmVzZXJ2ZURy
YXdpbmdCdWZmZXI6dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCi0gICAgR0NHTHVpbnQgbV9w
cmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIHsgMCB9OwotICAgIC8vIEF0dGFjaGVzIG1fdGV4
dHVyZSB3aGVuIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KLSAg
ICBHQ0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKLSAgICAvLyBRdWVy
aWVkIGF0IGRpc3BsYXkgc3RhcnR1cC4KLSAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCB7IC0xIH07Ci0KLSNlbmRpZgotCiAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50
aGVzaXplR0xFcnJvcigpLgogICAgIExpc3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vy
cm9yczsKIApAQCAtNzQ0LDI5ICs1NjUsOCBAQCBwcml2YXRlOgogI2lmIFVTRShDQUlSTykKICAg
ICBQbGF0Zm9ybUdMT2JqZWN0IG1fdmFvIHsgMCB9OwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICAvLyBCYWNraW5nIHN0b3JlIGZvciB0aGUgdGhlIGJ1ZmZlciB3aGljaCBpcyBl
dmVudHVhbGx5IHVzZWQgZm9yIGRpc3BsYXkuCi0gICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdC
dWZmZXIgPT0gZmFsc2UsIHRoaXMgaXMgdGhlIGRyYXdpbmcgYnVmZmVyIGJhY2tpbmcgc3RvcmUu
Ci0gICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gdHJ1ZSwgdGhpcyBpcyBibGl0
dGVkIHRvIGR1cmluZyBkaXNwbGF5IHByZXBhcmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3Vy
ZmFjZT4gbV9kaXNwbGF5QnVmZmVyQmFja2luZzsKLSAgICB2b2lkKiBtX2Rpc3BsYXlCdWZmZXJQ
YnVmZmVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGJvb2wg
bV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbiB7IGZhbHNlIH07Ci0gICAgU2Nv
cGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdCBtX2hpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3Q7
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRT4gbV9jdjsKLSNlbmRpZgotI2lm
IFVTRShBTkdMRSkKLSAgICBib29sIG1fdXNlRmVuY2VTeW5jRm9yRGlzcGxheVJhdGVMaW1pdCA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heFBlbmRpbmdGcmFtZXMgPSAz
OwotICAgIHNpemVfdCBtX29sZGVzdEZyYW1lQ29tcGxldGlvbkZlbmNlIHsgMCB9OwotICAgIFNj
b3BlZEdMRmVuY2UgbV9mcmFtZUNvbXBsZXRpb25GZW5jZXNbbWF4UGVuZGluZ0ZyYW1lc107Ci0j
ZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNzMwZDZkMzY3ZjFmOTU0NDViMGE3OWMxNzRkYTg4YTNlZTUxY2I5Yy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjg4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgotCi0jaWYg
RU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNs
dWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5oIgotI2Vsc2UKLSNpbmNsdWRlICJFeHRlbnNpb25z
R0xPcGVuR0wuaCIKLSNlbmRpZgotI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNl
dHRpbmcuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4KLSNpbmNsdWRlIDxjc3RyaW5n
PgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVB
cnJheS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi0jaWYgVVNFKExJ
QkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5U2hpbXMuaCIKLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0j
aW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgotI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShXSU4pCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+JiBnZXRDdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlRmxhZzsKLSAgICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiogc2hh
cmVkTmFtZUhhc2g7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKLSAgICAgICAg
c2hhcmVkTmFtZUhhc2ggPSBuZXcgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPjsKLSAg
ICB9KTsKLQotICAgIHJldHVybiAqc2hhcmVkTmFtZUhhc2g7Ci19Ci0KLXN0YXRpYyB2b2lkIHNl
dEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihTaGFkZXJOYW1lSGFzaCogc2hhZGVyTmFtZUhh
c2gpCi17Ci0gICAgKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpID0gc2hhZGVyTmFt
ZUhhc2g7Ci19Ci0KLS8vIEhhc2ggZnVuY3Rpb24gdXNlZCBieSB0aGUgQU5HTEUgdHJhbnNsYXRv
ci9jb21waWxlciB0byBkbwotLy8gc3ltYm9sIG5hbWUgbWFuZ2xpbmcuIFNpbmNlIHRoaXMgaXMg
YSBzdGF0aWMgbWV0aG9kLCBiZWZvcmUKLS8vIGNhbGxpbmcgY29tcGlsZVNoYWRlciB3ZSBzZXQg
Y3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyCi0vLyB0byBwb2ludCB0byB0aGUgbWFwIGtlcHQg
YnkgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0KLXN0
YXRpYyB1aW50NjRfdCBuYW1lSGFzaEZvclNoYWRlcihjb25zdCBjaGFyKiBuYW1lLCBzaXplX3Qg
bGVuZ3RoKQotewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENT
dHJpbmcgbmFtZUFzQ1N0cmluZyA9IENTdHJpbmcobmFtZSk7Ci0KLSAgICAvLyBMb29rIHVwIG5h
bWUgaW4gb3VyIGxvY2FsIG1hcC4KLSAgICBTaGFkZXJOYW1lSGFzaComIGN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlciA9ICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKTsKLSAgICBT
aGFkZXJOYW1lSGFzaDo6aXRlcmF0b3IgZmluZFJlc3VsdCA9IGN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlci0+ZmluZChuYW1lQXNDU3RyaW5nKTsKLSAgICBpZiAoZmluZFJlc3VsdCAhPSBjdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmVuZCgpKQotICAgICAgICByZXR1cm4gZmluZFJlc3Vs
dC0+dmFsdWU7Ci0KLSAgICB1bnNpZ25lZCBoYXNoVmFsdWUgPSBuYW1lQXNDU3RyaW5nLmhhc2go
KTsKLQotICAgIC8vIENvbnZlcnQgdGhlIDMyLWJpdCBoYXNoIGZyb20gQ1N0cmluZzo6aGFzaCBp
bnRvIGEgNjQtYml0IHJlc3VsdAotICAgIC8vIGJ5IHNoaWZ0aW5nIHRoZW4gYWRkaW5nIHRoZSBz
aXplIG9mIG91ciB0YWJsZS4gT3ZlcmZsb3cgd291bGQKLSAgICAvLyBvbmx5IGJlIGEgcHJvYmxl
bSBpZiB3ZSdyZSBhbHJlYWR5IGhhc2hpbmcgdG8gdGhlIHNhbWUgdmFsdWUgKGFuZAotICAgIC8v
IHdlJ3JlIGhvcGluZyB0aGF0IG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb250ZXh0IHdlCi0g
ICAgLy8gZG9uJ3QgaGF2ZSB0aGF0IG1hbnkgc3ltYm9scykuCi0KLSAgICB1aW50NjRfdCByZXN1
bHQgPSBoYXNoVmFsdWU7Ci0gICAgcmVzdWx0ID0gKHJlc3VsdCA8PCAzMikgKyAoY3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyLT5zaXplKCkgKyAxKTsKLQotICAgIGN1cnJlbnROYW1lSGFzaE1h
cEZvclNoYWRlci0+c2V0KG5hbWVBc0NTdHJpbmcsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5j
aWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQotewotICAgIGF1dG8g
YXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29t
bW9uJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAgIGlmIChhdHRycy5zdGVuY2ls
KSB7Ci0gICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4
dGVuc2lvbikpIHsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb24pOwotICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3Rl
bmNpbCBpcyB0cnVlLgotICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVlOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKLSAgICAgICAgc2V0Q29u
dGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgIH0KLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYm
ICFtX2lzRm9yV2ViR0wyKSB7Ci0gICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xf
QU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkgewotICAgICAgICAgICAgYXR0cnMuYW50
aWFsaWFzID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJH
TF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwotICAgIH0KLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQotewotICAgIGlmIChtX2xheWVy
Q29tcG9zaXRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RF
U1QsIEdMX0ZBTFNFKTsKLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihH
TF9ESVRIRVIsIEdMX0ZBTFNFKTsKLSNlbmRpZgotCi0gICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVz
KCkuYW50aWFsaWFzKQotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7
Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgc3RkOjpzd2FwKG1fdGV4dHVy
ZSwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRl
cm1lZGlhdGVUZXh0dXJlKTsKLSAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBtX2Zibyk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUs
IDApOwotICAgIGdsRmx1c2goKTsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9
PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9
IG1fZmJvKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGVsc2UKLSAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUwKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zdGF0ZS5ib3Vu
ZFRhcmdldChHTF9URVhUVVJFMCkgPT0gR0xfVEVYVFVSRV8yRCA/IG1fc3RhdGUuYm91bmRUZXh0
dXJlKEdMX1RFWFRVUkUwKSA6IDApOwotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fc3RhdGUuYWN0
aXZlVGV4dHVyZVVuaXQpOwotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJv
KQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIDo6Z2xGbHVzaCgpOwotfQotCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMoKQotewotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAg
ICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKLSAgICAgICAgcmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtdXN0UmVz
dG9yZUZCTyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuYm91
bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICAgICAgaWYgKG1fc3RhdGUu
Ym91bmREcmF3RkJPICE9IG1fZmJvKSB7Ci0gICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRy
dWU7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICB9Ci0gICAgfQotICAgIGF1dG8gcmVzdWx0
ID0gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOwotICAgIGlmIChtdXN0UmVzdG9yZUZCTykK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdo
dCkKLXsKLSAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3Vy
cmVudEhlaWdodCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHdpZHRoID49IDAgJiYg
aGVpZ2h0ID49IDApOwotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICBtX2N1cnJlbnRXaWR0aCA9IHdp
ZHRoOwotICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKLQotICAgIHZhbGlkYXRlQXR0cmli
dXRlcygpOwotCi0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1ND
SVNTT1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVk
RGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwotICAgIAotICAgIGJvb2wgbXVzdFJlc3RvcmVG
Qk8gPSByZXNoYXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKLQotICAgIC8vIEluaXRp
YWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgotICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0gezAs
IDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAwOwot
ICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBH
TF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKLSAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAw
eGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZmOwotICAgIEdMYml0ZmllbGQg
Y2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKLSAgICA6OmdsR2V0RmxvYXR2KEdMX0NP
TE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKLSAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAw
LCAwKTsKLSAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2sp
OwotICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7
Ci0KLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRy
cy5kZXB0aCkgewotICAgICAgICA6OmdsR2V0RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAm
Y2xlYXJEZXB0aCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRo
KDEpOwotICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhN
YXNrKTsKLSAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKLSAgICAgICAgY2xlYXJNYXNr
IHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7
Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJT
dGVuY2lsKTsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKLSAgICAgICAgOjpnbEdldElu
dGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0
ZW5jaWxNYXNrKSk7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrQmFjaykpOwotICAg
ICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZmZmZmZik7Ci0gICAg
ICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIDB4ZmZmZmZmZmYpOwotICAgICAg
ICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOwotICAgIH0KLQotICAgIDo6Z2xD
bGVhcihjbGVhck1hc2spOwotCi0gICAgOjpnbENsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xl
YXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7Ci0gICAgOjpnbENvbG9y
TWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tb
M10pOwotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKLSAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0
aE1hc2spOwotICAgIH0KLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICA6OmdsQ2xl
YXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRl
KEdMX0ZST05ULCBzdGVuY2lsTWFzayk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRl
KEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7Ci0gICAgfQotCi0gICAgaWYgKG11c3RSZXN0b3Jl
RkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotCi0gICAgYXV0byBlcnJvciA9IDo6
Z2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvciAhPSBHTF9OT19FUlJPUikgewotICAgICAgICBS
RUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBPcGVuR0wgZXJyb3IgZHVyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMIGJ1ZmZlciBpbml0aWFsaXphdGlvbiAoJWQpLiIsIGVycm9yKTsKLSAgICAgICAgZm9y
Y2VDb250ZXh0TG9zdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgOjpnbEZsdXNo
KCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrVmFyeWluZ3NQYWNr
aW5nKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdt
ZW50U2hhZGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlu
cyh2ZXJ0ZXhTaGFkZXIpKTsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMo
ZnJhZ21lbnRTaGFkZXIpKTsKLSAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7Ci0gICAgY29uc3QgYXV0byYgZnJh
Z21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1
ZTsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6U2hhZGVyVmFyaWFibGU+IGNvbWJpbmVkVmFy
eWluZ3M7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgOiB2ZXJ0ZXhFbnRyeS52
YXJ5aW5nTWFwKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgc3ltYm9sTmFtZSA9IHZlcnRleFN5
bWJvbC5rZXk7Ci0gICAgICAgIC8vIFRoZSB2YXJ5aW5nIG1hcCBpbmNsdWRlcyB2YXJpYWJsZXMg
Zm9yIGVhY2ggaW5kZXggb2YgYW4gYXJyYXkgdmFyaWFibGUuCi0gICAgICAgIC8vIFdlIG9ubHkg
d2FudCBhIHNpbmdsZSB2YXJpYWJsZSB0byByZXByZXNlbnQgdGhlIGFycmF5LgotICAgICAgICBp
ZiAoc3ltYm9sTmFtZS5lbmRzV2l0aCgiXSIpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgLy8gRG9uJ3QgY291bnQgYnVpbHQgaW4gdmFyeWluZ3MuCi0gICAgICAgIGlmIChzeW1i
b2xOYW1lID09ICJnbF9GcmFnQ29vcmQiIHx8IHN5bWJvbE5hbWUgPT0gImdsX0Zyb250RmFjaW5n
IiB8fCBzeW1ib2xOYW1lID09ICJnbF9Qb2ludENvb3JkIikKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50U3ltYm9sID0gZnJhZ21lbnRFbnRyeS52
YXJ5aW5nTWFwLmZpbmQoc3ltYm9sTmFtZSk7Ci0gICAgICAgIGlmIChmcmFnbWVudFN5bWJvbCAh
PSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb21iaW5lZFZh
cnlpbmdzLmFkZChzeW1ib2xOYW1lLCBmcmFnbWVudFN5bWJvbC0+dmFsdWUpOwotICAgIH0KLQot
ICAgIHNpemVfdCBudW1WYXJ5aW5ncyA9IGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpOwotICAgIGlm
ICghbnVtVmFyeWluZ3MpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgc3RkOjp2ZWN0b3I8
c2g6OlNoYWRlclZhcmlhYmxlPiB2YXJpYWJsZXM7Ci0gICAgdmFyaWFibGVzLnJlc2VydmUoY29t
YmluZWRWYXJ5aW5ncy5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgdmFyeWluZ1N5bWJv
bCA6IGNvbWJpbmVkVmFyeWluZ3MudmFsdWVzKCkpCi0gICAgICAgIHZhcmlhYmxlcy5wdXNoX2Jh
Y2sodmFyeWluZ1N5bWJvbCk7Ci0KLSAgICBHQ0dMaW50IG1heFZhcnlpbmdWZWN0b3JzID0gMDsK
LSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIDo6Z2xHZXRJbnRlZ2VydihNQVhfVkFSWUlOR19WRUNU
T1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwotI2Vsc2UKLSAgICBpZiAobV9pc0ZvcldlYkdMMikK
LSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMsICZtYXhWYXJ5
aW5nVmVjdG9ycyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEdDR0xpbnQgbWF4VmFyeWluZ0Zsb2F0
cyA9IDA7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsICZt
YXhWYXJ5aW5nRmxvYXRzKTsKLSAgICAgICAgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtYXhWYXJ5aW5n
RmxvYXRzIC8gNDsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gc2g6OkNoZWNrVmFyaWFibGVz
V2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5nVmVjdG9ycywgdmFyaWFibGVzKTsKLX0KLQot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtR0xP
YmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25z
dAotewotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIp
KTsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIp
KTsKLSAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
dmVydGV4U2hhZGVyKS0+dmFsdWU7Ci0gICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKLQotICAgIEhhc2hN
YXA8U3RyaW5nLCBzaDo6R0xlbnVtPiB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXA7Ci0KLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdmVydGV4RW50cnkudW5pZm9ybU1hcCkgewotICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBl
ZE5hbWU7Ci0gICAgICAgIHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5hZGQoU3RyaW5nKG1hcHBl
ZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSksIGVudHJ5LnZhbHVlLmdldCgpLnBy
ZWNpc2lvbik7Ci0gICAgfQotCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGZyYWdtZW50
RW50cnkudW5pZm9ybU1hcCkgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFt
ZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7Ci0gICAgICAgIGNvbnN0IGF1dG8mIHZl
cnRleFN5bWJvbCA9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5maW5kKFN0cmluZyhtYXBwZWRO
YW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpKTsKLSAgICAgICAgaWYgKHZlcnRleFN5
bWJvbCAhPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZW5kKCkgJiYgdmVydGV4U3ltYm9sLT52
YWx1ZSAhPSBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24pCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlLmFj
dGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNT
RVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLnJlbW92ZShwcm9ncmFtKTsKLSAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNo
YWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJp
bmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1l
KTsKLSAgICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRv
ICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAg
IDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG1hcHBlZE5hbWUudXRmOCgp
LmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmluZEJ1ZmZl
cih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdMdWludCBmYm87Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgZmJvID0gYnVmZmVyOwotICAg
IGVsc2UKLSAgICAgICAgZmJvID0gKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9t
dWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKLSAgICBBU1NFUlQodGFyZ2V0ID09IEdMX0ZSQU1FQlVG
RkVSKTsKLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERy
YXdGQk8pOwotICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pIHsKLSAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7Ci0gICAgICAgIG1fc3RhdGUuYm91
bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBmYm87Ci0gICAgfQotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXJF
WFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0
dXJlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQs
IHRleHR1cmUsIHRhcmdldCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1w
ZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBo
YSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVB
bHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19
Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9y
KTsKLX0gICAgICAgCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1Nl
cGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBo
YSwgR0NHTGVudW0gZHN0QWxwaGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0
UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIEdDR0xl
bnVtIHVzYWdlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3Qgdm9pZD4gZGF0YSwgR0NHTGVudW0gdXNhZ2UpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJ1ZmZl
ckRhdGEodGFyZ2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSwgdXNhZ2UpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xC
dWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7Ci19
Ci0KLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0KLSAgICByZXR1cm4gOjpnbENo
ZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNs
YW1wZiBiLCBHQ0dMY2xhbXBmIGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xDbGVhcihtYXNrKTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NHTGludCBzKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDbGVhclN0
ZW5jaWwocyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhH
Q0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dM
Ym9vbGVhbiBhbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUdXJuIG9uIG5hbWUg
bWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQotICAg
IC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRl
eHQuCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gbV9jb21waWxlci5n
ZXRSZXNvdXJjZXMoKTsKLSAgICBTaEhhc2hGdW5jdGlvbjY0IHByZXZpb3VzSGFzaEZ1bmN0aW9u
ID0gQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOwotICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hG
dW5jdGlvbiA9IG5hbWVIYXNoRm9yU2hhZGVyOwotCi0gICAgaWYgKCFuYW1lSGFzaE1hcEZvclNo
YWRlcnMpCi0gICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVy
TmFtZUhhc2g+KCk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNo
TWFwRm9yU2hhZGVycy5nZXQoKSk7Ci0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVS
ZXNvdXJjZXMpOwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVu
c2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOwotCi0gICAgQU5H
TEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0gcHJldmlvdXNIYXNoRnVuY3Rpb247Ci0gICAgbV9j
b21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgIHNldEN1cnJlbnROYW1l
SGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsKLQotICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNv
dXJjZS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgQ1N0cmluZyYgdHJh
bnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKLSAg
ICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJp
bmcuZGF0YSgpOwotICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNo
YWRlckNTdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gb3JpZ2lu
YWwgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2Ug
LS0tXG4iLCBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51dGY4KCkuZGF0YSgpKTsKLSAgICBMT0co
V2ViR0wsICItLS0gYmVnaW4gdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBl
bmQgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLSIsIHRyYW5zbGF0ZWRTaGFkZXJQdHIpOwot
Ci0gICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAm
dHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7Ci0gICAgCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hh
ZGVyKTsKLSAgICAKLSAgICBpbnQgY29tcGlsZVN0YXR1czsKLSAgICAKLSAgICA6OmdsR2V0U2hh
ZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOwotCi0gICAgU2hh
ZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNo
YWRlcik7Ci0gICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKLQot
ICAgIC8vIFBvcHVsYXRlIHRoZSBzaGFkZXIgbG9nCi0gICAgR0xpbnQgbGVuZ3RoID0gMDsKLSAg
ICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwot
Ci0gICAgaWYgKGxlbmd0aCkgewotICAgICAgICBHTHNpemVpIHNpemUgPSAwOwotICAgICAgICBW
ZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9n
KHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgICAgIFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07Ci0gICAgICAgIGVudHJ5LmxvZyA9
IGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXpl
KSk7Ci0gICAgfQotCi0gICAgaWYgKGNvbXBpbGVTdGF0dXMgIT0gR0xfVFJVRSkgewotICAgICAg
ICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBzaGFk
ZXIgdHJhbnNsYXRvciBwcm9kdWNlZCBhIHNoYWRlciB0aGF0IE9wZW5HTCB3b3VsZCBub3QgY29t
cGlsZS4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBp
bGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNo
YWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgSGFzaE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJh
dG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0KLSAgICBjb25zdCBD
U3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50cnkuc291cmNlLnV0ZjgoKTsKLSAgICBj
b25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsK
LSAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0cmluZy5sZW5ndGgo
KTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1c
biVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuIiwgc2hhZGVyU291cmNlUHRy
KTsKLQotICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAm
c2hhZGVyU291cmNlTGVuZ3RoKTsKLQotICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0K
LSAgICBpbnQgY29tcGlsZVN0YXR1czsKLQotICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENP
TVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyA9
PSBHTF9UUlVFKSB7Ci0gICAgICAgIGVudHJ5LmlzVmFsaWQgPSB0cnVlOwotICAgICAgICBMT0co
V2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsKLSAgICB9
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgQVNT
RVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBp
ZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0gICAgOjpnbENv
cHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zm
c2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgQVNTRVJUKG1f
c3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAoYXR0
cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
IHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0gICAgOjpnbENvcHlUZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8g
PT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFw
aGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xD
dWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhG
dW5jKEdDR0xlbnVtIGZ1bmMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFuIGZsYWcpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERl
cHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNo
U2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIp
Ci17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKLSAgICA6OmdsRGV0YWNoU2hhZGVy
KHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRp
c2FibGUoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRl
eCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZp
cnN0LCBHQ0dMc2l6ZWkgY291bnQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50
KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50
LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90Pihv
ZmZzZXQpKSk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRW5hYmxlKGNhcCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
R0x1aW50IGluZGV4KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZpbmlzaCgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmbHVzaCgpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZsdXNoKCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVy
YnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1
ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZy
YW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcm9udEZhY2UobW9kZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdl
dCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKLSAgICA6
OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwg
Jm1heEF0dHJpYnV0ZVNpemUpOwotICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRl
U2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRl
cm1pbmF0aW9uLgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9
IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3Jh
bSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5h
bWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dy
YW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFt
ZUxlbmd0aCkpOwotICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICBTdHJpbmcgdW5pZm9ybU5hbWUo
bmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwotICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMg
bWFwcGluZyBhY3RpdmUgYXR0cmlidXRlICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwg
aW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0
YSgpKTsKLSNlbmRpZgotCi0gICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOwotICAgIGluZm8u
dHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0g
ICAgR0NHTGludCBzeW1ib2xDb3VudDsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3Jh
bVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRl
clByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICBnZXROb25CdWlsdEluQWN0
aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9BVFRSSUJV
VEVTLCAmc3ltYm9sQ291bnQpOwotICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIH0KLSAgICAKLSAgICBBY3RpdmVTaGFkZXJT
eW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgR0NHTHVpbnQg
cmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0
ZUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0
ZUluZGV4TWFwW2luZGV4XSA6IC0xOwotCi0gICAgcmV0dXJuIGdldEFjdGl2ZUF0dHJpYkltcGwo
cHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsKLSAgICA6OmdsR2V0
UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlm
b3JtU2l6ZSk7Ci0KLSAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heFVuaWZvcm1TaXplKTsgLy8g
R0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgot
ICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xl
bnVtIHR5cGUgPSAwOwotICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBt
YXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOwot
ICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFN0
cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZ
TUJPTF9UWVBFX1VOSUZPUk0sIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOwotICAg
IAotI2lmbmRlZiBOREVCVUcKLSAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5h
bWVMZW5ndGgpOwotICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUg
dW5pZm9ybSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFt
ZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAg
ICAKLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Ci0gICAgaW5mby50eXBlID0gdHlwZTsK
LSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgR0NHTGludCBz
eW1ib2xDb3VudDsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50
TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291
bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9VTklGT1JNUywgJnN5bWJvbENv
dW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmlu
ZChwcm9ncmFtKTsKLSAgICB9Ci0gICAgCi0gICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBz
eW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOwotICAgIEdDR0x1aW50IHJhd0luZGV4ID0gKGlu
ZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgp
KSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwW2luZGV4XSA6
IC0xOwotICAgIAotICAgIHJldHVybiBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCByYXdJ
bmRleCwgaW5mbyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFj
aGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwg
R0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVjdCogc2hhZGVycykKLXsKLSAgICBpZiAo
IXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhD
b3VudCwgY291bnQsIHNoYWRlcnMpOwotfQotCi1zdGF0aWMgU3RyaW5nIGdlbmVyYXRlSGFzaGVk
TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gbmFtZTsKLSAgICB1aW50NjRfdCBudW1iZXIgPSBuYW1lSGFzaEZvclNoYWRl
cihuYW1lLnV0ZjgoKS5kYXRhKCksIG5hbWUubGVuZ3RoKCkpOwotICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJ3ZWJnbF8iLCBoZXgobnVtYmVyLCBMb3dlcmNhc2UpKTsKLX0KLQotc3RkOjpvcHRpb25h
bDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xJblNoYWRlclNv
dXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5
bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hh
ZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291
cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgY29uc3Qg
YXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7Ci0g
ICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1hcC5maW5kKG5hbWUpOwotICAgIGlmIChzeW1i
b2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICBhdXRvJiBtYXBwZWROYW1lID0gc3ltYm9sRW50cnktPnZhbHVlLmdldCgpLm1hcHBl
ZE5hbWU7Ci0gICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUu
bGVuZ3RoKCkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5
bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUg
c3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEdDR0xzaXplaSBjb3VudCA9
IDA7Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyB9OwotICAgIGdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAgZm9yIChHQ0dM
c2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9
IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5h
bWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtYXBwZWRO
YW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBk
ZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCi0gICAgYXV0byByZXN1bHQgPSBtX2xp
bmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRT
aGFkZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52
YWx1ZTsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3Vy
Y2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlm
IChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKLSAg
ICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNo
YWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1hcHBlZE5hbWUp
Ci0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIGlm
IChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5
IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwK
LSAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNo
YWRlciBwcm9ncmFtLgotICAgICAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKLSAgICAg
ICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+
KCk7Ci0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZv
clNoYWRlcnMuZ2V0KCkpOwotCi0gICAgICAgIGF1dG8gZ2VuZXJhdGVkTmFtZSA9IGdlbmVyYXRl
SGFzaGVkTmFtZShuYW1lKTsKLQotICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIobnVsbHB0cik7Ci0KLSAgICAgICAgbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5zZXQo
Z2VuZXJhdGVkTmFtZSwgbmFtZSk7Ci0KLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE5hbWU7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgp
KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgY29uc3QgYXV0byYgc3ltYm9s
TWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewotICAgICAgICBpZiAobmFtZSA9PSBz
eW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gc3ltYm9sRW50cnkua2V5OwotICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
fQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0NHTHNpemVpIGNvdW50OwotICAgIFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyc1syXTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwg
MiwgJmNvdW50LCBzaGFkZXJzKTsKLSAgICAKLSAgICBmb3IgKEdDR0xzaXplaSBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJv
bEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAg
ICBpZiAob3JpZ2luYWxOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1
ZSgpOwotICAgIH0KLQotICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0
aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgotICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFk
ZXJNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFw
LmVuZCgpKSB7Ci0gICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7Ci0g
ICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9y
aWdpbmFsTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAg
ICAgICAgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5r
ZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5h
bE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgfQot
Ci0gICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAh
bmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNh
c2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNv
bXBpbGVkLAotICAgICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBp
biBhbnkgc2hhZGVyIHByb2dyYW0uCi0KLSAgICAgICAgY29uc3QgYXV0byYgY2FjaGVkID0gbV9w
b3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5maW5kKG5hbWUpOwotICAgICAgICBpZiAoY2FjaGVk
ICE9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1
cm4gY2FjaGVkLT52YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAg
Zm9yIChzaXplX3Qgc3ltYm9sVHlwZSA9IDA7IHN5bWJvbFR5cGUgPD0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihTSEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORyk7ICsrc3ltYm9sVHlwZSkgewotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIFNoYWRl
clNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFk
ZXJzW2ldKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5k
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xN
YXAoc3RhdGljX2Nhc3Q8ZW51bSBBTkdMRVNoYWRlclN5bWJvbFR5cGU+KHN5bWJvbFR5cGUpKTsK
LSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsK
LSAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBw
ZWROYW1lLmNfc3RyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS5r
ZXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci19
Ci0KLWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9n
cmFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gLTE7Ci0KLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVk
U3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsK
LSAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAl
cyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICBy
ZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRh
dGEoKSk7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17
Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLQotICAgIHJldHVybiA6Omds
R2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotYm9v
bCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOwotCi0gICAgLy8gU2V0IGFuIGFy
Yml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKLSAg
ICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBuZXZlciBj
bGVhciB0aGUgZXJyb3IuCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50
aWwgd2UgZ290IE5PX0VSUk9SLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDA7ICsr
aSkgewotICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGdsR2V0RXJyb3IoKTsKLSAgICAgICAgaWYg
KGVycm9yID09IE5PX0VSUk9SKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fc3ludGhl
dGljRXJyb3JzLmFkZChlcnJvcik7Ci0gICAgICAgIG1vdmVkQW5FcnJvciA9IHRydWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKLX0KLQotR0NHTGVudW0gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKLXsKLSAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRv
IHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCi0gICAgICAgIC8vIHRoYXQgZXJyb3Ig
aXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJvdGgKLSAg
ICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMgdG8gb25seSByZXBvcnQgZWFjaCBl
cnJvciBjb2RlIG9uY2UuCi0gICAgICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
OwotICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7Ci0gICAgfQot
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0lOVkFM
SURfT1BFUkFUSU9OOwotCi0gICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigpOwotfQotCi1TdHJpbmcg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0
cmluZyhuYW1lKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOwot
fQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZv
cm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBH
TF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
biBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNCdWZmZXIoYnVmZmVyKTsKLX0KLQotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXAp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2FwKTsKLX0KLQotR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBm
cmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xf
RkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
R0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIp
OwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0pOwot
fQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIo
UGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIp
Ci0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNSZW5kZXJi
dWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIGlmICgh
c2hhZGVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElz
U2hhZGVyKHNoYWRlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVy
ZSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1RleHR1
cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0
aChHQ0dMZmxvYXQgd2lkdGgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbExpbmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwotICAgIFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMo
cHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLQotICAgIGlmIChjb3VudCA9PSAyKQotICAg
ICAgICBtX2xpbmtlZFNoYWRlck1hcC5zZXQocHJvZ3JhbSwgc3RkOjptYWtlX3BhaXIoc2hhZGVy
c1swXSwgc2hhZGVyc1sxXSkpOwotCi0gICAgOjpnbExpbmtQcm9ncmFtKHByb2dyYW0pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFt
ZSwgR0NHTGludCBwYXJhbSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFj
dG9yLCBHQ0dMZmxvYXQgdW5pdHMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xj
bGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFs
dWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3Io
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25z
dCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotCi0gICAgU2hhZGVyU291cmNl
RW50cnkgZW50cnk7Ci0KLSAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7Ci0KLSAgICBtX3NoYWRl
clNvdXJjZU1hcC5zZXQoc2hhZGVyLCBXVEZNb3ZlKGVudHJ5KSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVm
LCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xl
bnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1hc2spCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0
ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVu
dW0genBhc3MpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0
ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTGZsb2F0IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwg
cG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFy
YW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB2MCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuYnVm
U2l6ZSwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
VW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlv
biwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9y
bTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZv
cm0zZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUg
NCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFpdihsb2Nh
dGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dM
aW50IHYxKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAl
IDIpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5p
Zm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
aW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlm
b3JtM2l2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYzKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlm
b3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOwotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xV
bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm1N
YXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgOSkpOwot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gOSwgdHJhbnNwb3Nl
LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6
ZSAlIDE2KSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAx
NiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVzZVByb2dy
YW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0p
OwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDE+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5
LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIy
ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRl
eEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgMj4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBh
cnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxv
YXQgdjIsIEdDR0xmbG9hdCB2MykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwg
djIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
NGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBH
Q0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xz
aXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVZlcnRleEFycmF5KCkKLXsKLSAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmNyZWF0
ZVZlcnRleEFycmF5T0VTKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
bGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCi17Ci0gICAgZ2V0RXh0ZW5z
aW9ucygpLmRlbGV0ZVZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0KLQotR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJh
eSkKLXsKLSAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmlzVmVydGV4QXJyYXlPRVMoYXJyYXkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxh
dGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkuYmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
R2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlLmRhdGEpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotCi0gICAgOjpnbEdldEJ1ZmZlclBh
cmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYoR0NHTGVudW0gcG5hbWUs
IEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUu
ZGF0YSk7Ci19Ci0KLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cjY0KEdDR0xlbnVtIHBuYW1lKQotewotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHQ0dMaW50
NjQgdmFsdWUgPSAwOwotICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMg
d2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5k
IGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCi0gICAg
Ly8gOjpnbEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19
Ci0KLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dM
ZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
LSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0NHTGludDY0IHZhbHVlID0gMDsKLSAgICAvLyBG
SVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92
ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIg
Y29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgotICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjRpX3Yo
cG5hbWUsIGluZGV4LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUpCi17
Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UKQotICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3Ig
U1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCi0gICAgOjpnbEdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1
ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1l
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5h
bWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJU
KEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1lIHx8IEFDVElWRV9VTklGT1JNUyA9PSBwbmFtZSk7
Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgYXV0byYgcmVzdWx0ID0g
bV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVz
dWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgICp2
YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBlKHBuYW1lKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnNldChwcm9ncmFt
LCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMoKSk7Ci0gICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291
bnRzJiBzeW1ib2xDb3VudHMgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHBy
b2dyYW0pLT52YWx1ZTsKLQotICAgIC8vIFJldHJpZXZlIHRoZSBhY3RpdmUgYXR0cmlidXRlcywg
YnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEgbWFwcGluZyBvZgotICAgIC8vIG91ciBpbnRl
cm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhlIHJlYWwgdW5maWx0ZXJlZCBpbmRleGVzIGlu
c2lkZSBPcGVuR0wuCi0gICAgR0NHTGludCBhdHRyaWJ1dGVDb3VudCA9IDA7Ci0gICAgOjpnbEdl
dFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklCVVRFUywgJmF0dHJpYnV0ZUNvdW50KTsK
LSAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7Ci0gICAg
ICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFt
LCBpLCBpbmZvKTsKLSAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0
dWFsQXR0cmlidXRlSW5kZXhNYXAuYXBwZW5kKGkpOwotICAgIH0KLSAgICAKLSAgICAvLyBEbyB0
aGUgc2FtZSBmb3IgdW5pZm9ybXMuCi0gICAgR0NHTGludCB1bmlmb3JtQ291bnQgPSAwOwotICAg
IDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX1VOSUZPUk1TLCAmdW5pZm9ybUNvdW50
KTsKLSAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCB1bmlmb3JtQ291bnQ7ICsraSkgewotICAg
ICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dy
YW0sIGksIGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBzeW1ib2xDb3VudHMuZmls
dGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBlbmQoaSk7Ci0gICAgfQotICAgIAotICAg
ICp2YWx1ZSA9IHN5bWJvbENvdW50cy5jb3VudEZvclR5cGUocG5hbWUpOwotfQotCi1TdHJpbmcg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXJzWzJdLCBHQ0dMc2l6ZWkgY291bnQsIGNvbnN0IFN0cmluZyYgbG9nKQotewot
ICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRlckluZm9Mb2c6XG4lcyIsIGxvZy51dGY4KCku
ZGF0YSgpKTsKLQotICAgIEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24gcmVnRXhwKCJ3ZWJn
bF9bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl0rIik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHByb2Nl
c3NlZExvZzsKLSAgICAKLSAgICAvLyBBTkdMRSBpbnNlcnRzIGEgIiNleHRlbnNpb24iIGxpbmUg
aW50byB0aGUgc2hhZGVyIHNvdXJjZSB0aGF0Ci0gICAgLy8gY2F1c2VzIGEgd2FybmluZyBpbiBz
b21lIGNvbXBpbGVycy4gVGhlcmUgaXMgbm8gcG9pbnQgc2hvd2luZwotICAgIC8vIHRoaXMgd2Fy
bmluZyB0byB0aGUgdXNlciBzaW5jZSB0aGV5IGRpZG4ndCB3cml0ZSB0aGUgY29kZSB0aGF0Ci0g
ICAgLy8gaXMgY2F1c2luZyBpdC4KLSAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBhbmdsZVdhcm5pbmcgeyAiV0FSTklORzogMDoxOiBleHRlbnNpb24gJ0dMX0FSQl9ncHVf
c2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxuIl9zIH07Ci0gICAgaW50IHN0YXJ0RnJvbSA9IGxv
Zy5zdGFydHNXaXRoKGFuZ2xlV2FybmluZykgPyBhbmdsZVdhcm5pbmcuZ2V0KCkubGVuZ3RoKCkg
OiAwOwotICAgIGludCBtYXRjaGVkTGVuZ3RoID0gMDsKLQotICAgIGRvIHsKLSAgICAgICAgaW50
IHN0YXJ0ID0gcmVnRXhwLm1hdGNoKGxvZywgc3RhcnRGcm9tLCAmbWF0Y2hlZExlbmd0aCk7Ci0g
ICAgICAgIGlmIChzdGFydCA9PSAtMSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHBy
b2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIHN0YXJ0IC0gc3RhcnRG
cm9tKSk7Ci0gICAgICAgIHN0YXJ0RnJvbSA9IHN0YXJ0ICsgbWF0Y2hlZExlbmd0aDsKLQotICAg
ICAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWRTeW1ib2wgPSBsb2cuc3Vic3RyaW5nKHN0YXJ0LCBt
YXRjaGVkTGVuZ3RoKTsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBtYXBwZWRTeW1ib2wgPSBtYXBw
ZWRTeW1ib2xOYW1lKHNoYWRlcnMsIGNvdW50LCBtYW5nbGVkU3ltYm9sKTsKLSAgICAgICAgTE9H
KFdlYkdMLCAiRGVtYW5nbGluZzogJXMgdG8gJXMiLCBtYW5nbGVkU3ltYm9sLnV0ZjgoKS5kYXRh
KCksIG1hcHBlZFN5bWJvbC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcHJvY2Vzc2VkTG9nLmFw
cGVuZChtYXBwZWRTeW1ib2wpOwotICAgIH0gd2hpbGUgKHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0
PGludD4obG9nLmxlbmd0aCgpKSk7Ci0KLSAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJz
dHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKLQotICAgIExPRyhX
ZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2co
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9J
TkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7IAotCi0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFy
PiBpbmZvKGxlbmd0aCk7Ci0gICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0
aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgIEdDR0xzaXplaSBjb3VudDsKLSAgICBQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0s
IDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhz
aGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci19Ci0KLUdDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
OjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSkKLXsK
LSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLQotICAgIGNvbnN0
IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAg
ICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBERUxFVEVfU1RBVFVTOgotICAgIGNhc2UgU0hB
REVSX1RZUEU6Ci0gICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCAmdmFsdWUp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgotICAgICAgICBpZiAo
cmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgICAgdmFsdWUgPSBz
dGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgotICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVy
U291cmNlTWFwLmVuZCgpKQotICAgICAgICAgICAgdmFsdWUgPSBnZXRTaGFkZXJJbmZvTG9nKHNo
YWRlcikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hBREVSX1NPVVJDRV9M
RU5HVEg6Ci0gICAgICAgIHZhbHVlID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfRU5VTSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgY29uc3QgYXV0byYgcmVz
dWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0g
bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAg
ICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotICAgIGlm
ICghZW50cnkuaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKLQotICAgIEdMaW50
IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVO
R1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OyAKLQotICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5n
dGgpOwotICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5m
by5kYXRhKCkpOwotCi0gICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIs
IDAgfTsKLSAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmco
aW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJU
KHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIHJldHVybiByZXN1bHQtPnZhbHVl
LnNvdXJjZTsKLX0KLQotR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQ
YXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGZs
b2F0IHZhbHVlID0gMC5mOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiB2YWx1ZTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwg
JnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFt
ZSkKLXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRh
cmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRV
bmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRhdGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0VW5p
Zm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0x1aW50PiB2YWx1ZSkKLXsKLSAgICBVTlVT
RURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVT
RURfUEFSQU0odmFsdWUpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBt
YXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBuYW1l
KTsKLSAgICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRv
ICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAg
IHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgp
LmRhdGEoKSk7Ci19Ci0KLUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdM
dm9pZCogcG9pbnRlciA9IDA7Ci0gICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4
LCBwbmFtZSwgJnBvaW50ZXIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IHBpeGVscykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSNpZiAhVVNFKE9QRU5HTF9FUykKLSAgICBpZiAodHlwZSA9PSBI
QUxGX0ZMT0FUX09FUykKLSAgICAgICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRfQVJCOwotI2VuZGlm
Ci0KLSAgICBpZiAobV91c2luZ0NvcmVQcm9maWxlKSAgewotICAgICAgICAvLyBUaGVyZSBhcmUg
c29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVu
IHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIGFkYXB0IHRo
ZW0sIGFzIHdlIGRvIGluIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKCkuCi0g
ICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgQUxQSEE6Ci0gICAgICAgICAg
ICAvLyBXZSBhcmUgdXNpbmcgR0xfUkVEIHRvIGJhY2sgR0xfQUxQSEEsIHNvIGRvIGl0IGhlcmUg
YXMgd2VsbC4KLSAgICAgICAgICAgIGZvcm1hdCA9IFJFRDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIC8vIFdlIGFyZSB1c2lu
ZyBHTF9SRyB0byBiYWNrIEdMX0xVTUlOQU5DRV9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxs
LgotICAgICAgICAgICAgZm9ybWF0ID0gUkc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
RklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBk
ZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBz
aXplLgotICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmRhdGEpOwotICAgIG1fc3RhdGUudGV4
dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1h
Z2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29tcHJlc3NlZFRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJv
cmRlciwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi1QbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x1
aW50IG8gPSAwOwotICAgIGdsR2VuQnVmZmVycygxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0K
LVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVm
ZmVyKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7
Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOwotfQot
Ci1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJi
dWZmZXIoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAm
byk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBlKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdsQ3JlYXRl
U2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBH
TF9WRVJURVhfU0hBREVSKTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5UZXh0
dXJlcygxLCAmbyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChvKTsKLSAgICBy
ZXR1cm4gbzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVy
KFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxh
dGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8g
PT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRl
LmJvdW5kRHJhd0ZCTykgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlz
IG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCi0gICAgICAgIC8vIG9wZXJhdGlvbnMg
YWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgotICAgICAgICBiaW5kRnJhbWVidWZmZXIoRlJBTUVCVUZG
RVIsIDApOwotICAgIH0KLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZm
ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5y
ZW1vdmUocHJvZ3JhbSk7Ci0gICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJi
dWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2Jq
ZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVd
IChhdXRvJiBrZXlWYWx1ZSkgewotICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3Qg
PT0gdGV4dHVyZTsKLSAgICB9KTsKLSAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsK
LSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVtb3ZlQWxsKHRleHR1cmUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBl
cnJvcikKLXsKLSAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBz
eW50aGV0aWMgZXJyb3IgbGlzdCB0bwotICAgIC8vIHByZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJv
cnMsIHNvIGEgY2FsbGVyIHRvIGdldEVycm9yIHdpbGwgZ2V0Ci0gICAgLy8gYW55IGVycm9ycyBm
cm9tIGdsRXJyb3IgYmVmb3JlIHRoZSBlcnJvciB3ZSBhcmUgc3ludGhlc2l6aW5nLgotICAgIG1v
dmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIG1fc3ludGhldGljRXJyb3JzLmFk
ZChlcnJvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZvcmNlQ29udGV4
dExvc3QoKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50
cykpCi0gICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCi17Ci0gICAgZm9yIChhdXRvKiBj
bGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5yZWN5Y2xl
Q29udGV4dCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwYXRjaENv
bnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNv
cHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24oKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNv
dW50KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9k
ZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dM
ZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3RWxl
bWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQp
OwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3Ip
Ci17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwg
ZGl2aXNvcik7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSAmJiBFTkFCTEUoV0VCR0wyKQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50
IGluZGV4KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xQcmltaXRpdmVSZXN0YXJ0SW5kZXgoaW5kZXgpOwotfQotI2VuZGlmCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0
LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBH
Q0dMdWludCBsZW5ndGgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGRhdGEpOwotICAgIFVOVVNFRF9QQVJBTSh1c2FnZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHNyY09mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNyY0RhdGEsIEdDR0x1aW50IHNyY09mZnNl
dCwgR0NHTHVpbnQgbGVuZ3RoKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVO
VVNFRF9QQVJBTShkc3RCeXRlT2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oc3JjRGF0YSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Ci19
Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwg
R0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3
cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENvcHlCdWZmZXJTdWJEYXRhKHJl
YWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7Ci19
Ci0jZWxzZQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEo
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyLCBHQ0dMaW50cHRyLCBHQ0dMc2l6ZWlwdHIp
Ci17Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVy
U3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMU3BhbjxHQ0dM
dm9pZD4gZGF0YSkKLXsKLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBHQ0dM
dm9pZCogcHRyID0gOjpnbE1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNp
emUsIEdyYXBoaWNzQ29udGV4dEdMOjpNQVBfUkVBRF9CSVQpOwotICAgIGlmICghcHRyKQotICAg
ICAgICByZXR1cm47Ci0gICAgbWVtY3B5KGRhdGEuZGF0YSwgcHRyLCBkYXRhLmJ1ZlNpemUpOwot
ICAgIGlmICghOjpnbFVubWFwQnVmZmVyKHRhcmdldCkpCi0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIFVOVVNF
RF9QQVJBTShkYXRhKTsKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9PUEVSQVRJT04pOwotI2VuZGlmCi19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdD
R0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAs
IEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51
bSBmaWx0ZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gwKTsKLSAgICBVTlVTRURfUEFSQU0o
c3JjWTApOwotICAgIFVOVVNFRF9QQVJBTShzcmNYMSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1kx
KTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WDApOwotICAgIFVOVVNFRF9QQVJBTShkc3RZMCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGRzdFgxKTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WTEpOwotICAgIFVO
VVNFRF9QQVJBTShtYXNrKTsKLSAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOwotICAgIFVOVVNFRF9QQVJBTSh0ZXh0dXJl
KTsKLSAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwotICAgIFVOVVNFRF9QQVJBTShsYXllcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKLXsK
LSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVudHMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVi
dWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVu
dHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGF0dGFj
aG1lbnRzKTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwotICAg
IFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQotewot
ICAgIFVOVVNFRF9QQVJBTShzcmMpOwotfQotCi0jaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShP
UEVOR0xfRVNfMykKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9y
bWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IGRhdGEpCi17Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
R2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAg
ICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZlNpemUpOwotICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOwot
I2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJy
ZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6
ZWkgZGVwdGgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLSNlbHNlCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtLCBHQ0dMZW51
bSwgR0NHTGVudW0sIEdDR0xTcGFuPEdDR0xpbnQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0sIEdD
R0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQotewotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0sIEdDR0xzaXplaSwg
R0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0s
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0jZW5kaWYKLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGlu
dCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJB
TShsZXZlbCk7Ci0gICAgVU5VU0VEX1BBUkFNKHhvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTSh5
b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oem9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHgp
OwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVO
VVNFRF9QQVJBTShoZWlnaHQpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFS
QU0obmFtZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKLXsKLSAgICBV
TlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NH
THVpbnQgdjAsIEdDR0x1aW50IHYxKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFSQU0odjEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1
aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxv
Y2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odjApOwotICAgIFVOVVNFRF9QQVJBTSh2MSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdD
R0x1aW50IHYyLCBHQ0dMdWludCB2MykKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwot
ICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHYxKTsKLSAgICBVTlVTRURf
UEFSQU0odjIpOwotICAgIFVOVVNFRF9QQVJBTSh2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5V
U0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkK
LXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0g
ICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwot
ICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BB
UkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3Nl
KTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURf
UEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNF
RF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkoR0NH
THVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykK
LXsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBV
TlVTRURfUEFSQU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHopOwotICAgIFVOVVNFRF9QQVJBTSh3
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQotewotICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5k
ZXgsIEdDR0x1aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50IHosIEdDR0x1aW50IHcpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh6KTsKLSAgICBVTlVTRURfUEFSQU0odyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1
aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQotewotICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xp
bnRwdHIgb2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHNpemUpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Ry
aWRlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3Rh
cnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCkKLXsKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXJ0KTsKLSAgICBVTlVTRURfUEFSQU0oZW5kKTsKLSAgICBVTlVTRURfUEFSQU0oY291bnQp
OwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29u
c3QgR0NHTGVudW0+IGJ1ZnMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZnMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOwot
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwg
R0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURfUEFSQU0oYnVm
ZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHZh
bHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYo
R0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwotICAgIFVOVVNFRF9Q
QVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdD
R0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOwot
ICAgIFVOVVNFRF9QQVJBTShkZXB0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0ZW5jaWwpOwotfQot
Ci1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgp
Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
bGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHF1
ZXJ5KTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnko
UGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkpOwotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdp
blF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
LQotICAgIHJldHVybiAwOwotfQotCi1HQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UXVlcnlPYmplY3R1aShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5LCBHQ0dMZW51bSBwbmFtZSkK
LXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVNhbXBsZXIoKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikK
LXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewot
ICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxh
dGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewotICAgIFVOVVNFRF9QQVJBTSh1bml0KTsKLSAgICBV
TlVTRURfUEFSQU0oc2FtcGxlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5h
bWUsIEdDR0xpbnQgcGFyYW0pCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotICAgIFVO
VVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKQotewotICAgIFVOVVNF
RF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIFVOVVNFRF9Q
QVJBTShwYXJhbSk7Ci19Ci0KLUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFt
ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1l
KTsKLSAgICByZXR1cm4gMC5mOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVt
IHBuYW1lKQotCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJB
TShwbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3Mp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbmRpdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWdz
KTsKLQotICAgIHJldHVybiAwOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVTeW5jKEdDR0xzeW5jIHN5bmMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwotfQot
Ci1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5
bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHN5bmMpOwotICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRpbWVvdXQpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywg
R0NHTGludDY0IHRpbWVvdXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwotICAgIFVOVVNF
RF9QQVJBTShmbGFncyk7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOwotfQotCi1HQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51
bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BBUkFNKHBu
YW1lKTsKLSAgICByZXR1cm4gMDsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQotewotICAgIHJldHVybiAwOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNFRF9QQVJBTShpZCk7Ci19Ci0KLUdD
R0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBs
YXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGlkKTsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9y
bUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkKLXsKLSAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHBy
aW1pdGl2ZU1vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2ZU1vZGUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Z3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWlu
Z3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwot
ICAgIFVOVVNFRF9QQVJBTSh2YXJ5aW5ncyk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlck1vZGUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZl
SW5mbyYpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShp
bmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3Jt
RmVlZGJhY2soKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1bWVU
cmFuc2Zvcm1GZWVkYmFjaygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNF
RF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdD
R0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBvZmZzZXQs
IEdDR0xzaXplaXB0ciBzaXplKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotfQotCi1WZWN0b3I8R0NH
THVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFtZXMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtTmFt
ZXMpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkK
LXsKLSAgICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7
Ci0jaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLSAgICBBU1NFUlQocHJv
Z3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLQotICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRp
Y2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcmVzdWx0LmRhdGEoKSk7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0ocG5h
bWUpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotR0NHTHVpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKQotewotICAgIFVOVVNFRF9QQVJB
TShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrTmFtZSk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1C
bG9ja0luZGV4KQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFS
QU0odW5pZm9ybUJsb2NrSW5kZXgpOwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0JpbmRpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVO
VVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1C
bG9ja0JpbmRpbmcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBp
eGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQot
ewotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICBVTlVTRURfUEFS
QU0oZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9m
ZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1CbG9ja2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBH
Q0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQotewotICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOwotICAg
IFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQs
IEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xl
bnVtICwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNp
emVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVu
dW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NH
THNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NH
TGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRw
dHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NH
TGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQot
ewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVt
LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
aW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xp
bnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdD
R0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50
LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNp
emVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50
LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NH
THNpemVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBH
Q0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNp
emVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGlu
dCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdD
R0xzaXplaSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGlu
dCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzQU5HTEUoR0NHTGVudW0sIEdDR0xT
cGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkp
Ci17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BF
UkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJy
YXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6
ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
T1BFUkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3
RWxlbWVudHNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVu
dW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdM
RShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCi17
Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRFJlc291
cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVy
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgdW5wYWNrQWxpZ25tZW50
KQotewotICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQg
PT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7Ci0g
ICAgVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4gemVybzsKLSAgICB1bnNpZ25lZCBzaXplID0g
MDsKLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKLSAgICAgICAgUGl4ZWxTdG9y
ZVBhcmFtcyBwYXJhbXM7Ci0gICAgICAgIHBhcmFtcy5hbGlnbm1lbnQgPSB1bnBhY2tBbGlnbm1l
bnQ7Ci0gICAgICAgIEdDR0xlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJhbXMsICZzaXplLCBudWxscHRyLCBudWxs
cHRyKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHplcm8gPSBtYWtlVW5pcXVlQXJyYXk8dW5z
aWduZWQgY2hhcj4oc2l6ZSk7Ci0gICAgICAgIGlmICghemVybykgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1lbXNldCh6ZXJvLmdldCgp
LCAwLCBzaXplKTsKLSAgICB9Ci0gICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bh
bih6ZXJvLmdldCgpLCBzaXplKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKaW5kZXggZTY2ZTAwYWRiMjg3NWFkZjY5YTE5N2Zj
YzY5MjMxNmRhNmY5NmU2ZS4uZDI5OWExOWZhODY2Mzk3NTUyZGQ2ZGU3ODgwY2NhNDMzODJmMjhh
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAK
QEAgLTI4LDkgKzI4LDEzIEBACiAjaWYgRU5BQkxFKFdFQkdMKQogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMTWFuYWdlci5oIgogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAKKyNpZiBVU0UoQU5HTEUpCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgorI2Vsc2UKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIgorI2VuZGlmCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMTWFuYWdlciYgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpz
aGFyZWRNYW5hZ2VyKCkKQEAgLTU2LDcgKzYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQogfQogI2VuZGlmCiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6
OmFkZENvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCogY29udGV4dCkKIHsKICAgICBB
U1NFUlQoY29udGV4dCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtNjYsNyArNzAsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6YWRkQ29udGV4dChHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogY29udGV4dAogICAgIG1fY29udGV4dHMuYXBwZW5kKGNvbnRleHQpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6cmVtb3ZlQ29udGV4dChHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xNYW5hZ2VyOjpyZW1vdmVDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wqIGNvbnRl
eHQpCiB7CiAgICAgaWYgKCFtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKQogICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKaW5k
ZXggMGVmODZkYzZkZTdmMjFkNWU4ZTkxMjBlOWEzMmIwYThiMWYxZjczMS4uZDE0ODM0MTBkMDIz
ZjgzMDM2ZDk3ODU2NDM1ZmFlNTU4NGIwNDY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXIuaApAQCAtMzYsMTUgKzM2LDI1IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY29uc3QgdW5zaWduZWQgTWF4Q29udGV4dHMgPSAxNjsKIAorI2lmIFVTRShBTkdM
RSkKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxzZQogY2xhc3MgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w7CisjZW5kaWYKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyIHsKICAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xNYW5hZ2VyPjsKIHB1YmxpYzoKKyNpZiBVU0UoQU5HTEUpCisgICAgdXNpbmcgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHRHTCA9IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxzZQorICAgIHVz
aW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsK
KyNlbmRpZgorCiAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlciYgc2hh
cmVkTWFuYWdlcigpOwogICAgIAotICAgIHZvaWQgYWRkQ29udGV4dChHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCopOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCopOworICAgIHZvaWQgYWRkQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKik7Cisg
ICAgdm9pZCByZW1vdmVDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wqKTsKICAgICAK
ICAgICB2b2lkIHJlY3ljbGVDb250ZXh0SWZOZWNlc3NhcnkoKTsKICAgICBib29sIGhhc1Rvb01h
bnlDb250ZXh0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dHMuc2l6ZSgpID49IE1heENvbnRl
eHRzOyB9CkBAIC01OSw3ICs2OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyKCkgPSBkZWZhdWx0OwogCi0gICAgVmVjdG9yPEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKj4gbV9jb250ZXh0czsKKyAgICBWZWN0b3I8UGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCo+IG1fY29udGV4dHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCmluZGV4IDA1NzU0NDQ4YjkwM2UxNDk5M2VkMzFi
MGNiZDYxZTg2OTRhOWVlOTkuLjViYzA1MjA3YzMxM2FlNjlkY2Q1ZjJlYzdhN2I1YmM0MzE3MmZi
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3Bw
CkBAIC05MSw4ICs5MSw2IEBAIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6R3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4dEdMCiB7CiB9CiAKLS8vIEZJ
WE1FOiBCZWxvdyBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIgdG8gc2ltcGxpZnkgdGhlIGJhc2UgY2xhc3MuCi0KIFJlZlB0cjxH
cmFwaGljc0NvbnRleHRHTD4gY3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0
IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsKICAgICBzdGF0aWMg
Ym9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwpAQCAtMTI1LDc2ICsxMjMsMzYgQEAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dEdMPiBjcmVhdGVXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0woY29uc3Qg
R3JhcGhpY3NDb250ZXgKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAotI2lmIFVTRShBTkdMRSkK
LUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IEdyYXBoaWNzQ29udGV4dEdM
KGF0dHJpYnV0ZXMpCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBw
ZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9p
c0ZvcldlYkdMMiA9IGF0dHJpYnV0ZXMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdM
V2ViR0xWZXJzaW9uOjpXZWJHTDI7Ci0jZW5kaWYKICNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25p
Y29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsK
KyAgICByZXR1cm4gJm1fbmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIoKTsKICNlbHNlCi0gICAg
bV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
PigqdGhpcyk7CisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXIuZ2V0KCk7CiAjZW5kaWYKLSAgICBi
b29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1
Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAgYXR0cmli
dXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJp
bmcgdmFsaWRhdGlvbi4KLQotICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZl
clRleHR1cmVUYXJnZXQoKTsKLSAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRv
LgotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbDo6QmluZFRleHR1
cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRl
eFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5F
QVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFy
Z2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2w6OkJpbmRU
ZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOworfQogCi0gICAgLy8gQ3JlYXRlIGFuIEZCTy4KLSAg
ICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2w6OkJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCitSZWZQ
dHI8TWVkaWFTYW1wbGU+IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGFpbnRDb21w
b3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUoKQoreworI2lmIFVTRShHU1RSRUFNRVIpCisgICAg
aWYgKGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKSkKKyAgICAgICAg
cmV0dXJuIE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZShXVEZNb3ZlKCpw
aXhlbEJ1ZmZlcikpOworI2VuZGlmCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisjZW5kaWYKIAot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1f
Y29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRl
cmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9D
TEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICBnbDo6R2VuVGV4dHVyZXMo
MSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVU
YXJnZXQsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotCi0gICAgZ2w6OkJp
bmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOworI2lmIEVOQUJMRShWSURFTykKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpjb3B5VGV4dHVyZUZyb21NZWRpYShNZWRpYVBs
YXllciYgcGxheWVyLCBQbGF0Zm9ybUdMT2JqZWN0IG91dHB1dFRleHR1cmUsIEdDR0xlbnVtIG91
dHB1dFRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZs
aXBZKQoreworICAgIHJldHVybiBwbGF5ZXIuY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKHRoaXMsIG91dHB1dFRleHR1cmUsIG91dHB1dFRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKK30KICNlbmRpZgog
Ci0gICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIEFTU0VSVChtX3N0YXRlLmJv
dW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMu
YW50aWFsaWFzKSB7Ci0gICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVGQk8pOwotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211
bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJv
dW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIGdsOjpHZW5SZW5kZXJidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBnbDo6R2VuUmVuZGVy
YnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJP
ID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9CisvLyBGSVhNRTogQmVsb3cg
ZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgogCi0gICAgZ2w6OkNsZWFyQ29sb3Io
MCwgMCwgMCwgMCk7Ci19Ci0jZWxzZQorI2lmICFVU0UoQU5HTEUpCiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQogewpA
QCAtMzIyLDUwICsyODAsNyBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogCiAgICAgOjpnbENs
ZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiB9Ci0jZW5kaWYKIAotI2lmIFVTRShBTkdMRSkKLUdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQotewotICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRl
eHQodGhpcyk7Ci0gICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
QVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAgICBpZiAobV90ZXh0dXJlKQotICAg
ICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbDo6
RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBh
dXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0
ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8
IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIGdsOjpEZWxldGVG
cmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAgIH0gZWxzZSBpZiAoYXR0cmli
dXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSNpZiAhVVNFKEFOR0xFKSAmJiBV
U0UoT1BFTkdMX0VTKQotICAgICAgICBpZiAobV9kZXB0aEJ1ZmZlcikKLSAgICAgICAgICAgIGds
RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKG1f
c3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9z
dGVuY2lsQnVmZmVyKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIp
Ci0gICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOwotICAgIH0KLSAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAm
bV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotICAgIGlm
IChtX3ZhbykKLSAgICAgICAgZGVsZXRlVmVydGV4QXJyYXkobV92YW8pOwotI2VuZGlmCi19Ci0j
ZWxzZQogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgp
CiB7CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCku
cmVtb3ZlQ29udGV4dCh0aGlzKTsKQEAgLTQwNiw3ICszMjEsNiBAQCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKICAgICAgICAgZGVsZXRlVmVydGV4
QXJyYXkobV92YW8pOwogI2VuZGlmCiB9Ci0jZW5kaWYgLy8gVVNFKEFOR0xFKQogCiBib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewpAQCAtNDIzLDI1
ICszMzcsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMo
KQogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0dMRVMyQ29tcGxpYW50KCkgY29u
c3QKIHsKLSNpZiBVU0UoQU5HTEUpCi0gICAgcmV0dXJuIG1faXNGb3JXZWJHTDI7Ci0jZWxpZiBV
U0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVOR0xfRVMpCiAgICAgcmV0dXJuIHRydWU7CiAjZWxz
ZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQogCi1QbGF0Zm9ybUxheWVyKiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgVVNFKE5JQ09T
SUEpCi0gICAgcmV0dXJuICZtX25pY29zaWFMYXllci0+Y29udGVudExheWVyKCk7Ci0jZWxzZQot
ICAgIHJldHVybiBtX3RleG1hcExheWVyLmdldCgpOwotI2VuZGlmCi19Ci0KLSNpZiBQTEFURk9S
TShHVEspICYmICFVU0UoQU5HTEUpCisjaWYgUExBVEZPUk0oR1RLKQogRXh0ZW5zaW9uc0dMT3Bl
bkdMQ29tbW9uJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAg
ICAgaWYgKCFtX2V4dGVuc2lvbnMpIHsKQEAgLTQ3MSwyNyArMzc0LDEwIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKIHsKIH0KIAotI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCi1SZWZQdHI8TWVkaWFTYW1wbGU+IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBsZSgpCi17Ci0jaWYgVVNFKEdT
VFJFQU1FUikKLSAgICBpZiAoYXV0byBwaXhlbEJ1ZmZlciA9IHJlYWRDb21wb3NpdGVkUmVzdWx0
cygpKQotICAgICAgICByZXR1cm4gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUltYWdlU2Ft
cGxlKFdURk1vdmUoKnBpeGVsQnVmZmVyKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLSNlbmRpZgotCiBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRzKCkKIHsKICAgICByZXR1cm4gcmVhZFJlbmRl
cmluZ1Jlc3VsdHMoKTsKIH0KLQotI2lmIEVOQUJMRShWSURFTykKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyOjpjb3B5VGV4dHVyZUZyb21NZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBQbGF0Zm9ybUdMT2JqZWN0IG91dHB1dFRleHR1cmUsIEdDR0xlbnVtIG91dHB1dFRhcmdl
dCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQotewot
ICAgIHJldHVybiBwbGF5ZXIuY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKHRoaXMs
IG91dHB1dFRleHR1cmUsIG91dHB1dFRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3Jt
YXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKLX0KICNlbmRpZgogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyLmgKaW5kZXggZTQ2NjJiNjgzZWE0NWI2ZjE5NjZiMzE5NzMzOTMzMDNhYWY4NjA5NS4uN2Y2
MjI1YTFhMzk5YmViMmJmOTkzMDlkNGU3ODgzMDgxMzk3MzMyMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVy
ZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaApAQCAtMjcsMTggKzI3LDM0IEBACiAKICNp
ZiBFTkFCTEUoV0VCR0wpCiAKKyNpZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xBTkdMRS5oIgorI2Vsc2UKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
IgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQg
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMIHsKKyNpZiBVU0UoQU5HTEUpCit1c2luZyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXJCYXNlID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCit1c2luZyBHcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXJCYXNlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7Cisj
ZW5kaWYKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2UgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyPiBjcmVh
dGUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIH5HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIoKTsKIAorICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlckJhc2Ugb3ZlcnJpZGVzLgorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdCBmaW5hbDsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVy
ZUZyb21NZWRpYShNZWRpYVBsYXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxp
cFkpIGZpbmFsOwogI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8
TWVkaWFTYW1wbGU+IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGFpbnRDb21wb3Np
dGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUoKSBmaW5hbDsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAg
ICAgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYmKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcAppbmRleCAwODUzOWE3ZDkyOTgxMTQ1ZGMwNjAwMWI1
NzRjYThjOWE3MWY4OTU1Li5lM2MzNDJlMzQxNWI2Mzk2NDU1MWYxZTkyZTg1YWQ4ZDk0YWYxY2Fk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJB
TkdMRS5jcHAKQEAgLTQwLDcgKzQwLDEwNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybURpc3BsYXkoKSBjb25zdAorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAg
ICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCit7CisjaWYgRU5BQkxFKFdFQkdMMikK
KyAgICBtX2lzRm9yV2ViR0wyID0gYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3JhcGhpY3ND
b250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsKKyNlbmRpZgorI2lmIFVTRShOSUNPU0lBKQor
ICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcj4o
KnRoaXMpOworI2Vsc2UKKyAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFw
cGVyR0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlzKTsKKyNlbmRpZgorICAgIGJvb2wgc3VjY2VzcyA9
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vz
cyk7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKyAgICBhdHRyaWJ1dGVzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9u
LgorCisgICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpOworICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAgZ2w6Okdl
blRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFy
Z2V0LCBtX3RleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVy
ZVRhcmdldCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgIGdsOjpHZW5GcmFtZWJ1
ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBtX2Zibyk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgZ2w6OkdlblRl
eHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4
dHVyZVRhcmdldCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYo
dGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGds
OjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVy
ZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgZ2w6
OkdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGdsOjpCaW5kVGV4
dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsK
KworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCAwKTsKKyNlbmRpZgorCisgICAg
Ly8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFs
aWFzKSB7CisgICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVu
Y2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgorICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9z
dGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyAgICBnbDo6Q2xlYXJDb2xvcigw
LCAwLCAwLCAwKTsKK30KKworR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQoreworICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVNYW5hZ2VyOjpzaGFyZWRN
YW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAg
IGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJl
KTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRl
eHR1cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CisjZW5kaWYKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkRlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChh
dHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsOjpE
ZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgewor
ICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbDo6RGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKyAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsK
KyNlbmRpZgorfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAogewogI2lmIFVTRShOSUNPU0lB
KQogICAgIHJldHVybiBtX25pY29zaWFMYXllci0+cGxhdGZvcm1EaXNwbGF5KCk7CkBAIC00OSw3
ICsxNDcsNyBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGxhdGZvcm1EaXNwbGF5KCkgY29ucwogI2VuZGlmCiB9CiAKLVBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xDb25maWcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3Jt
Q29uZmlnKCkgY29uc3QKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6cGxhdGZvcm1Db25maWcoKSBjb25zdAogewogI2lmIFVTRShOSUNPU0lB
KQogICAgIHJldHVybiBtX25pY29zaWFMYXllci0+cGxhdGZvcm1Db25maWcoKTsKQEAgLTU4LDcg
KzE1NiwyOCBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0CiAjZW5kaWYKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyNpZiBVU0Uo
TklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgp
OworI2Vsc2UKKyAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1
cygpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2V0Q29udGV4dFZpc2li
aWxpdHkoYm9vbCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
Rm9yRGlzcGxheSgpCit7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFw
ZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKICAgICBjb25zdCBhdXRvIHNpemUgPSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpOwpAQCAtODIsNyArMjAxLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VzKCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCmluZGV4IDEy
MTUwYjFkNTBlNWJjODkzNzRlYWE4MTFlMjMyYjNjYzUwZjMxNTEuLjNiNGI3NTgwMjdmNjk2NGUw
MDllYjJlNTcyMGQ0YTNjMWJjY2VkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3Qy
RC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZh
cyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMR0w6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQg
Y2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6
ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmICghaW1h
Z2VQaXhlbHMgfHwgaW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBjYW52YXNTaXplLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9XZWJDb3JlVGhyZWFkLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9X
ZWJDb3JlVGhyZWFkLm1tCmluZGV4IDk1NDRiNTFjMjc4ZGY1NjllYTRhYjBiZmVmN2VmNzQ0YWM1
MmM3MzUuLjZkNzcwN2Q0MGMzMmYyODQyOWMzZDMyNDUxNWE1Y2M2OTc3NjFiZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KQEAgLTMw
LDcgKzMwLDcgQEAKIAogI2ltcG9ydCAiQ29tbW9uVk0uaCIKICNpbXBvcnQgIkZsb2F0aW5nUG9p
bnRFbnZpcm9ubWVudC5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNp
bXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgogI2ltcG9ydCAiVGhyZWFkR2xvYmFs
RGF0YS5oIgpAQCAtNzcsMTMgKzc3LDEzIEBAIHZvaWQgUmVsZWFzZVdlYlRocmVhZEdsb2JhbFN0
YXRlKCkKICAgICAvLyBJbiBzaW5nbGUtdGhyZWFkZWQgZW52aXJvbm1lbnRzIHdlIGRvIG5vdCBu
ZWVkIHRvIHVuc2V0IHRoZSBjb250ZXh0LCBhcyB0aGVyZSBzaG91bGQgbm90IGJlIGFjY2VzcyBm
cm9tCiAgICAgLy8gbXVsdGlwbGUgdGhyZWFkcy4KICAgICBBU1NFUlQoV2ViVGhyZWFkSXNFbmFi
bGVkKCkpOwotICAgIHVzaW5nIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9y
OworICAgIHVzaW5nIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I7CiAgICAg
Ly8gRm9yIHdlYiB0aHJlYWQsIGp1c3QgcmVsZWFzZSB0aGUgY29udGV4dCBhcyB3ZSBrbm93IHdl
IHdpbGwgc2VlIGNhbGxzIHRvIGl0IGFnYWluLgogICAgIC8vIEZvciBub24td2ViIHRocmVhZHMs
IGUuZy4gdGhpcmQtcGFydHkgY2xpZW50IHRocmVhZHMsIHdlIGRvbid0IGtub3cgaWYgd2UgZXZl
ciBzZWUgYW5vdGhlciBjYWxsIGZyb20gdGhlCiAgICAgLy8gdGhyZWFkLCBzbyB3ZSBhbHNvIHJl
bGVhc2UgdGhlIHRocmVhZCByZXNvdXJjZXMuCiAgICAgUmVsZWFzZVRocmVhZFJlc291cmNlQmVo
YXZpb3IgcmVsZWFzZUJlaGF2aW9yID0KICAgICAgICAgV2ViVGhyZWFkSXNDdXJyZW50KCkgPyBS
ZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6UmVsZWFzZUN1cnJlbnRDb250ZXh0IDogUmVs
ZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZXM7Ci0gICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMo
cmVsZWFzZUJlaGF2aW9yKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpy
ZWxlYXNlVGhyZWFkUmVzb3VyY2VzKHJlbGVhc2VCZWhhdmlvcik7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0wuY3BwCmluZGV4IGFjOTU5NTIwYTJlM2RmYWQ5ZmNkODJiMzkyZjEwYTlhNWE2
MDQ4NDAuLjg0YjJlNjg0NWQwNzQ5Y2RhYTFlNzhiODUzMGQ4ZjhlYTVhMGUwNWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMLmNwcApAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OnBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8
V2ViQ29yCiAgICAgICAgICAgICAvLyBIZXJlIHdlIGRvIG5vdCB0cnkgdG8gcGxheSBiYWNrIHBl
bmRpbmcgY29tbWFuZHMgZm9yIGltYWdlQnVmZmVyLiBDdXJyZW50bHkgdGhpcyBjYWxsIGlzIG9u
bHkgbWFkZSBmb3IgZW1wdHkKICAgICAgICAgICAgIC8vIGltYWdlIGJ1ZmZlcnMgYW5kIHRoZXJl
J3Mgbm8gZ29vZCB3YXkgdG8gYWRkIGRpc3BsYXkgbGlzdHMuCiAgICAgICAgICAgICBpZiAocGl4
ZWxCdWZmZXIpCi0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50
VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMsIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VC
dWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVz
LCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpLmNsZWFyUmVjdCh7IEludFBvaW50KCksIGltYWdlQnVmZmVy
LT5iYWNrZW5kU2l6ZSgpIH0pOwogICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSAiZmx1c2gi
IGltcGxlbWVudGF0aW9uIGluIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgb3ZlcmxvYWRzIG9yZGVy
aW5nIGFuZCBlZmZlY3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNS
ZXF1ZXN0LmNwcAppbmRleCA1YTZjZTY1ZTc0NDdkMjRlMWU3NzM2MGYyZDhjZmU2NGVhODhiMzJh
Li4wZGE3Yjk1ZDE0ZTlhZGZjZGQzNjY5Mzk5MzNkODAwZjAwYmY4ZmIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNv
dXJjZXNSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcApAQCAtMzAsNyArMzAsNyBA
QAogCiAjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCIKICNpbmNsdWRlICJTdHJl
YW1Db25uZWN0aW9uV29ya1F1ZXVlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHRHTC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oPgogI2lu
Y2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KIApAQCAtNTYs
NyArNTYsNyBAQCB2b2lkIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6ZnJl
ZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKCkKICAgICBpZiAoc19yZXF1ZXN0cykKICAgICAgICAg
cmV0dXJuOwogICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlz
cGF0Y2goW10gewotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UmVs
ZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6OlRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNv
dXJjZXMpOworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNl
VGhyZWFkUmVzb3VyY2VzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OlJlbGVhc2VU
aHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2Vz
KTsKICAgICB9KTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445300</attachid>
            <date>2021-11-29 11:06:52 -0800</date>
            <delta_ts>2021-11-29 12:12:46 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211129210649.patch</filename>
            <type>text/plain</type>
            <size>555465</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5hMjc3NmJmMzcwMzNkNDc5NGRjNTk0YTJlNDdlZjNkNmNk
ZmI4ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MDUsNiArMTQwNSw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0FOR0xFSGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGls
aXRpZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4
MDExODYuLjE1ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
N2I2ZDU2MTQ2OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVj
MmQ1MzE4YWIzOTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEz
Niw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvaXNvL0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09WVFRDdWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTky
OTQ5ODk1MjBjMjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVy
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlNGQ5ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJl
ZTAyNmE2YTlkMTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBA
CiAJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAv
KiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAq
LzsgfTsKIAkJN0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRl
eHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYw
OTRERDI3MEM0NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAv
KiBBTkdMRVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJm
b3JtYW5jZUdQVVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFu
Y2VHUFVSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIz
MDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRl
eHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVE
Mjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYw
Q0UgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0No
ZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAy
MTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBH
cmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVG
MjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBB
MThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEw
MzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFB
QyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xDVkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ix
NjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4
MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1
Nyw4IEBACiAJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhD
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCOTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAw
NjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0
QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJ
CTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJ
CQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJ
CQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
ICovLAorCQkJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmggKi8sCiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xF
U2V0dGluZy5jcHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFy
eUFOR0xFU2V0dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3
QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgg
Ki8sCiAJCQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAw
MDA2MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2
OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBA
QAogCQkJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJ
CTdCOEVENUVGMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEw
MzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdC
MTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICov
LAotCQkJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCAqLywKKwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8q
IEltYWdlUm90YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdG
RjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4
MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0
MjYyLDE2IEBACiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4
dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3Jh
cGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3
MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdCOTVDRkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIx
MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAv
KiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4
MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0
MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5
RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGlj
c0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5
MTVmYTVmNzRkYzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2
MzQ1NTlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8g
UmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRh
KEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25l
ZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50
UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGlu
dCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0R0xTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNi
NGQ3ZTljZWUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBH
Q0dMdWludCBib3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVu
aXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4
dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwg
R0NHTGVudW0+LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJh
aXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5k
VGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0K
KyAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91
bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0
dXJlLCBHQ0dMZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0
KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIElu
dEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1
aW50Pj47CisgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYw
ZmI1ZWUxYWMzOTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2
NDBmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNp
bmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dM
QU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
KQorRXh0ZW5zaW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUqIGNvbnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhm
YWxzZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5k
ZXggMGE2MWVmYzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRi
OWY2MTVjM2IzYTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0z
MiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMu
Ci0gICAgZXhwbGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
KTsKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVu
c2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRl
bnNpb25zR0xBTkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4
ICs2NCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRl
bnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAg
Ly8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFj
ayB0byBHcmFwaGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUq
IG1fY29udGV4dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0
aW5nLXBvaW50IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAg
ICBib29sIG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBk
ZmEyYjdhNTA5Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmgiCiAKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJl
c3Npb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFW
Rk9VTkRBVElPTikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBk
ZWZpbml0aW9uIHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAg
LTc2LDggKzcxLDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpCiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEp
CiAgICAgICAgIEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3Jt
Q29uZmlnKCksIEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQor
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBz
d2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyAr
OTksNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2lu
Z1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1Rh
cmdldCkgewogICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZv
ckRyYXdpbmdUYXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJl
aGF2aW9yIHJlbGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNl
QmVoYXZpb3IpCiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAg
LTE2MSw3ICsxNTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xf
UmVsZWFzZVRocmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFp
bnRSZXN1bHRzKCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpA
QCAtMTg3LDE0ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBw
aXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1
dGVzKCkKIHsKICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygp
LmFscGhhID8gR0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11
c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hE
ZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChH
THVpbnQgaW50ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3Bl
ZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAg
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+
IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBnbDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwg
bnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBw
cmVjaXNpb25UeXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lz
aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48
R0NHTGludCwgMj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xl
bnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNo
YWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAg
ICAgICAgIGludGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihn
ZXRFeHRlbnNpb25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZz
ZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQg
eW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0wKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwg
R0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewogICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VT
aXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNl
dCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQg
eW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBH
Q0dMY2xhbXBmIHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGds
OjpEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oekZhcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRo
KEdDR0xjbGFtcGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVw
dGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVw
dGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lv
bnMpCiAgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+
KHRoaXMpOwogICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpy
ZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0
YS5kYXRhLCBmYWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRu
UGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJ
bXBsKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBs
ZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0
YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMs
IEdDR0xzaXplaSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZm
ZXJPYmplY3QpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYK
IH0KIAotLy8gVGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZv
bGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygp
OwogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZv
cm1zIGFyZSBub3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQog
ICAgICAgICByZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFT
U0VSVCghbV9sYXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVS
ZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5i
b3VuZFJlYWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpA
QCAtNTg3LDcgKzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhl
bHNGb3JQYWludFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBt
X2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1
cm47CkBAIC02NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0
dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTY4Miw3ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVU
ZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNT
RVJUKHNoYWRlcik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8K
ICAgICBnbDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC03MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0CiB9CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGds
OjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xj
bGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBn
cmVlbiwgR0NHTGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVu
dW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dM
ZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dM
ZW51bSBtb2RlQWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9
CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShH
Q0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xl
bnVtIGRzdEFscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBh
cmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEs
IEdDR0xlbnVtIGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJH
QgogICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0
ciBzaXplLCBHQ0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRh
dGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xT
cGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdD
R0x2b2lkPiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0
YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciBy
ZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVh
ZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NH
TGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0
aXZSb2J1c3RBTkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXpl
LCBudWxscHRyLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODQ4LDcgKzg0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
IGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgs
IGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRl
ciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAg
Z2w6OlRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6
ZSwgcGl4ZWxzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQq
PihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50
IHhvZmYKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIHBpeGVscy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50
IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4
OTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
aW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+
KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5
MDcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1
YkltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZz
ZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0Qo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBw
bmFtZSkKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVV
bmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4m
IHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4g
cmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpA
QCAtOTI5LDcgKzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwpAQCAtOTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6
OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNs
YW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTk0NSw3ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNv
bG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVh
cihHQ0dMYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05
NjIsNyArOTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KEdDR0xpbnQgcykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdy
ZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwg
R0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNv
bXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEw
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEw
MzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAg
ICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVu
YyhmdW5jKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdD
R0xib29sZWFuIGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhH
Q0dMYm9vbGVhbiBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxh
Zyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAg
QVNTRVJUKHNoYWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMTwogICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAg
IGdsOjpEaXNhYmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODks
NyArMTA4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5
cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBm
aXJzdCwgR0NHTHNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xlCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2Fw
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0NHTHVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50
IGluZGV4KQogICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1
c2goKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExMzksNyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNo
KCkKICAgICBnbDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBs
ZXZlbCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMTU2LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE2NCw3ICsxMTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3Miw3ICsxMTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVN
aXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9W
QUxVRSk7CkBAIC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwg
aW5mbyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1J
bXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDRwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJv
Z3JhbSwgaW5kZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4
Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZv
cm1HTE9iamVjdCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwg
bWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBp
ZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAg
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0
cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJu
IG1vdmVkQW5FcnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEVycm9yKCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsK
ICAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCkBAIC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0xMzA3LDcgKzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0
cmluZyhHQ0dMZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1v
ZGUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTMxNSw3ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2Rl
KTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKICAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0xMzM0LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXAp
OwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZl
cihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQog
ewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEz
NDUsNyArMTMzOSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0Zy
YW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJ
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpA
QCAtMTM1Niw3ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1By
b2dyYW0ocHJvZ3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgcmVuZGVyYnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBy
ZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
QEAgLTEzODksNyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNU
ZXh0dXJlKHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0
aCh3aWR0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQgcGFyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFt
KQogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9h
dCB1bml0cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dM
ZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYg
dmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAs
NyArMTQyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdl
KEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVy
YWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
Y2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0x
NDUxLDcgKzE0NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJT
b3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0g
ZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBt
YXNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE0NTksNyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywg
R0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGlu
dCByZWYsIEdDR0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLAogICAgIGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQ3NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE1hc2soR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0
ZShmYWNlLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdD
R0xlbnVtCiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShm
YWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xm
bG9hdCB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsx
NTAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2
YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyAr
MTUxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbAogICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAg
ICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0y
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsK
ICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAog
ICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2
MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXpl
ICUgMykpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyAr
MTU3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlm
b3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJh
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50
IHYxCiAgICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
IHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bgogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXku
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCwgR0NHTGludCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAzLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xp
bnQgdjIsIEdDR0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBH
Q0dMaW50IHYzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQog
ewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
CiAgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1N
YXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAg
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAg
ICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MTY3NSw3ICsxNjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRl
eEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAg
ICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZgogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxv
YXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBn
bDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgND4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cK
ICAgICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRl
eCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBH
Q0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNp
emUsCiAgICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1h
bGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTc3Myw3ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVy
dGV4QXR0cmliSVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
CiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE3OTQsNyArMTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTgwNiw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0
ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTE4MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGds
OjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4MjgsNyArMTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJv
b2xlYW4+CiAgICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNp
emUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0g
MDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAg
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xF
KHBuYW1lLCB2YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdD
R0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBu
YW1lKQorR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dM
ZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgpCiB7CiAgICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYs
NyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTg5MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBj
b25zdCBTdHJpbmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAg
VU5VU0VEX1BBUkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sCiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogCkBAIC0xOTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmko
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChz
aGFkZXIpOwogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTcz
LDEyICsxOTY3LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVk
SW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxh
dGZvcm1HTE9iamVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAg
IEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTk4Nyw3ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlv
biwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9n
cmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3
ICsyMDE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVp
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5k
YXRhKTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogCkBAIC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAg
IHJldHVybiBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CiB9CiAKLUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQg
aW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5k
ZXgsIEdDR0wKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAg
IHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICBy
ZXR1cm4gbzsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlUHJvZ3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVByb2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVh
dGVQcm9ncmFtKCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
ICAgIHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIw
ODMsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
aGFkZXIoR0NHTGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9
PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURF
Uik7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRleHR1cmUoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVh
dGVUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRl
bGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAg
ICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6
RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVy
KQogICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6
OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2
MSw3ICsyMTU1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LnJlbW92ZUFsbCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQg
dG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRv
CiAgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0
RXJyb3Igd2lsbCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50
aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zm9yY2VDb250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNl
Q29udGV4dExvc3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNw
YXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIy
MjMsNyArMjIxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0
ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIy
Niw3IEBAIEdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJ
bmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3Jt
QmxvY2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yMjUyLDcgKzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTAogCiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0
dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGds
OjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6
OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRRdWVyeU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogCiAvLyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVl
ZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5z
Zm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAg
ICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVk
YmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0
IHRyYW5zZm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xP
YmplY3QgdHJhbnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9y
bUZlZWRiYWNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1G
ZWVkYmFjaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MzM0LDcgKzIzMjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNm
b3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJh
bnNmb3JtRmVlZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1G
ZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2Rl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjM1MCw3ICsyMzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dM
ZW51bSBidWZmZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyhwcm9ncmFtLCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3Mu
ZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0g
MDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAg
Z2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZT
aXplKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBp
bmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsCiAgICAgZ2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNy
Y1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50
IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dM
Yml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNDAzLDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpC
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NH
TGludCBsYXllcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0
dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVM
YXllcih0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0
YXJnZXQsIGF0dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVi
dWZmZXIodGFyZ2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRC
dWZmZXIoR0NHTGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNy
Yyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlclRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIC0xOwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMK
ICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yNDc2LDcgKzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlm
b3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSwgR0NHTHVpbnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
NDg0LDcgKzI0NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3Jt
M3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYw
LCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dQogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gMiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCgh
KGRhdGEuYnVmU2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MjUxOCw3ICsyNTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9y
bTN1aXYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1CiAgICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSA2KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyAr
MjUzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgy
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgz
eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlv
biwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZT
aXplIC8gOCwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xl
YW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAg
ICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJh
bnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQo
IShkYXRhLmJ1ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yNTcyLDcgKzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlm
b3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRh
dGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDEyKSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyAr
MjU3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dM
dWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShp
bmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+
IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyAr
MjU5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0
aXYoaW5kZXgsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQg
eSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwg
R0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4
LCBHQ0dMdQogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMu
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1l
bnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50
IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcK
ICAgICBnbDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3Qg
R0NHTGVudW0+IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6
OkRyYXdCdWZmZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIs
IGRyYXdidWZmZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZh
bHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZm
ZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRo
LCBHQ0dMaW50IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsCiAgICAgZ2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3Rl
bmNpbCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
ICAgICBnbDo6RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJu
IGdsOjpJc1F1ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVl
KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
U2FtcGxlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0
ZVNhbXBsZXIoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAg
ICBnbDo6RGVsZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIp
CiAgICAgcmV0dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcy
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJp
KHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAK
LUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NH
TGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dM
c3luYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9u
LCBHQ0dMYml0ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZp
ZWxkIGZsYQogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQog
Ci1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5
bmMpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMg
c3luYykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMo
c3luYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NH
THN5bmMgc3luYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dM
c3luYyBzeW5jKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xz
eW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywg
R0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4
OSw3ICsyNzgzLDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdh
aXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNs
aWVudFdhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdz
LCBHQ0dMaW50NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5
bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
Nzk3LDcgKzI3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhH
Q0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3lu
YyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBw
bmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1G
ZWVkYmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVl
ZGJhY2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVk
YmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgyMyw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgzMSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6
QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0K
IAotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5p
Zm9ybU5hbWVzKQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRV
bmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB1bmlmb3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBw
YXJhbXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJs
b2NraXZSb2J1c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFt
cy5idWZTaXplLCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xzaXplaSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRp
RHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZp
cnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjg1OSw3ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVs
dGlEcmF3QXJyYXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291
bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJz
dHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBt
b2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBH
Q0dMc2l6ZWkgZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTCiAgICAgZ2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5k
YXRhLCBjb3VudHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
ODgwLDcgKzI4NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdF
bGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURy
YXdFbGVtZW50c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCks
IGRyYXdjb3VudCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9m
ZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3
Y291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjg5Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVs
dGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6
TXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwg
cG9pbnRlcnMuZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQog
ewogICAgIHNpemVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVD
b21wbGV0aW9uRmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKQEAgLTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVs
YXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVk
RXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1
cmUpIHsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29t
cGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVm
ZmVyKSwgaW1hZ2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RG
TW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZl
ci5jb250ZXh0KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAg
ICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRp
cGx5aW5nLCB3aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byBy
ZXN1bHRzID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1
bHRzICYmICFyZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1
bHRzLT5mb3JtYXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0
cy0+Zm9ybWF0KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAg
Ly8gRklYTUU6IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJv
d0J5dGVzIGFuZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXpl
ID0gcmVzdWx0cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6
ZS53aWR0aCgpICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRh
dGEoKTsKKyAgICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAx
KSAqIHJvd1N0cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChu
ZXcgdWludDhfdFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9w
ICs9IHJvd1N0cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5
KHRlbXAuZ2V0KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0
b20sIHRvcCwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCks
IHJvd1N0cmlkZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHNGb3JQYWludGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI0ZWM1YjM0YjdiNGRhNzI4Y2U3YzQ2NGQzNzY1OGE2MDUxZjQ5YTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29z
aWEgeworY2xhc3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBI
b3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNz
IFBpeGVsQnVmZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBo
aWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7Cisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
OworICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGlj
IEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0
KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0
KTsKKyAgICBlbnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAg
ICAgLy8gUmVsZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRl
eHQsCisgICAgICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRl
LiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisg
ICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNh
bXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAg
dm9pZCBwcmVwYXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlv
biB3aXRob3V0IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAg
aW50IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2lu
ZyB0aHJvdWdoIEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdM
T2JqZWN0KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dz
IHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkg
ZmluYWw7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRp
b24oUGxhdGZvcm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkg
ZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCkgZmluYWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVu
ZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUs
IEdDR0xjbGFtcGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51
bSBtb2RlKSBmaW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBt
b2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdD
R0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRG
dW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNy
Y0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAg
dm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEsIEdDR0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEpIGZpbmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVu
dW0gdGFyZ2V0KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4s
IEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVh
ckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdD
R0xpbnQgcykgZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dM
Ym9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFs
OworICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0g
bW9kZSkgZmluYWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7Cisg
ICAgdm9pZCBkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0
aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9p
ZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7
CisgICAgdm9pZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0Fy
cmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFs
OworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxl
KEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lk
IGZsdXNoKCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dM
ZW51bSB0YXJnZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBi
b29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7Cisg
ICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSog
Y291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmli
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAg
ICB2b2lkIGdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4g
dmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZp
bmFsOworICAgIHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxv
YXQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBw
bmFtZSkgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5n
IGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJp
KFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0
U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5h
bDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIFN0cmluZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0
IGdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CisgICAgR0NHTGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7
CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRV
bmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTHVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdD
R0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBt
b2RlKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBm
aW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAg
IEdDR0xib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVh
biBpc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgo
R0NHTGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qp
IGZpbmFsOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pIGZpbmFsOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCByZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUs
IEdDR0xib29sZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAg
IHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFs
OworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1
aW50IG1hc2spIGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7Cisg
ICAgdm9pZCBzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAg
dm9pZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAg
dm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwg
R0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVs
cykgZmluYWw7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
aW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgp
IGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gdikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGludCB4LCBHQ0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2
b2lkIHVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJv
Z3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NH
THVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NH
TGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBH
Q0dMZmxvYXQgeikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHks
IEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmlu
YWw7CisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdD
R0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
c29yKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmlu
YWw7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICBHQ0dMYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZv
aWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVU
YXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NH
THNpemVpcHRyKSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdD
R0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAs
IEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51
bSBmaWx0ZXIpIGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0
ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0
dGFjaG1lbnRzKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7
CisgICAgdm9pZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXpl
aSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5h
bDsKKyAgICB2b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9p
ZCB0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNl
dCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRy
IG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dM
aW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNz
ZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmlu
YWw7CisgICAgR0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZp
bmFsOworICAgIHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3Vp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAg
ICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCB1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwg
R0NHTGludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBH
Q0dMdWludCB6LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2
KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1
aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdi
dWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xm
bG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVF1ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2Jq
ZWN0IHF1ZXJ5KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmpl
Y3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0g
dGFyZ2V0KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0
dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2Ft
cGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlz
U2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNh
bXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAg
ICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRl
cmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBh
cmFtKSBmaW5hbDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRT
YW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
KSBmaW5hbDsKKyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dM
Yml0ZmllbGQgZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykg
ZmluYWw7CisgICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51
bSBjbGllbnRXYWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0
IHRpbWVvdXQpIGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVs
ZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2ko
R0NHTHN5bmMsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1Ry
YW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmlu
ZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkg
ZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2
ZU1vZGUpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAg
ICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lk
IHBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9y
bUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAg
dm9pZCBiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZp
bmFsOworICAgIFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsK
KyAgICBWZWN0b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsK
KyAgICBTdHJpbmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9p
ZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykg
ZmluYWw7CisgICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRl
OworICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBtdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRz
LCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZUJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZm
ZXIoKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsK
KyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdl
dEV4dGVuc2lvbnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsK
KyAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZp
bmFsOworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRl
ZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5kaWYKKyAgICB2b2lkIHByZXBhcmVG
b3JEaXNwbGF5KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGZvcmNlQ29udGV4dExvc3QoKTsKKyAg
ICB2b2lkIHJlY3ljbGVDb250ZXh0KCk7CisgICAgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFJlbmRl
cmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CisKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgIHVuc2ln
bmVkIHRleHR1cmVTZWVkKEdDR0x1aW50IHRleHR1cmUpOworCisgICAgY29uc3RleHByIHN0YXRp
YyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkZWZhdWx0RGlzcGxheSA9IEVHTF9ERUZBVUxUX0RJU1BM
QVk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVE
aXNwbGF5VHlwZSBsb3dQb3dlckRpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlw
ZSwgLTEpOworICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgaGlnaFBl
cmZvcm1hbmNlRGlzcGxheSA9IEVHTF9DQVNUKEVHTE5hdGl2ZURpc3BsYXlUeXBlLCAtMik7Cisj
ZW5kaWYKKworcHJvdGVjdGVkOgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzKTsKKyAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1Ymxp
YyBlbnRyeSBwb2ludHMgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIC8vIENhbGxl
ZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhh
dCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkg
V0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIn
cyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAorICAgIC8vIGluIHBhcnRp
Y3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9y
CisgICAgLy8gY291bGQgbm90IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBv
ZiB0aGUgT3BlbkdMCisgICAgLy8gaW1wbGVtZW50YXRpb24uCisgICAgdm9pZCB2YWxpZGF0ZURl
cHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOworICAg
IHZvaWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAgICB2b2lkIHJlYWRuUGl4ZWxzSW1wbChH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6
ZWkqIGxlbmd0aCwgR0NHTHNpemVpKiBjb2x1bW5zLCBHQ0dMc2l6ZWkqIHJvd3MsIEdDR0x2b2lk
KiBkYXRhLCBib29sIHJlYWRpbmdUb1BpeGVsQnVmZmVyT2JqZWN0KTsKKworICAgIC8vIERpZCB0
aGUgbW9zdCByZWNlbnQgZHJhd2luZyBvcGVyYXRpb24gbGVhdmUgdGhlIEdQVSBpbiBhbiBhY2Nl
cHRhYmxlIHN0YXRlPworICAgIHZvaWQgY2hlY2tHUFVTdGF0dXMoKTsKKworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CisgICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOworCisgICAgYm9v
bCByZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZUlt
cGwoKTsKKyAgICB2b2lkIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50
UmVjdCYgPSBJbnRSZWN0KCkpOworICAgIHZvaWQgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVy
SWZOZWVkZWQoR0NHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisKKyAgICBib29sIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpOwor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGJvb2wgYWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoKTsKKyAgICBib29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKKyAgICBzdGF0aWMgYm9v
bCBtYWtlQ3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSwgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHRHTCk7CisjZW5kaWYKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGNvbnRl
eHQgc2hvdWxkIGJlIGxvc3QgZHVlIHRvIHRpbWVvdXQuCisgICAgYm9vbCB3YWl0QW5kVXBkYXRl
T2xkZXN0RnJhbWUoKSBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICAvLyBQbGF0Zm9ybSBzcGVj
aWZpYyBiZWhhdmlvciBmb3IgcmVsZWFzZVJlc291cmNlcygpOworICAgIHN0YXRpYyB2b2lkIHBs
YXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygpOworCisgICAgR0NHTHVpbnQgbV90ZXh0dXJl
IHsgMCB9OworICAgIEdDR0x1aW50IG1fZmJvIHsgMCB9OworICAgIEdDR0x1aW50IG1fZGVwdGhT
dGVuY2lsQnVmZmVyIHsgMCB9OworICAgIEdDR0x1aW50IG1faW50ZXJuYWxDb2xvckZvcm1hdCB7
IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0IHsgMCB9Owor
ICAgIEdDR0x1aW50IG1fbXVsdGlzYW1wbGVGQk8geyAwIH07CisgICAgR0NHTHVpbnQgbV9tdWx0
aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX211bHRpc2Ft
cGxlQ29sb3JCdWZmZXIgeyAwIH07CisgICAgLy8gRm9yIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjp0
cnVlIHdpdGhvdXQgbXVsdGlzYW1wbGluZy4KKyAgICBHQ0dMdWludCBtX3ByZXNlcnZlRHJhd2lu
Z0J1ZmZlclRleHR1cmUgeyAwIH07CisgICAgLy8gQXR0YWNoZXMgbV90ZXh0dXJlIHdoZW4gbV9w
cmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIGlzIG5vbi16ZXJvLgorICAgIEdDR0x1aW50IG1f
cHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPIHsgMCB9OworICAgIC8vIFF1ZXJpZWQgYXQgZGlzcGxh
eSBzdGFydHVwLgorICAgIEVHTGludCBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0IHsgLTEg
fTsKKyAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCisgICAgTGlz
dEhhc2hTZXQ8R0NHTGVudW0+IG1fc3ludGhldGljRXJyb3JzOworICAgIGJvb2wgbV9pc0Zvcldl
YkdMMiB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV9zdGF0dXNDaGVja0NvdW50IHsgMCB9Owor
ICAgIGJvb2wgbV9mYWlsTmV4dFN0YXR1c0NoZWNrIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdXNl
RmVuY2VTeW5jRm9yRGlzcGxheVJhdGVMaW1pdCA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG1heFBlbmRpbmdGcmFtZXMgPSAzOworICAgIHNpemVfdCBtX29sZGVzdEZyYW1l
Q29tcGxldGlvbkZlbmNlIHsgMCB9OworICAgIFNjb3BlZEdMRmVuY2UgbV9mcmFtZUNvbXBsZXRp
b25GZW5jZXNbbWF4UGVuZGluZ0ZyYW1lc107CisgICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBt
X3N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xBTkdMRT4gbV9leHRlbnNp
b25zOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZh
Y2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47CisgICAgRUdMRGlzcGxheSBtX2Rpc3BsYXlPYmogeyBu
dWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmogeyBu
dWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBtX2NvbmZpZ09i
aiB7IG51bGxwdHIgfTsKKyAgICAvLyBCYWNraW5nIHN0b3JlIGZvciB0aGUgdGhlIGJ1ZmZlciB3
aGljaCBpcyBldmVudHVhbGx5IHVzZWQgZm9yIGRpc3BsYXkuCisgICAgLy8gV2hlbiBwcmVzZXJ2
ZURyYXdpbmdCdWZmZXIgPT0gZmFsc2UsIHRoaXMgaXMgdGhlIGRyYXdpbmcgYnVmZmVyIGJhY2tp
bmcgc3RvcmUuCisgICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gdHJ1ZSwgdGhp
cyBpcyBibGl0dGVkIHRvIGR1cmluZyBkaXNwbGF5IHByZXBhcmUuCisgICAgc3RkOjp1bmlxdWVf
cHRyPElPU3VyZmFjZT4gbV9kaXNwbGF5QnVmZmVyQmFja2luZzsKKyAgICB2b2lkKiBtX2Rpc3Bs
YXlCdWZmZXJQYnVmZmVyIHsgbnVsbHB0ciB9OworI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIGJvb2wgbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbiB7IGZhbHNlIH07
CisgICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdCBtX2hpZ2hQZXJmb3JtYW5jZUdQ
VVJlcXVlc3Q7CisjZW5kaWYKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgR0NH
THVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybWVk
aWF0ZVRleHR1cmUgeyAwIH07CisjZW5kaWYKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Tmljb3NpYTo6R0NHTExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbGlmIFVTRShU
RVhUVVJFX01BUFBFUikKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyPiBtX3RleG1hcExheWVyOworI2VuZGlmCisKKyAgICBmcmllbmQgY2xhc3MgRXh0
ZW5zaW9uc0dMQU5HTEU7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgZnJpZW5kIGNsYXNzIE5pY29z
aWE6OkdDR0xMYXllcjsKKyNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBmcmllbmQgY2xh
c3MgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCit9OworCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAppbmRleCBjY2NiNTcyNGE0Y2Q5
MmZmMGJmOGU3MzgzYzVkOWZlNjg5ZDc3Yjg2Li40ZDU5Y2IxMmM1ZTQ0NzUzN2RlMGFlZTIxMGRl
MDAyY2JkNzlmZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcApAQCAtMTA2
LDcgKzEwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFj
dEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxC
dWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhj
b25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVz
LCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXpl
KCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFzU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENH
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dEdMQ0cuY3BwCmluZGV4IGY3OWYyMmUzMTNlYTExNzM4OWM1ZjQwOWRkMGY0OTRhZTE1YWViOTMu
LmFmNGMxN2Q1MWZhNTlmNDY4OGRmNDM5NjUzNTE4ZjVjYTBkYWFmMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dEdMQ0cuY3BwCkBAIC01MDYsNyArNTA2LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTEltYWdl
RXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRU
b0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRB
dHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRTaXplJiBjYW52
YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
OjpwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNl
Q29udGV4dEF0dHJpYnV0ZXMsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNp
emUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQo
IXBpeGVsQnVmZmVyLnNpemUoKS5pc0VtcHR5KCkpOwogICAgIGlmIChjYW52YXNTaXplLmlzRW1w
dHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaAppbmRleCAyNTU1ZmYwODMyOGUzNDY5
Y2Q3YTRhMjk3ZGJlZjc5MGY2MzA1Mjg4Li43ZWNmZGQxNmI4MTBlZDJkOGFmMjI5ZjU2YmI1ZTRh
ZGJjYjdkNzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCkBAIC0yNywxMiArMjcs
MTggQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgogI2luY2x1ZGUg
IklPU3VyZmFjZS5oIgogCisjaWYgRU5BQkxFKFZJREVPKQorbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6
IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBH
cmFwaGljc0NvbnRleHRHTENvY29hIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xDb2NvYT4gY3JlYXRl
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsKICAgICB+R3JhcGhpY3ND
b250ZXh0R0xDb2NvYSgpOwpAQCAtNDksMTQgKzU1LDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIGRl
dGFjaElPU3VyZmFjZUZyb21TaGFyZWRUZXh0dXJlKHZvaWQqIGhhbmRsZSk7CiAjZW5kaWYKIAot
ICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIG92ZXJyaWRlcy4KKyAgICAvLyBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFIG92ZXJyaWRlcy4KKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGJvb2wgY29weVRl
eHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5ZXImLCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29s
IGZsaXBZKSBmaW5hbDsKICNlbmRpZgorI2lmIEVOQUJMRShWSURFTykKKyAgICBHcmFwaGljc0Nv
bnRleHRHTENWKiBhc0NWKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBo
aWNzQ29udGV4dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYp
OwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3
MmM3N2VjYjIxOWUzOS4uZmFmMWRhOTdkN2M0ZDZhMDNmZmYxYjVkNWMzNmRlZGNlY2IzMGFhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5k
aWYKIAogI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxh
dGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJs
ZSgpID09IHRydWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJl
YWRlZCBtYW5uZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxz
ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1
dCBhbHdheXMgc2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIg
YW5kIG51bGxwdHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUqIGN1cnJlbnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGlj
dGFibGUoKQogewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxp
emVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAg
ICAgfQogCiAgICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNr
ZW5kLiIsIGF0dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRp
dmVEaXNwbGF5VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
ZmF1bHREaXNwbGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNl
TWV0YWwpIHsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9Q
TEFURk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0
YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAg
ICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0Vf
QU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9X
RVJfQU5HTEUpOwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpsb3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYg
KHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJl
ZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRl
cy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxh
eUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5h
dGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlz
cGxheTsKKyAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpoaWdoUGVyZm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFw
aGljc0NvbnRleHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xB
TkdMRShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVu
Y3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29h
IHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJz
KQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRy
cykKIHsKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVu
c2lvbik7CiAgICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0g
ICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRo
cm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkg
b24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3Rz
IGFyZSBub3Qgc2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVy
cywgc28KICAgICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0
bGluZy4gT3BlbkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21l
IHNvcnQgb2YgaW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAot
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIs
IHRoaXMpOworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
ICglcCkuIiwgdGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVu
dCgpKSB7CkBAIC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAh
PSB0aGlzKTsKICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9H
KFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlz
KTsKKyAgICBMT0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICgl
cCkuIiwgdGhpcyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgp
IGNvbnN0CkBAIC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6
OmlzVmFsaWQoKSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRm
b3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXND
aGVjaykgewogICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0
ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRT
dGF0dXMgPSAwOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0
VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIGlmICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUy
MCw3ICs1MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIGlmIChtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcg
KzUyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQoKQogICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5n
KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNr
aW5nKCkKIHsKICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0
eSgpKTsKICAgICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxs
b2NhdGluZyBhIG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVz
c3VyZS4KQEAgLTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAg
ICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBh
dXRvIGJhY2tpbmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoKQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShi
YWNraW5nKSwgcGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5n
LCB2b2lkKiBwYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCog
cGJ1ZmZlcikKIHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJp
bmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4
dHVyZVRhcmdldCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNU
QU5HTEVfQVJCKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtl
Q3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VS
RkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNo
bWVudFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwg
R0NHTHVpbnQgcGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewog
ICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19j
YXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2
NywyNCArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZh
Y2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1faXNGb3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNp
bXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsK
LSAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdl
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdl
cigpLmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJl
KSB7Ci0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JE
aXNwbGF5KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXko
KQogewogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0
LDE1ICs3MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRp
c3BsYXkoKQogCiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGlj
c0NvbnRleHRHTENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1f
Y3YuZ2V0KCk7CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHMoKQogewogICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVm
ZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIu
aGFuZGxlKQpAQCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxN
ZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvTWVkaWFTYW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFp
bi5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRp
c3BsYXlCdWZmZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZv
cm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3Jt
RwogfQogI2VuZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZp
ZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdP
Ymo7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxF
KFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRl
ICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSA8cGFsL3NwaS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi9TY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNp
bmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0
dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNp
emU7IgotICAgICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBp
bnQgdV9mbGlwWTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4o
KSIKLSAgICAieyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAx
LjApOyIKLSAgICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41
ICsgLjU7IgotICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFs
aXplZFBvc2l0aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2
X3lUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2
VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19Owot
Ci1zdGF0aWMgY29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
IHsKLSAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1
X3lUZXh0dXJlU2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29y
ZGluYXRlOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAg
InZvaWQgbWFpbigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9z
aXRpb24sIDAsIDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bv
c2l0aW9uICogLjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAg
ICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIK
LSAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95
VGV4dHVyZVNpemU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXpl
ZFBvc2l0aW9uICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHBy
IGF1dG8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVu
aWZvcm0gc2FtcGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JN
YXRyaXg7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2
YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0g
ICAgInsiCi0gICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1
X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0
ZXh0dXJlMkQodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIg
ICAgeXV2LmEgPSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1h
dHJpeDsiCi0gICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdt
ZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3Jt
IHNhbXBsZXIyRFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1h
dHJpeDsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZh
cnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAg
ICAieyIKLSAgICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVj
dCh1X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2Ig
PSB0ZXh0dXJlMkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIK
LSAgICAiICAgIHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVf
Y29sb3JNYXRyaXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2Ugewot
ICAgIFVua25vd24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJh
bnNmZXJGdW5jdGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBr
SVRVX1JfNjAxXzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQ
M19ENjUsCi0gICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJh
bmdlRnJvbVBpeGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBp
eGVsRm9ybWF0KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4Ogot
ICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhB
VkUoQ09SRVZJREVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlm
Ci0gICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
X0FSR0IyMTAxMDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBD
YkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZ
cENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0
NFlwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NF
RF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxS
YW5nZTo6RnVsbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5r
bm93bjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5j
dGlvbkZyb21TdHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQot
ICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAg
ICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENG
RXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkp
Ci0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0g
ICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1Az
KCkgJiYgQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkK
LSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2Fu
TG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVW
aWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0
cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0
dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVy
RnVuY3Rpb25DVjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAg
ICAgR0xmbG9hdCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxv
YXQgY2I7Ci0gICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07
Ci0KLSAgICBjb25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZs
b2F0IGIpCi0gICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkK
LSAgICAgICAgOiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAg
IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xm
bG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0K
LX07Ci0KLXN0cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBibGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRD
b2xvciB3aGl0ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xv
ciByZWQgICAgIHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBn
cmVlbiAgIHswLCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVl
ICAgIHswLCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAg
IHswLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsx
LCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAx
LCAwfTsKLX07Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0
XVs0XTsKLQotICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNi
Q29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25z
dCBHTGZsb2F0KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0g
ICAgfQotCi0gICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9h
dENvbG9yJikgY29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4
KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZm
aWNpZW50KQotICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlD
YkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiAr
IEtnICogRyArIEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0g
ICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFs
dWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlz
IGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0
aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6
Ci0gICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAq
ICgxIC0gS2IpKSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtn
KSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8g
V2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBb
MTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEg
cmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZh
bHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFu
Z2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2Vm
ZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0
IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5m
IC8gMjE5LmY7Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVs
UmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlT
Y2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNy
U2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10g
PSAwOwotCi0gICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0g
PSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZm
aWNpZW50IC8gY2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZm
aWNpZW50KTsKLSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGlu
Z0ZhY3RvcjsKLSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBj
YkNvZWZmaWNpZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsK
LQotICAgIHJvd3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11b
Ml0gPSAwOwotICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5h
bCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4
XQotICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0
byBbMTYsIDI0MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7
ICsrcm93TnVtYmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAg
ICAgICAgYXV0byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAg
ICAgYXV0byYgeiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAg
ICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJh
bmdlOjpWaWRlbykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQot
Y29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxv
YXRDb2xvciYgY29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAg
ICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsg
cm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVsw
XSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAq
IGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJn
Yi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5i
ICsgcm93c1syXVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRv
UkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRy
YW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9
IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1h
dHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20g
dGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAg
Ly8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0
YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4x
MTRmLCAwLjI5OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxs
TWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAx
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwg
MCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
eWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRy
aWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2
IDIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJU
LjcwOS0yLTE5OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5Vmlk
ZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25z
dGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVs
bCwgMC4wNzIyLCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwg
MjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAg
IDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQs
IDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRh
LCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFn
ZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBm
dWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTks
ICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAg
ICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIu
NzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRo
ZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8v
IGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAu
MDU5MywgMC4yNjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAx
MjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxh
Y2sgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIw
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVu
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMx
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2Vu
dGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwg
MCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0g
ICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01Q
VEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVl
Lm9yZy9kb2N1bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXgg
c21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07
Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQw
TVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNN
UFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0
MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVs
bG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNv
bG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRl
MjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwg
IDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJl
ZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJT
TVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAx
LCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpj
eWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsK
LSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8s
IFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAg
ICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJh
bnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAg
IG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1h
dHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVu
Y3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlv
bkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMu
Z2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNW
OjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQo
KS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjpr
U01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQot
ICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQg
d2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxS
YW5nZTo6VW5rbm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0g
ICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBt
YXRyaWNlcy5nZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8g
QXNzdW1lIHVua25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRl
cmF0b3IgPT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmlj
ZXMuZ2V0KCkuZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7
Ci0KLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJl
dHVybiBpdGVyYXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4
dCkgfTsKLSAgICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rl
c3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFOjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmIG93bmVyKQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0
aWJsZSBjb250ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBk
b2VzIG5vdAotICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5Lgot
ICAgIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09O
VEVYVF9DTElFTlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAy
LAotICAgICAgICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUs
Ci0gICAgICAgIEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19F
TkFCTEVEX0FOR0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJ
TkRfR0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAg
ICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0
Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25m
aWcoKTsKLSAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5
LCBjb25maWcsIG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlm
IChjb250ZXh0ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAg
YXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRl
eHQpOwotICAgIH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQp
IHsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9y
ZWN0YW5nbGUiKTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3Rl
eHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBH
TF9OT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdM
aW50IHZlcnRleFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0g
ICAgR0xpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUik7Ci0gICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAg
IGF1dG8gcHJvZ3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyLCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4
U2hhZGVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAg
ICAgIGdsOjpEZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNl
IGFyZSB3cml0dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQg
dnNMZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5n
dGgoKSA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBH
TGludCBmc0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
MkQubGVuZ3RoKCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgo
KTsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBz
X3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUy
RCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4
dHVyZVJlY3RhbmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAm
dmVydGV4U2hhZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJh
Z21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBn
bDo6Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNo
YWRlcik7Ci0gICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2w6OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlz
IGNoZWNrZWQgYWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24g
YmVuZWZpdC4KLQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5C
dWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVs
ZXRlQnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0
aWNlc1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsK
LSAgICBnbDo6QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0
aWNlcywgR0xfU1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAg
ICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1
ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGlu
dCBzdGF0dXMgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFt
LCBHTF9MSU5LX1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMp
IHsKLSAgICAgICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZS
b2J1c3RBTkdMRSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAm
dnNTdGF0dXMpOwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRT
aGFkZXJpdlJvYnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwg
bnVsbHB0ciwgJmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFKCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIs
IHRoaXMsIHN0YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjb250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xl
YW51cC5yZWxlYXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBt
X2Rpc3BsYXkgPSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25m
aWcgPSBjb25maWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0g
ICAgbV9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7
Ci0gICAgbV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9u
KHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4
Iik7Ci0gICAgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRp
b24oeXV2UHJvZ3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2Nh
dGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXpl
Iik7Ci0gICAgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1M
b2NhdGlvbih5dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlv
bkF0dHJpYnV0ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJh
X3Bvc2l0aW9uIik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdo
aWxlIHRoZSBwcm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0o
eXV2UHJvZ3JhbSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRp
b25BdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQ
b3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAg
IGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2Us
IFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQy
MGYnIHBpeGVsIGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3Jt
YXRzLgotICAgIE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1h
dFR5cGUoaW1hZ2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVf
NDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShD
T1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVs
Rm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9S
YW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZv
cm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJl
ZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFz
dXJmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVk
ID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0Rmxp
cFkKLSAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1
cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7
Ci0gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRo
ZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhp
cyBpcyBhIG5vLW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2Nv
bnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXks
IG1fY29udGV4dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9
IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4
ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmlu
aXRpYWxpemVkIGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAv
LyBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xf
VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUs
IG51bGxwdHIpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0g
ICAgfSk7Ci0gICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0g
ICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBn
bDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0
YXR1cyA9IGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBp
ZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1
cmUuIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0
ZXh0dXJlcyBmb3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9T
dXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0
ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxh
bmVXaWR0aCA9IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRv
IHV2UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwot
Ci0gICAgR0xlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5U
ZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtl
U2NvcGVFeGl0KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1
dlRleHR1cmUpOwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsK
LSAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3Jl
OjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZp
ZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1
dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEp
OwotICAgIGlmICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2
SGFuZGxlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFu
ZGxlXSB7Ci0gICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNl
KGRpc3BsYXksIHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7
Ci0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNs
ZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4
dHVyZXMoMSwgJnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9
IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2Nv
bmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwg
R0xfUkVELCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJm
YWNlLCAwKTsKLSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBh
dXRvIHlIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwg
eUhhbmRsZV0gewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNw
bGF5LCB5SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBw
YXJhbWV0ZXJzLgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwg
MCk7Ci0gICAgZ2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0g
ICAgZ2w6OlVuaWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlw
WTo6WWVzID8gMSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYo
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWln
aHQpOwotCi0gICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxG
b3JtYXQpOwotICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9t
U3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50
KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBj
b2xvck1hdHJpeCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24o
cmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29s
b3JNYXRyaXhVbmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAg
ICAvLyBEbyB0aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5H
TEVTLCAwLCA2KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1
cmZhY2VTZWVkID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91
dHB1dFRleHR1cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1f
bGFzdEZsaXBZID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
QU5HTEUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQz
MDFmMTI1MWI3MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5o
IgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0v
LyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9m
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBp
bnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5H
TEUgQ29jb2EuCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUo
Q1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBGbGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4
dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RU
ZXh0dXJlU2VlZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmIG1fb3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9k
aXNwbGF5IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9j
b25maWcgeyBudWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIg
eyAwIH07Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAg
ICBHQ0dMaW50IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQg
bV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlw
WVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2Nh
dGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7
IC0xIH07Ci0gICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9
OwotCi0gICAgRmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2lu
dGVyPElPU3VyZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJm
YWNlU2VlZCB7IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dM
dWludCwgdW5zaWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVy
ZVNlZWQ7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBo
aWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJ
T04pCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckND
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVy
ZTJEIHsKKyAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVj
MiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7Igor
ICAgICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVD
b29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZvaWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFf
cG9zaXRpb24sIDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBh
X3Bvc2l0aW9uICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAi
ICAgICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55
OyIKKyAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIK
KyAgICAiICAgIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisg
ICAgIn0iX3MKK307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRl
eHR1cmVSZWN0YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAi
dW5pZm9ybSB2ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIg
dl95VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29y
ZGluYXRlOyIKKyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlv
biA9IHZlYzQoYV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQ
b3NpdGlvbiA9IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09
IDEpIgorICAgICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXpl
ZFBvc2l0aW9uLnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVk
UG9zaXRpb24gKiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5h
dGUgPSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9
OworCitjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0
dXJlOyIKKyAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3Jt
IG1hdDQgdV9jb2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRp
bmF0ZTsiCisgICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2
b2lkIG1haW4oKSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5y
ID0gdGV4dHVyZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAi
ICAgIHl1di5nYiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRl
KS5yZzsiCisgICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5
dXYgKiB1X2NvbG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBh
dXRvIHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsi
CisgICAgInVuaWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0g
bWF0NCB1X2NvbG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGlu
YXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZv
aWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIg
PSB0ZXh0dXJlMkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAg
ICAiICAgIHl1di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29v
cmRpbmF0ZSkucmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0Nv
bG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3Mg
UGl4ZWxSYW5nZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKwor
ZW51bSBjbGFzcyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9S
XzcwOV8yLAorICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtE
Q0lfUDMsCisgICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhl
bFJhbmdlIHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQorewor
ICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
NDQ0QVlwQ2JDcjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoK
KyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAg
IGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisg
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFu
Z2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVv
UmFuZ2U6CisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMp
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVv
UmFuZ2U6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVW
SURFT19DT01QUkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25D
ViB0cmFuc2ZlckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAg
aWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247
CisgICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9S
XzcwOV8yKSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8y
OworICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVf
Ul82MDFfNCkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFf
NDsKKyAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01Q
VEVfMjQwTV8xOTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRF
XzI0ME1fMTk5NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9EQ0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1h
dHJpeF9EQ0lfUDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1Az
OworICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1Az
X0Q2NSgpICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2
NSkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYg
KGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgp
ICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAp
KQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENv
bG9yIHsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0
IHI7CisgICAgICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAg
ICAgIH0gcmdiOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAg
ICAgICAgICAgR0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0g
eWNiY3I7CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBH
TGZsb2F0IGcsIEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7Cisg
ICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBH
TGZsb2F0IHNjYWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8g
c2NhbGUgfQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJz
KEdMZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVl
IDogLXZhbHVlOworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVx
dWFsVG8oY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4
RGVsdGEpOworICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25z
dGV4cHIgR0xmbG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHTGZsb2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR0xmbG9hdENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JN
YXRyaXggeworICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1h
dHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmlj
aWVudCk7CisKKyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRD
b2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4
cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JD
b2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAg
ICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhl
IGZvcm06CisgICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0g
KEIgLSBZKSAvICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAt
IEtyKSkKKyAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBp
biBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0g
MQorICAgIC8vCisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBh
bmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3Ip
KSAqIENyCisgICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkg
LSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3Ig
LyBLZykgKiBDcgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRl
byByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwg
YW5kIENiICYgQ3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0
aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFu
ZCBDciBhbGwgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9m
IDI1Ni4KKworICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0g
Y3JDb2VmZmljaWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4
ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2Nh
bGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIy
NC5mOworCisgICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0g
PSAwOworICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29l
ZmZpY2llbnQpOworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2Fs
aW5nRmFjdG9yOworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEg
LSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAg
cm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
ICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsK
KworICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2Jj
clNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJd
ID0gMDsKKyAgICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJv
d3NbM11bMV0gPSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOwor
CisgICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252
ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2Yg
dmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJv
d051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8m
IHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAg
ICAgYXV0byYgeSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAg
YXV0byYgdyA9IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Cisg
ICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0g
eCAqIDE2IC8gMjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1h
dHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEdMZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsg
cm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93
c1swXVszXSwKKyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAq
IGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAg
ICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5n
ICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0
YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1
bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0
aW9uKQoreworICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0
IFlDYkNyTWF0cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBt
YXRyaWNlczsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8v
IE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYw
MSByZXYgNCBzcGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1S
RUMtQlQuNjAxCisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRy
aXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIg
c3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4x
MTRmLCAwLjI5OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1
LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
ci42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUw
LCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fz
c2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1
LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAx
NzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFu
LCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21w
b25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBz
Oi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywg
MC4wNzIyLCAwLjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEu
NWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChy
NzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDEx
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAx
LjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisK
KyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNr
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJs
YWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41
ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIz
NywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBH
TGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBN
YXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4y
MDIwLTIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVD
LUJULjIwMjAKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0
cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwg
MC4wNTkzLCAwLjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4
ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQs
ICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpy
ZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAx
NiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxs
b3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsK
KworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwg
ICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAx
MSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAv
IDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgY3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJv
bSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAg
ICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNv
bnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJh
bmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1h
dHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEy
IH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYy
LCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAx
MTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Ymx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICog
R0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRh
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
Ojp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3Jl
ZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21w
dGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3
NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUg
MjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRp
c3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFj
ZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYw
MV80KSwgcjYwMVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShN
YXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQp
LCByNjAxRnVsbE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5
KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3
MDlWaWRlb01hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBp
eGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1
bGxNYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVv
TWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5n
ZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRy
aXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpW
aWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlk
ZW9NYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0
ME1GdWxsTWF0cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tl
ZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4K
KyAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdl
ID09IFBpeGVsUmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVs
bDsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5j
dGlvbnMgYXJlIHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQo
KSkKKyAgICAgICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1hdHJpY2VzLmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBH
cmFwaGljc0NvbnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRl
eHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBp
ZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9k
aXNwbGF5LCBtX2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJm1feXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZtX2ZyYW1lYnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2Nv
bnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYShHcmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3du
ZXIpCit7CisgICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0
ZSB3aXRoIG93bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5l
c3Mgb3IgV2ViR0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAg
IG93bmVyLm1faXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdM
X0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAg
IEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZB
TFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlV
TSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdM
RGlzcGxheSBkaXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmln
IGNvbmZpZyA9IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0
ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmos
IGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50
KGRpc3BsYXksIGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6bWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVz
dHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29s
IHVzZVRleHR1cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBH
TF9URVhUVVJFXzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlT
VCkKKyAgICBpZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVz
dEV4dGVuc2lvbkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAg
ICAgaWYgKGdsOjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNo
YWRlcihHTF9WRVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpD
cmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9
IGdsOjpDcmVhdGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAg
ICAgZ2w6OkRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgfSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJl
IGNvbXBpbGUtdGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
VmVydGV4U2hhZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8g
c195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRl
clNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195
dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUy
RCA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRl
clNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7
CisgICAgZ2w6OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVy
U291cmNlLCAmZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7
CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hT
aGFkZXIoeXV2UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1
dlByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgLy8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0
aWNhbCBwYXJhbGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRl
eEJ1ZmZlciA9IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7Cisg
ICAgYXV0byB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4
QnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIp
OworICAgIH0pOworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwg
MSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgeXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZG
RVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBH
THVpbnQgZnJhbWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1l
YnVmZmVyKTsKKyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Zy
YW1lYnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVm
ZmVyKTsKKyAgICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dy
YW1pdlJvYnVzdEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAm
c3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7
CisgICAgICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09N
UElMRV9TVEFUVVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3Rh
dHVzID0gMDsKKyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFk
ZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFp
bGVkIHRvIGxpbms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0
dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2Uo
KTsKKyAgICB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZl
ckNsZWFudXAucmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250
ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1
ZmZlciA9IHl1dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7
CisgICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7Cisg
ICAgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0
aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAg
IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVy
ZVNpemUiKTsKKyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0
cmliTG9jYXRpb24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlz
IGRlbGV0ZWQgYnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGlu
IHVzZS4KKyAgICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6
VmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdM
X0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1
cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJl
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgRmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9u
bHkgc3VwcG9ydHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUg
c3VwcG9ydGluZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0g
Q1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9y
bWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8v
IE5PTElOVAorICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9Q
SVhFTF9GT1JNQVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhl
bEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxS
YW5nZQorI2VuZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBB
c2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywg
Rm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1
ZmZlckdldElPU3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChz
dXJmYWNlKTsKKyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFj
ZSA9PSBtX2xhc3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1
cmZhY2VTZWVkCisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBt
X293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0
ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVk
IHRvIGl0LCBhbmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNp
bmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRo
KGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFn
ZSk7CisKKyAgICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBU
aGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBl
YXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVy
cm9yIGlzIG5vdCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFr
ZVNjb3BlRXhpdChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQs
IHR5cGVdIHsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRl
eHR1cmUpOworICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGds
OjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0
ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUy
RChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91
dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRv
IGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCk7CisKKyAgICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8g
c291cmNlLgorICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUo
c3VyZmFjZSwgMCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRP
ZlBsYW5lKHN1cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3Vy
ZmFjZUdldEhlaWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0
dXJlVGFyZ2V0ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAg
R0x1aW50IHV2VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OworICAgIGF1dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0g
eworICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7Cisg
ICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2
aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRh
Y2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xf
SU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhl
aWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNj
b3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29y
ZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOwor
ICAgIH0pOworCisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMo
MSwgJnlUZXh0dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQo
W3lUZXh0dXJlXSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOwor
ICAgIH0pOworICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6Qmlu
ZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZl
ckFuZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJn
ZXQsIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5
UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhh
bmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRl
c3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0p
OworCisgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVu
aWZvcm0xaShtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFp
KG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2
RmxpcFlVbmlmb3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAg
Z2w6OlVuaWZvcm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgs
IHlQbGFuZUhlaWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdl
ID0gcGl4ZWxSYW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFu
c2ZlckZ1bmN0aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0
PENGU3RyaW5nUmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JH
Qk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlv
bik7CisgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biwgMSwgR0xfRkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJh
d2luZy4KKyAgICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9s
YXN0U3VyZmFjZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNl
U2VlZDsKKyAgICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50
ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAg
ICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0
ZTM5NjBiNmQ3MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx3dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHcmFwaGljc0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxl
bWVudGF0aW9uIGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBw
YXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENv
Y29hLgorY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZD
b2NvYSgpIGZpbmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBGbGlwWSkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
KEdyYXBoaWNzQ29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2Vl
ZChHQ0dMdWludCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVT
ZWVkLmdldCh0ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBt
X293bmVyOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7
IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51
bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsg
bnVsbHB0ciB9OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9Owor
ICAgIFBsYXRmb3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGlu
dCBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3Jt
TG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biB7IC0xIH07CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAt
MSB9OworICAgIEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9Owor
ICAgIEdDR0xpbnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAg
IEZsaXBZIG1fbGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1
cmZhY2VSZWY+IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQg
eyAwIH07CisKKyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVu
c2lnbmVkLCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOwor
fTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCmlu
ZGV4IGI4MzJhMTg2YTQyYzhiZTMyMmE0YzcwODFmNzVkY2Q0OTBjMjdmODguLjNmZDc0YmUyMDlh
MTNjNTAxNmVmNTU3ZTIxYWI3YzU5ZmQ0OGNhZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwyMiArMjMsMjg2
MyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBF
TkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIK
KyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKLSNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0
dGluZy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgorI2luY2x1ZGUgPGNzdHJpbmc+
CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFy
cmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZiBVU0UoT1BF
TkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1
ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNpZiBVU0UoTElCRVBPWFkpCisj
aW5jbHVkZSAiRXBveHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJP
cGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKKyNp
bmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
c3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlcigpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwor
ICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWROYW1lSGFz
aDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBzaGFyZWROYW1l
SGFzaCA9IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OworICAgIH0pOworCisg
ICAgcmV0dXJuICpzaGFyZWROYW1lSGFzaDsKK30KKworc3RhdGljIHZvaWQgc2V0Q3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkKK3sKKyAg
ICAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFzaDsKK30K
KworLy8gSGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2NvbXBpbGVy
IHRvIGRvCisvLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBt
ZXRob2QsIGJlZm9yZQorLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXIKKy8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0aGUgY3Vy
cmVudCBpbnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KKworc3RhdGljIHVpbnQ2
NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmluZyBuYW1l
QXNDU3RyaW5nID0gQ1N0cmluZyhuYW1lKTsKKworICAgIC8vIExvb2sgdXAgbmFtZSBpbiBvdXIg
bG9jYWwgbWFwLgorICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyID0gKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOworICAgIFNoYWRlck5hbWVI
YXNoOjppdGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5m
aW5kKG5hbWVBc0NTdHJpbmcpOworICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlci0+ZW5kKCkpCisgICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZTsK
KworICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOworCisgICAg
Ly8gQ29udmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8gYSA2NC1i
aXQgcmVzdWx0CisgICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUgb2Ygb3Vy
IHRhYmxlLiBPdmVyZmxvdyB3b3VsZAorICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlmIHdlJ3Jl
IGFscmVhZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCisgICAgLy8gd2UncmUgaG9w
aW5nIHRoYXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKKyAgICAvLyBkb24n
dCBoYXZlIHRoYXQgbWFueSBzeW1ib2xzKS4KKworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGhhc2hW
YWx1ZTsKKyAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXItPnNpemUoKSArIDEpOworCisgICAgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVy
LT5zZXQobmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBj
aGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCit7CisgICAgYXV0byBhdHRycyA9IGNv
bnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIGV4dGVu
c2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAg
ICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkg
eworICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNp
bEV4dGVuc2lvbik7CisgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRy
dWUuCisgICAgICAgICAgICBhdHRycy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZhbHNlOworICAgICAgICBzZXRDb250ZXh0QXR0cmli
dXRlcyhhdHRycyk7CisgICAgfQorICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1faXNGb3JX
ZWJHTDIpIHsKKyAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7CisgICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBm
YWxzZTsKKyAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCit7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKworI2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgVGVt
cG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFM
U0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwg
R0xfRkFMU0UpOworI2VuZGlmCisKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxp
YXMpCisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2NvbXBv
c2l0b3JUZXh0dXJlKTsKKyAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVkaWF0ZVRl
eHR1cmUpOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsK
KyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAg
Z2xGbHVzaCgpOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKKyAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgZWxzZQorICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
IHJldHVybjsKKyNlbmRpZgorCisgICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwor
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3N0YXRlLmJvdW5kVGFyZ2V0KEdM
X1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUoR0xfVEVY
VFVSRTApIDogMCk7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJl
VW5pdCk7CisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmRE
cmF3RkJPKTsKKyAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBt
X3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgOjpnbEZsdXNoKCk7Cit9CisKK3N0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVz
dWx0cygpCit7CisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChjb250
ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGlu
Z0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0g
dHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8g
PT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdG
Qk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX2Zibyk7CisgICAgICAgIH0KKyAgICB9CisgICAgYXV0byByZXN1bHQgPSByZWFkUGl4
ZWxzRm9yUGFpbnRSZXN1bHRzKCk7CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9z
dGF0ZS5ib3VuZERyYXdGQk8pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAg
IGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0g
MCk7CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKKworICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CisgICAg
bV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OworCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisK
KyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNU
LCBHTF9GQUxTRSk7CisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xf
RElUSEVSLCBHTF9GQUxTRSk7CisgICAgCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHJlc2hh
cGVGQk9zKEludFNpemUod2lkdGgsIGhlaWdodCkpOworCisgICAgLy8gSW5pdGlhbGl6ZSByZW5k
ZXJidWZmZXJzIHRvIDAuCisgICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7IDAsIDAsIDAsIDAg
fSwgY2xlYXJEZXB0aCA9IDA7CisgICAgR0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKKyAgICBHTGJv
b2xlYW4gY29sb3JNYXNrW10gPSB7IEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUg
fSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZm
ZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZmOworICAgIEdMYml0ZmllbGQgY2xlYXJN
YXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NM
RUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsK
KyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAg
IDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CisKKyAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRycy5kZXB0
aCkgeworICAgICAgICA6OmdsR2V0RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJE
ZXB0aCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKDEpOwor
ICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsK
KyAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdM
X0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2ls
KTsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2
KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxN
YXNrKSk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNL
LCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrQmFjaykpOworICAgICAgICA6
OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZmZmZmZik7CisgICAgICAgIDo6
Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIDB4ZmZmZmZmZmYpOworICAgICAgICBjbGVh
ck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0KKworICAgIDo6Z2xDbGVhcihj
bGVhck1hc2spOworCisgICAgOjpnbENsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xv
clsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CisgICAgOjpnbENvbG9yTWFzayhj
b2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOwor
ICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0aE1hc2sp
OworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsQ2xlYXJTdGVu
Y2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZS
T05ULCBzdGVuY2lsTWFzayk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JB
Q0ssIHN0ZW5jaWxNYXNrQmFjayk7CisgICAgfQorCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworCisgICAgYXV0byBlcnJvciA9IDo6Z2xHZXRF
cnJvcigpOworICAgIGlmIChlcnJvciAhPSBHTF9OT19FUlJPUikgeworICAgICAgICBSRUxFQVNF
X0xPRyhXZWJHTCwgIkZhdGFsOiBPcGVuR0wgZXJyb3IgZHVyaW5nIEdyYXBoaWNzQ29udGV4dEdM
IGJ1ZmZlciBpbml0aWFsaXphdGlvbiAoJWQpLiIsIGVycm9yKTsKKyAgICAgICAgZm9yY2VDb250
ZXh0TG9zdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgOjpnbEZsdXNoKCk7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBs
YXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hh
ZGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0
ZXhTaGFkZXIpKTsKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21l
bnRTaGFkZXIpKTsKKyAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7CisgICAgY29uc3QgYXV0byYgZnJhZ21lbnRF
bnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6U2hhZGVyVmFyaWFibGU+IGNvbWJpbmVkVmFyeWluZ3M7
CisgICAgZm9yIChjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgOiB2ZXJ0ZXhFbnRyeS52YXJ5aW5n
TWFwKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3ltYm9sTmFtZSA9IHZlcnRleFN5bWJvbC5r
ZXk7CisgICAgICAgIC8vIFRoZSB2YXJ5aW5nIG1hcCBpbmNsdWRlcyB2YXJpYWJsZXMgZm9yIGVh
Y2ggaW5kZXggb2YgYW4gYXJyYXkgdmFyaWFibGUuCisgICAgICAgIC8vIFdlIG9ubHkgd2FudCBh
IHNpbmdsZSB2YXJpYWJsZSB0byByZXByZXNlbnQgdGhlIGFycmF5LgorICAgICAgICBpZiAoc3lt
Ym9sTmFtZS5lbmRzV2l0aCgiXSIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Ly8gRG9uJ3QgY291bnQgYnVpbHQgaW4gdmFyeWluZ3MuCisgICAgICAgIGlmIChzeW1ib2xOYW1l
ID09ICJnbF9GcmFnQ29vcmQiIHx8IHN5bWJvbE5hbWUgPT0gImdsX0Zyb250RmFjaW5nIiB8fCBz
eW1ib2xOYW1lID09ICJnbF9Qb2ludENvb3JkIikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50U3ltYm9sID0gZnJhZ21lbnRFbnRyeS52YXJ5aW5n
TWFwLmZpbmQoc3ltYm9sTmFtZSk7CisgICAgICAgIGlmIChmcmFnbWVudFN5bWJvbCAhPSBmcmFn
bWVudEVudHJ5LnZhcnlpbmdNYXAuZW5kKCkpCisgICAgICAgICAgICBjb21iaW5lZFZhcnlpbmdz
LmFkZChzeW1ib2xOYW1lLCBmcmFnbWVudFN5bWJvbC0+dmFsdWUpOworICAgIH0KKworICAgIHNp
emVfdCBudW1WYXJ5aW5ncyA9IGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpOworICAgIGlmICghbnVt
VmFyeWluZ3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3RkOjp2ZWN0b3I8c2g6OlNo
YWRlclZhcmlhYmxlPiB2YXJpYWJsZXM7CisgICAgdmFyaWFibGVzLnJlc2VydmUoY29tYmluZWRW
YXJ5aW5ncy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgdmFyeWluZ1N5bWJvbCA6IGNv
bWJpbmVkVmFyeWluZ3MudmFsdWVzKCkpCisgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFy
eWluZ1N5bWJvbCk7CisKKyAgICBHQ0dMaW50IG1heFZhcnlpbmdWZWN0b3JzID0gMDsKKyNpZiBV
U0UoT1BFTkdMX0VTKQorICAgIDo6Z2xHZXRJbnRlZ2VydihNQVhfVkFSWUlOR19WRUNUT1JTLCAm
bWF4VmFyeWluZ1ZlY3RvcnMpOworI2Vsc2UKKyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAgICAg
ICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVj
dG9ycyk7CisgICAgZWxzZSB7CisgICAgICAgIEdDR0xpbnQgbWF4VmFyeWluZ0Zsb2F0cyA9IDA7
CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsICZtYXhWYXJ5
aW5nRmxvYXRzKTsKKyAgICAgICAgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtYXhWYXJ5aW5nRmxvYXRz
IC8gNDsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gc2g6OkNoZWNrVmFyaWFibGVzV2l0aGlu
UGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5nVmVjdG9ycywgdmFyaWFibGVzKTsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3Qg
dmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAorewor
ICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAg
ICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAg
ICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4
U2hhZGVyKS0+dmFsdWU7CisgICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3Ry
aW5nLCBzaDo6R0xlbnVtPiB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXA7CisKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGVudHJ5IDogdmVydGV4RW50cnkudW5pZm9ybU1hcCkgeworICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7
CisgICAgICAgIHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5hZGQoU3RyaW5nKG1hcHBlZE5hbWUu
Y19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSksIGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lv
bik7CisgICAgfQorCisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGZyYWdtZW50RW50cnku
dW5pZm9ybU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVu
dHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7CisgICAgICAgIGNvbnN0IGF1dG8mIHZlcnRleFN5
bWJvbCA9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5maW5kKFN0cmluZyhtYXBwZWROYW1lLmNf
c3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpKTsKKyAgICAgICAgaWYgKHZlcnRleFN5bWJvbCAh
PSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZW5kKCkgJiYgdmVydGV4U3ltYm9sLT52YWx1ZSAh
PSBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlLmFjdGl2ZVRl
eHR1cmVVbml0ID0gdGV4dHVyZTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHBy
b2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFw
LnJlbW92ZShwcm9ncmFtKTsKKyAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3lt
Ym9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAg
ICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIDo6Z2xC
aW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEo
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmluZEJ1ZmZlcih0YXJn
ZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFt
ZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdMdWlu
dCBmYm87CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UK
KyAgICAgICAgZmJvID0gKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNh
bXBsZUZCTyA6IG1fZmJvKTsKKyAgICBBU1NFUlQodGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKTsK
KyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8p
OworICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pIHsKKyAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3
RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBmYm87CisgICAgfQorfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxh
dGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFy
Z2V0LCByZW5kZXJidWZmZXIpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1
cmUsIHRhcmdldCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQs
IEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxl
bmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymxl
bmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3Is
IEdDR0xlbnVtIGRmYWN0b3IpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30g
ICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRl
KEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NH
TGVudW0gZHN0QWxwaGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBz
cmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
dWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVz
YWdlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NH
TFNwYW48Y29uc3Qgdm9pZD4gZGF0YSwgR0NHTGVudW0gdXNhZ2UpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJ1ZmZlckRhdGEo
dGFyZ2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJT
dWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7Cit9CisKK0dD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdD
R0xlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisKKyAgICByZXR1cm4gOjpnbENoZWNrRnJh
bWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBi
LCBHQ0dMY2xhbXBmIGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xD
bGVhcihtYXNrKTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NHTGludCBzKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhclN0ZW5jaWwo
cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9v
bGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVh
biBhbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGlu
Zy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQorICAgIC8vIHBv
aW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRleHQuCisg
ICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gbV9jb21waWxlci5nZXRSZXNv
dXJjZXMoKTsKKyAgICBTaEhhc2hGdW5jdGlvbjY0IHByZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5H
TEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOworICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlv
biA9IG5hbWVIYXNoRm9yU2hhZGVyOworCisgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMp
CisgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhh
c2g+KCk7CisgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9y
U2hhZGVycy5nZXQoKSk7CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJj
ZXMpOworCisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMt
PmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOworCisgICAgQU5HTEVSZXNv
dXJjZXMuSGFzaEZ1bmN0aW9uID0gcHJldmlvdXNIYXNoRnVuY3Rpb247CisgICAgbV9jb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1h
cEZvclNoYWRlcihudWxscHRyKTsKKworICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5s
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRl
ZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKKyAgICBjb25z
dCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0
YSgpOworICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlckNT
dHJpbmcubGVuZ3RoKCk7CisKKyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gb3JpZ2luYWwgc2hh
ZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4i
LCBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coV2ViR0ws
ICItLS0gYmVnaW4gdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJh
bnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLSIsIHRyYW5zbGF0ZWRTaGFkZXJQdHIpOworCisgICAg
OjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNs
YXRlZFNoYWRlckxlbmd0aCk7CisgICAgCisgICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsK
KyAgICAKKyAgICBpbnQgY29tcGlsZVN0YXR1czsKKyAgICAKKyAgICA6OmdsR2V0U2hhZGVyaXYo
c2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgU2hhZGVyU291
cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
CisgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKworICAgIC8v
IFBvcHVsYXRlIHRoZSBzaGFkZXIgbG9nCisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICA6Omds
R2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworCisgICAg
aWYgKGxlbmd0aCkgeworICAgICAgICBHTHNpemVpIHNpemUgPSAwOworICAgICAgICBWZWN0b3I8
R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRl
ciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOworCisgICAgICAgIFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07CisgICAgICAgIGVudHJ5LmxvZyA9IGdldFVu
bWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Cisg
ICAgfQorCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgIT0gR0xfVFJVRSkgeworICAgICAgICBlbnRy
eS5pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBzaGFkZXIgdHJh
bnNsYXRvciBwcm9kdWNlZCBhIHNoYWRlciB0aGF0IE9wZW5HTCB3b3VsZCBub3QgY29tcGlsZS4i
KTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFk
ZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SGFzaE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQg
PT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRl
clNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICBjb25zdCBDU3RyaW5n
JiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50cnkuc291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBj
aGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKKyAgICBp
bnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsKKwor
ICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4t
LS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsKKwor
ICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVy
U291cmNlTGVuZ3RoKTsKKworICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgICBp
bnQgY29tcGlsZVN0YXR1czsKKworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVf
U1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7CisKKyAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9U
UlVFKSB7CisgICAgICAgIGVudHJ5LmlzVmFsaWQgPSB0cnVlOworICAgICAgICBMT0coV2ViR0ws
ICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIExPRyhXZWJHTCwgIkVy
cm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsKKyAgICB9Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9y
ZGVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgQVNTRVJUKG1f
c3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0
cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
IHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgQVNTRVJUKG1fc3RhdGUu
Ym91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0cnMuYW50
aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAg
ICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRo
LCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9t
dWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0Nv
bnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDdWxsRmFj
ZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdD
R0xlbnVtIGZ1bmMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbERlcHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFuIGZsYWcpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERlcHRoTWFz
ayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVy
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7Cisg
ICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5
bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dy
YW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUo
R0NHTGVudW0gY2FwKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xEaXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAg
ICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBl
LCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBl
LCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQp
KSk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50
IGluZGV4KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZpbmlzaCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmbHVzaCgpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZsdXNoKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVy
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250
RmFjZShHQ0dMZW51bSBtb2RlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKKyAgICA6OmdsR2V0
UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0
dHJpYnV0ZVNpemUpOworICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7
IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0
aW9uLgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7Cisg
ICAgR0xlbnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5k
ZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0
YSgpKTsKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNI
QURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0
aCkpOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5k
YXRhKCksIG5hbWVMZW5ndGgpOworICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGlu
ZyBhY3RpdmUgYXR0cmlidXRlICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgs
IHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsK
KyNlbmRpZgorCisgICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9
IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0NH
TGludCBzeW1ib2xDb3VudDsKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dy
YW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3lt
Ym9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9BVFRSSUJVVEVTLCAm
c3ltYm9sQ291bnQpOworICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5maW5kKHByb2dyYW0pOworICAgIH0KKyAgICAKKyAgICBBY3RpdmVTaGFkZXJTeW1ib2xD
b3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+dmFsdWU7CisgICAgR0NHTHVpbnQgcmF3SW5k
ZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4
TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4
TWFwW2luZGV4XSA6IC0xOworCisgICAgcmV0dXJuIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3Jh
bSwgcmF3SW5kZXgsIGluZm8pOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3Jh
bWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6
ZSk7CisKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heFVuaWZvcm1TaXplKTsgLy8gR0xfQUNU
SVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgorICAgIEdM
c2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5
cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBtYXhVbmlm
b3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOworICAgIGlm
ICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFN0cmluZyBv
cmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9U
WVBFX1VOSUZPUk0sIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOworICAgIAorI2lm
bmRlZiBOREVCVUcKKyAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5n
dGgpOworICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgdW5pZm9y
bSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4
KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAKKyAg
ICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBp
bmZvLnNpemUgPSBzaXplOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
R0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0NHTGludCBzeW1ib2xD
b3VudDsKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZp
bmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5lbmQoKSkgeworICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJv
Z3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9VTklGT1JNUywgJnN5bWJvbENvdW50KTsK
KyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9n
cmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xD
b3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDR0x1aW50IHJhd0luZGV4ID0gKGluZGV4IDwg
c3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgpKSA/IHN5
bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwW2luZGV4XSA6IC0xOwor
ICAgIAorICAgIHJldHVybiBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCByYXdJbmRleCwg
aW5mbyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNp
emVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVjdCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dy
YW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwg
Y291bnQsIHNoYWRlcnMpOworfQorCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlSGFzaGVkTmFtZShj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbmFtZTsKKyAgICB1aW50NjRfdCBudW1iZXIgPSBuYW1lSGFzaEZvclNoYWRlcihuYW1l
LnV0ZjgoKS5kYXRhKCksIG5hbWUubGVuZ3RoKCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJ3
ZWJnbF8iLCBoZXgobnVtYmVyLCBMb3dlcmNhc2UpKTsKK30KKworc3RkOjpvcHRpb25hbDxTdHJp
bmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5
cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYg
c3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgYXV0
byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1hcC5maW5kKG5hbWUpOworICAgIGlmIChzeW1ib2xFbnRy
eSA9PSBzeW1ib2xNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBhdXRvJiBtYXBwZWROYW1lID0gc3ltYm9sRW50cnktPnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7
CisgICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3Ro
KCkpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9s
VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDR0xzaXplaSBjb3VudCA9IDA7Cisg
ICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyB9OworICAgIGdldEF0dGFjaGVkU2hh
ZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworCisgICAgZm9yIChHQ0dMc2l6ZWkg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBl
ZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOwor
ICAgICAgICBpZiAobWFwcGVkTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZh
bHVlKCk7CisgICAgfQorCisgICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVk
IHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCisgICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNo
YWRlck1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJN
YXAuZW5kKCkpIHsKKyAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsK
KyAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAo
bGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBw
ZWROYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICAgICAg
bWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMu
c2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAg
ICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIGlmIChzeW1i
b2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgp
KSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBi
ZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAgICAg
ICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBw
cm9ncmFtLgorICAgICAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKKyAgICAgICAgICAg
IG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Cisg
ICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRl
cnMuZ2V0KCkpOworCisgICAgICAgIGF1dG8gZ2VuZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVk
TmFtZShuYW1lKTsKKworICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVs
bHB0cik7CisKKyAgICAgICAgbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJh
dGVkTmFtZSwgbmFtZSk7CisKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE5hbWU7CisgICAgfQor
CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0g
cmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgZm9yIChjb25zdCBhdXRv
JiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgeworICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xF
bnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCisgICAgICAgICAgICByZXR1cm4g
c3ltYm9sRW50cnkua2V5OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitT
dHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgR0NHTHNpemVpIGNvdW50OworICAgIFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyc1syXTsKKyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNv
dW50LCBzaGFkZXJzKTsKKyAgICAKKyAgICBmb3IgKEdDR0xzaXplaSBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hh
ZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAo
b3JpZ2luYWxOYW1lKQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwor
ICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hh
ZGVycyBhZnRlciBsaW5raW5nLgorICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAu
ZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgp
KSB7CisgICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7CisgICAgICAg
IGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5r
ZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFs
TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICAgICAg
b3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFk
ZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUp
CisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAg
aWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRo
ZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVk
LAorICAgICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkg
c2hhZGVyIHByb2dyYW0uCisKKyAgICAgICAgY29uc3QgYXV0byYgY2FjaGVkID0gbV9wb3NzaWJs
eVVudXNlZEF0dHJpYnV0ZU1hcC5maW5kKG5hbWUpOworICAgICAgICBpZiAoY2FjaGVkICE9IG1f
cG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gY2Fj
aGVkLT52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFtZTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3Qgc2hh
ZGVyc1syXSwgc2l6ZV90IGNvdW50LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgZm9yIChz
aXplX3Qgc3ltYm9sVHlwZSA9IDA7IHN5bWJvbFR5cGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihT
SEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORyk7ICsrc3ltYm9sVHlwZSkgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIFNoYWRlclNvdXJj
ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ld
KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0
IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3Rh
dGljX2Nhc3Q8ZW51bSBBTkdMRVNoYWRlclN5bWJvbFR5cGU+KHN5bWJvbFR5cGUpKTsKKyAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAg
ICAgICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
LmNfc3RyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS5rZXk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK2lu
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQor
ICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gLTE7CisKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9s
TmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAgICBM
T0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5h
bWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4g
OjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7
Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJl
Y3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
aWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKworICAgIHJldHVybiA6OmdsR2V0QXR0
cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOworCisgICAgLy8gU2V0IGFuIGFyYml0cmFy
eSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKKyAgICAvLyBh
IHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBuZXZlciBjbGVhciB0
aGUgZXJyb3IuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwgd2Ug
Z290IE5PX0VSUk9SLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewor
ICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9y
ID09IE5PX0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG1fc3ludGhldGljRXJy
b3JzLmFkZChlcnJvcik7CisgICAgICAgIG1vdmVkQW5FcnJvciA9IHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKK30KKworR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEVycm9yKCkKK3sKKyAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBz
eW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCisgICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxy
ZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJvdGgKKyAgICAgICAg
Ly8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBj
b2RlIG9uY2UuCisgICAgICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAg
ICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7CisgICAgfQorCisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BF
UkFUSU9OOworCisgICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJl
dHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhu
YW1lKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOworfQorCitH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKKworICAgIHJldHVybiA6OmdsSXNCdWZmZXIoYnVmZmVyKTsKK30KKworR0NHTGJvb2xl
YW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwor
CisgICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2FwKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1
ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOworfQor
CitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0pOworfQorCitH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZv
cm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJF
WFQocmVuZGVyYnVmZmVyKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIGlmICghc2hhZGVy
KQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzU2hhZGVy
KHNoYWRlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Rl
eHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4
dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dM
ZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbExpbmVXaWR0aCh3aWR0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sK
KyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisKKyAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOworICAgIFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3Jh
bSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIGlmIChjb3VudCA9PSAyKQorICAgICAgICBt
X2xpbmtlZFNoYWRlck1hcC5zZXQocHJvZ3JhbSwgc3RkOjptYWtlX3BhaXIoc2hhZGVyc1swXSwg
c2hhZGVyc1sxXSkpOworCisgICAgOjpnbExpbmtQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NH
TGludCBwYXJhbSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBH
Q0dMZmxvYXQgdW5pdHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYg
dmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGlu
dmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJp
bmcmIHN0cmluZykKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworCisgICAgU2hhZGVyU291cmNlRW50cnkg
ZW50cnk7CisKKyAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7CisKKyAgICBtX3NoYWRlclNvdXJj
ZU1hcC5zZXQoc2hhZGVyLCBXVEZNb3ZlKGVudHJ5KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dM
dWludCBtYXNrKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZh
Y2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVu
Y2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5j
aWxNYXNrKG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
TWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1hc2spCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxN
YXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBh
c3MpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dM
ZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxP
cFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGZsb2F0IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUs
IHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVy
aShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0PiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwg
YXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5p
Zm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9y
bTJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNmKGxv
Y2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFy
cmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZnYo
bG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5p
Zm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwg
YXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYx
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGludD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBh
cnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2l2
KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50
IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYzKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGko
bG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50
PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3Jt
NGl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5
KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXgy
ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgOSkpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlm
b3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gOSwgdHJhbnNwb3NlLCBhcnJh
eS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJp
eDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDE2
KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAxNiwgdHJh
bnNwb3NlLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVzZVByb2dyYW0ocHJv
Z3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQsIDE+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dM
dWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJp
YjJmKGluZGV4LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwg
Mj4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0
ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0LCAzPiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5k
YXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIs
IEdDR0xmbG9hdCB2MykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYz
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdD
R0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBz
dHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4
LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVZlcnRleEFycmF5KCkKK3sKKyAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmNyZWF0ZVZlcnRl
eEFycmF5T0VTKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZl
cnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygp
LmRlbGV0ZVZlcnRleEFycmF5T0VTKGFycmF5KTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKK3sK
KyAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmlzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1H
TE9iamVjdCBhcnJheSkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuYmluZFZlcnRleEFycmF5T0VT
KGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYo
R0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0Qm9v
bGVhbnYocG5hbWUsIHZhbHVlLmRhdGEpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRl
cml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xmbG9hdD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUuZGF0YSk7
Cit9CisKK0dDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdD
R0xlbnVtIHBuYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHQ0dMaW50NjQgdmFs
dWUgPSAwOworICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVz
dCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRp
YWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCisgICAgLy8gOjpn
bEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0dD
R0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBw
bmFtZSwgR0NHTHVpbnQgaW5kZXgpCit7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBV
TlVTRURfUEFSQU0oaW5kZXgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgR0NHTGludDY0IHZhbHVlID0gMDsKKyAgICAvLyBGSVhNRSAx
NDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8g
dXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4
dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjRpX3YocG5hbWUs
IGluZGV4LCB2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
R0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UKQorICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJ
TF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Cisg
ICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEdD
R0xpbnQgdmFsdWUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKEFDVElW
RV9BVFRSSUJVVEVTID09IHBuYW1lIHx8IEFDVElWRV9VTklGT1JNUyA9PSBwbmFtZSk7CisgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFk
ZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9
IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7CisgICAgICAgICp2YWx1ZSA9
IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBlKHBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnNldChwcm9ncmFtLCBBY3Rp
dmVTaGFkZXJTeW1ib2xDb3VudHMoKSk7CisgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBz
eW1ib2xDb3VudHMgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0p
LT52YWx1ZTsKKworICAgIC8vIFJldHJpZXZlIHRoZSBhY3RpdmUgYXR0cmlidXRlcywgYnVpbGQg
YSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEgbWFwcGluZyBvZgorICAgIC8vIG91ciBpbnRlcm5hbCBh
dHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhlIHJlYWwgdW5maWx0ZXJlZCBpbmRleGVzIGluc2lkZSBP
cGVuR0wuCisgICAgR0NHTGludCBhdHRyaWJ1dGVDb3VudCA9IDA7CisgICAgOjpnbEdldFByb2dy
YW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklCVVRFUywgJmF0dHJpYnV0ZUNvdW50KTsKKyAgICBm
b3IgKEdDR0xpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7CisgICAgICAgIEFj
dGl2ZUluZm8gaW5mbzsKKyAgICAgICAgZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpLCBp
bmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0
cmlidXRlSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAvLyBEbyB0aGUgc2Ft
ZSBmb3IgdW5pZm9ybXMuCisgICAgR0NHTGludCB1bmlmb3JtQ291bnQgPSAwOworICAgIDo6Z2xH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX1VOSUZPUk1TLCAmdW5pZm9ybUNvdW50KTsKKyAg
ICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCB1bmlmb3JtQ291bnQ7ICsraSkgeworICAgICAgICBB
Y3RpdmVJbmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGks
IGluZm8pOworICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRU
b0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBlbmQoaSk7CisgICAgfQorICAgIAorICAgICp2YWx1
ZSA9IHN5bWJvbENvdW50cy5jb3VudEZvclR5cGUocG5hbWUpOworfQorCitTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdLCBHQ0dMc2l6ZWkgY291bnQsIGNvbnN0IFN0cmluZyYgbG9nKQoreworICAgIExP
RyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRlckluZm9Mb2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgp
KTsKKworICAgIEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24gcmVnRXhwKCJ3ZWJnbF9bMDEy
MzQ1Njc4OWFiY2RlZkFCQ0RFRl0rIik7CisKKyAgICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExv
ZzsKKyAgICAKKyAgICAvLyBBTkdMRSBpbnNlcnRzIGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0
aGUgc2hhZGVyIHNvdXJjZSB0aGF0CisgICAgLy8gY2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNv
bXBpbGVycy4gVGhlcmUgaXMgbm8gcG9pbnQgc2hvd2luZworICAgIC8vIHRoaXMgd2FybmluZyB0
byB0aGUgdXNlciBzaW5jZSB0aGV5IGRpZG4ndCB3cml0ZSB0aGUgY29kZSB0aGF0CisgICAgLy8g
aXMgY2F1c2luZyBpdC4KKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBh
bmdsZVdhcm5pbmcgeyAiV0FSTklORzogMDoxOiBleHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVy
NScgaXMgbm90IHN1cHBvcnRlZFxuIl9zIH07CisgICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFy
dHNXaXRoKGFuZ2xlV2FybmluZykgPyBhbmdsZVdhcm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOwor
ICAgIGludCBtYXRjaGVkTGVuZ3RoID0gMDsKKworICAgIGRvIHsKKyAgICAgICAgaW50IHN0YXJ0
ID0gcmVnRXhwLm1hdGNoKGxvZywgc3RhcnRGcm9tLCAmbWF0Y2hlZExlbmd0aCk7CisgICAgICAg
IGlmIChzdGFydCA9PSAtMSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHByb2Nlc3Nl
ZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIHN0YXJ0IC0gc3RhcnRGcm9tKSk7
CisgICAgICAgIHN0YXJ0RnJvbSA9IHN0YXJ0ICsgbWF0Y2hlZExlbmd0aDsKKworICAgICAgICBj
b25zdCBTdHJpbmcmIG1hbmdsZWRTeW1ib2wgPSBsb2cuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaGVk
TGVuZ3RoKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBtYXBwZWRTeW1ib2wgPSBtYXBwZWRTeW1i
b2xOYW1lKHNoYWRlcnMsIGNvdW50LCBtYW5nbGVkU3ltYm9sKTsKKyAgICAgICAgTE9HKFdlYkdM
LCAiRGVtYW5nbGluZzogJXMgdG8gJXMiLCBtYW5nbGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCksIG1h
cHBlZFN5bWJvbC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZCht
YXBwZWRTeW1ib2wpOworICAgIH0gd2hpbGUgKHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4o
bG9nLmxlbmd0aCgpKSk7CisKKyAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmco
c3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKKworICAgIExPRyhXZWJHTCwg
IlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7Cit9CisK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEdM
aW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xP
R19MRU5HVEgsICZsZW5ndGgpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7IAorCisgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICBWZWN0b3I8R0xjaGFyPiBpbmZv
KGxlbmd0aCk7CisgICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNp
emUsIGluZm8uZGF0YSgpKTsKKworICAgIEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7CisKKyAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJz
LCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Cit9CisKK0dDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgOjpnbEdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAg
cmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBB
U1NFUlQoc2hhZGVyKTsKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKworICAgIGNvbnN0IGF1dG8m
IHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICAKKyAgICBzd2l0
Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBERUxFVEVfU1RBVFVTOgorICAgIGNhc2UgU0hBREVSX1RZ
UEU6CisgICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCAmdmFsdWUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0
ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSU5GT19MT0dfTEVOR1RIOgorICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKQorICAgICAgICAgICAgdmFsdWUgPSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRlciku
bGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6
CisgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFM
SURfRU5VTSk7CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworU3RyaW5nIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
KQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0g
bV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFk
ZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBjb25z
dCBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworICAgIGlmICghZW50
cnkuaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKKworICAgIEdMaW50IGxlbmd0
aCA9IDA7CisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAm
bGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKwor
ICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwor
ICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRh
KCkpOworCisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsK
KyAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5k
YXRhKCksIHNpemUpKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRl
cik7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJj
ZTsKK30KKworR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0
ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGZsb2F0IHZh
bHVlID0gMC5mOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biB2YWx1ZTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgJnZhbHVl
KTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sK
KyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwg
cG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRVbmlmb3Jt
ZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9ybWl2
KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0x1aW50PiB2YWx1ZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFS
QU0odmFsdWUpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRT
eW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKKyAg
ICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVy
biA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEo
KSk7Cit9CisKK0dDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdm9pZCog
cG9pbnRlciA9IDA7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFt
ZSwgJnBvaW50ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
IEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+IHBpeGVscykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyNpZiAhVVNFKE9QRU5HTF9FUykKKyAgICBpZiAodHlwZSA9PSBIQUxGX0ZM
T0FUX09FUykKKyAgICAgICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRfQVJCOworI2VuZGlmCisKKyAg
ICBpZiAobV91c2luZ0NvcmVQcm9maWxlKSAgeworICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBm
b3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5n
IGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGFkYXB0IHRoZW0sIGFz
IHdlIGRvIGluIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKCkuCisgICAgICAg
IHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgQUxQSEE6CisgICAgICAgICAgICAvLyBX
ZSBhcmUgdXNpbmcgR0xfUkVEIHRvIGJhY2sgR0xfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2Vs
bC4KKyAgICAgICAgICAgIGZvcm1hdCA9IFJFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIExVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9S
RyB0byBiYWNrIEdMX0xVTUlOQU5DRV9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgorICAg
ICAgICAgICAgZm9ybWF0ID0gUkc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6
IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5n
IHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgor
ICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXpl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
aW1hZ2VTaXplLCBkYXRhLmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCitQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8g
PSAwOworICAgIGdsR2VuQnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CisgICAg
cmV0dXJuIG87Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOworfQorCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIo
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBlKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVy
KCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJU
RVhfU0hBREVSKTsKK30KKworUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygx
LCAmbyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChvKTsKKyAgICByZXR1cm4g
bzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1H
TE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9z
dGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTykgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBn
b2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCisgICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0ZXIg
aXQgZ2V0cyBkZWxldGVkLgorICAgICAgICBiaW5kRnJhbWVidWZmZXIoRlJBTUVCVUZGRVIsIDAp
OworICAgIH0KKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUo
cHJvZ3JhbSk7CisgICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBy
ZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRv
JiBrZXlWYWx1ZSkgeworICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4
dHVyZTsKKyAgICB9KTsKKyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVtb3ZlQWxsKHRleHR1cmUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikK
K3sKKyAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0
aWMgZXJyb3IgbGlzdCB0bworICAgIC8vIHByZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNv
IGEgY2FsbGVyIHRvIGdldEVycm9yIHdpbGwgZ2V0CisgICAgLy8gYW55IGVycm9ycyBmcm9tIGds
RXJyb3IgYmVmb3JlIHRoZSBlcnJvciB3ZSBhcmUgc3ludGhlc2l6aW5nLgorICAgIG1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJv
cik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZvcmNlQ29udGV4dExvc3Qo
KQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisg
ICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQg
OiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4
dCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRD
aGFuZ2VkTm90aWZpY2F0aW9uKCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1Zl
Y3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWRO
b3RpZmljYXRpb24oKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1h
Z2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9k
ZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQor
eworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmly
c3QsIGNvdW50LCBwcmltY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBt
b2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBH
Q0dMc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJ
bnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOworICAg
IGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCit7Cisg
ICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNv
cik7Cit9CisKKyNpZiBIQVZFKE9QRU5HTF80KSAmJiBFTkFCTEUoV0VCR0wyKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50IGluZGV4
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xQcmltaXRpdmVSZXN0YXJ0SW5kZXgoaW5kZXgpOworfQorI2VuZGlmCisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25z
dCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWlu
dCBsZW5ndGgpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFN
KGRhdGEpOworICAgIFVOVVNFRF9QQVJBTSh1c2FnZSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY09m
ZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRz
dEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNyY0RhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NH
THVpbnQgbGVuZ3RoKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9Q
QVJBTShkc3RCeXRlT2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oc3JjRGF0YSk7CisgICAgVU5V
U0VEX1BBUkFNKHNyY09mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Cit9CisKKyNp
ZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVu
dW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9m
ZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJn
ZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7Cit9CisjZWxz
ZQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVu
dW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyLCBHQ0dMaW50cHRyLCBHQ0dMc2l6ZWlwdHIpCit7Cit9
CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0
YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4g
ZGF0YSkKK3sKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQorICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHQ0dMdm9pZCog
cHRyID0gOjpnbE1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIEdy
YXBoaWNzQ29udGV4dEdMOjpNQVBfUkVBRF9CSVQpOworICAgIGlmICghcHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgbWVtY3B5KGRhdGEuZGF0YSwgcHRyLCBkYXRhLmJ1ZlNpemUpOworICAgIGlm
ICghOjpnbFVubWFwQnVmZmVyKHRhcmdldCkpCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9PUEVSQVRJT04pOworI2VuZGlmCit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQg
c3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xp
bnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0
ZXIpCit7CisgICAgVU5VU0VEX1BBUkFNKHNyY1gwKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWTAp
OworICAgIFVOVVNFRF9QQVJBTShzcmNYMSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKKyAg
ICBVTlVTRURfUEFSQU0oZHN0WDApOworICAgIFVOVVNFRF9QQVJBTShkc3RZMCk7CisgICAgVU5V
U0VEX1BBUkFNKGRzdFgxKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTEpOworICAgIFVOVVNFRF9Q
QVJBTShtYXNrKTsKKyAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAg
VU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0dXJlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV2ZWwpOworICAgIFVOVVNFRF9QQVJBTShsYXllcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3sKKyAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVudHMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7
CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRz
KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNF
RF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQoreworICAgIFVO
VVNFRF9QQVJBTShzcmMpOworfQorCisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xf
RVNfMykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xTcGFuPEdDR0xpbnQ+IGRhdGEpCit7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0SW50
ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXpl
LCBkYXRhLmRhdGEpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVT
RURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAg
VU5VU0VEX1BBUkFNKGJ1ZlNpemUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworI2VuZGlm
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91
bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9y
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVw
dGgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1f
c3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKyNlbHNlCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NH
TGVudW0sIEdDR0xTcGFuPEdDR0xpbnQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0sIEdDR0xzaXpl
aSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCit7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zm
c2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShsZXZl
bCk7CisgICAgVU5VU0VEX1BBUkFNKHhvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTSh5b2Zmc2V0
KTsKKyAgICBVTlVTRURfUEFSQU0oem9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAg
IFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9Q
QVJBTShoZWlnaHQpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRG
cmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0obmFt
ZSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3sKKyAgICBVTlVTRURf
UEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh2MCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQg
djAsIEdDR0x1aW50IHYxKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5V
U0VEX1BBUkFNKHYwKTsKKyAgICBVTlVTRURfUEFSQU0odjEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYw
LCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9u
KTsKKyAgICBVTlVTRURfUEFSQU0odjApOworICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5V
U0VEX1BBUkFNKHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyLCBHQ0dMdWludCB2MykKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKKyAgICBVTlVTRURfUEFSQU0o
djIpOworICAgIFVOVVNFRF9QQVJBTSh2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1
aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BB
UkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxv
Y2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5V
U0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0
aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0
YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBk
YXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRy
YW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAg
VU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAg
ICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
bG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Cisg
ICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkoR0NHTHVpbnQg
aW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVTRURf
UEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHopOworICAgIFVOVVNFRF9QQVJBTSh3KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWlu
dCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQoreworICAgIFVOVVNF
RF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdD
R0x1aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50IHosIEdDR0x1aW50IHcpCit7CisgICAgVU5V
U0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFN
KHkpOworICAgIFVOVVNFRF9QQVJBTSh6KTsKKyAgICBVTlVTRURfUEFSQU0odyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGlu
ZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQoreworICAgIFVOVVNFRF9Q
QVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBH
Q0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KQoreworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHNp
emUpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RyaWRlKTsK
KyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdD
R0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCkKK3sKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0
KTsKKyAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY291bnQpOworICAg
IFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NH
TGVudW0+IGJ1ZnMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZnMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGlu
dCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsK
KyAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVu
dW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
dmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShk
cmF3YnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCit7CisgICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVO
VVNFRF9QQVJBTShkZXB0aCk7CisgICAgVU5VU0VEX1BBUkFNKHN0ZW5jaWwpOworfQorCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1
ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsK
K30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZv
cm1HTE9iamVjdCBxdWVyeSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKK3sKKyAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit7CisgICAgVU5V
U0VEX1BBUkFNKHRhcmdldCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKworICAg
IHJldHVybiAwOworfQorCitHQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVl
cnlPYmplY3R1aShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocXVlcnkpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgcmV0
dXJuIDA7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVNhbXBsZXIoKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQoreworICAgIFVO
VVNFRF9QQVJBTShzYW1wbGVyKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyKQoreworICAgIFVOVVNFRF9QQVJBTSh1bml0KTsKKyAgICBVTlVTRURf
UEFSQU0oc2FtcGxlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBs
ZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQgcGFyYW0pCit7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9Q
QVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1w
bGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJB
TShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShw
YXJhbSk7Cit9CisKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxl
clBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAg
ICByZXR1cm4gMC5mOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
KQorCit7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFt
ZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK0dDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGNvbmRpdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKwor
ICAgIHJldHVybiAwOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNTeW5jKEdDR0xzeW5jIHN5bmMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVT
eW5jKEdDR0xzeW5jIHN5bmMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworfQorCitHQ0dM
ZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3lu
YywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisgICAgVU5VU0VEX1BBUkFN
KHRpbWVvdXQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OndhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGlu
dDY0IHRpbWVvdXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJB
TShmbGFncyk7CisgICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOworfQorCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFt
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3luYyk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
KyAgICByZXR1cm4gMDsKK30KKworUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQoreworICAgIHJldHVybiAwOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0
Zm9ybUdMT2JqZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTShpZCk7Cit9CisKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3Jt
R0xPYmplY3QgaWQpCit7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oaWQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2
ZU1vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2ZU1vZGUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdD
R0xlbnVtIGJ1ZmZlck1vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVO
VVNFRF9QQVJBTSh2YXJ5aW5ncyk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlck1vZGUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJh
Y2soKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zv
cm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRC
dWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJB
TShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50
IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xz
aXplaXB0ciBzaXplKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9Q
QVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFN
KG9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworfQorCitWZWN0b3I8R0NHTHVpbnQ+
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFtZXMpCit7CisgICAg
VU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtTmFtZXMpOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAg
ICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CisjaWYg
SEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNp
emUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcmVzdWx0LmRhdGEoKSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwor
I2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
Y29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9n
cmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrTmFtZSk7CisgICAgcmV0dXJuIDA7
Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0lu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5p
Zm9ybUJsb2NrSW5kZXgpOworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1C
bG9ja0JpbmRpbmcpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9Q
QVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0Jp
bmRpbmcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAg
IFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFN
KHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0oZm9y
bWF0KTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQoreworICAgIFVOVVNFRF9QQVJBTShw
cm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNF
RF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtICwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBH
Q0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0sIEdD
R0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVp
LCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0s
IEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xp
bnQsIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dM
aW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBH
Q0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVt
LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dM
aW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBH
Q0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVp
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51
bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBH
Q0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVz
c2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NH
TGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXpl
aSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7Cisg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5z
dGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMc2l6ZWk+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7
CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVu
dHNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dM
ZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0
IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRFJlc291cmNlU2Fm
ZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgdW5wYWNrQWxpZ25tZW50KQorewor
ICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8
fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7CisgICAgVW5p
cXVlQXJyYXk8dW5zaWduZWQgY2hhcj4gemVybzsKKyAgICB1bnNpZ25lZCBzaXplID0gMDsKKyAg
ICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKKyAgICAgICAgUGl4ZWxTdG9yZVBhcmFt
cyBwYXJhbXM7CisgICAgICAgIHBhcmFtcy5hbGlnbm1lbnQgPSB1bnBhY2tBbGlnbm1lbnQ7Cisg
ICAgICAgIEdDR0xlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0
eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJhbXMsICZzaXplLCBudWxscHRyLCBudWxscHRyKTsK
KyAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHplcm8gPSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQg
Y2hhcj4oc2l6ZSk7CisgICAgICAgIGlmICghemVybykgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBz
aXplKTsKKyAgICB9CisgICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bhbih6ZXJv
LmdldCgpLCBzaXplKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTAzLDYg
KzI5NDUsNiBAQCBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbgogICAgIHJldHVybiByZWFkQ29tcG9z
aXRlZFJlc3VsdHMoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfQogCi0jZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXggNmM4MWVhN2E4ODk1NDBkNTNl
MDY1ZDQ1MzRiNDY5NTZmMjBjZmExZi4uMjQ5ZTkyMTViNWQ3YWJlZDA5MzJmZjU0ZTYxNDQ5Mjk4
YmQ0OGU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTI1LDUzICsy
NSwxNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBFTkFCTEUo
V0VCR0wpICYmICFVU0UoQU5HTEUpCiAKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oIgogI2luY2x1
ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KICNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5oIgotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgot
I2VuZGlmCi0KLSNpZiBVU0UoQ0EpCi0jaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCi0jZW5k
aWYKLQotI2lmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgotI2Vsc2UK
LSNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9w
ZW5HTENvbW1vbi5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU2Nv
cGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdC5oIgotI2VuZGlmCi0KLS8vIEZJWE1FOiBGaW5k
IGEgYmV0dGVyIHdheSB0byBhdm9pZCB0aGUgbmFtZSBjb25mbGljdGlvbiBmb3IgTk9fRVJST1Iu
Ci0jaWYgUExBVEZPUk0oV0lOKQotI3VuZGVmIE5PX0VSUk9SCi0jZWxpZiBQTEFURk9STShHVEsp
Ci0vLyBUaGlzIGRlZmluZSBpcyBmcm9tIHRoZSBYMTEgaGVhZGVycywgYnV0IGl0J3MgdXNlZCBi
ZWxvdywgc28gd2UgbXVzdCB1bmRlZmluZSBpdC4KLSN1bmRlZiBWRVJTSU9OCi0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKENPQ09BKQotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXZWJH
TExheWVyOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQotCiAjaWYgVVNFKE5JQ09TSUEpCiBu
YW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBHQ0dMTGF5ZXI7CkBAIC04MCw5ICs0NCw3IEBAIGNs
YXNzIEdDR0xMYXllcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRXh0ZW5zaW9uc0dM
OwotI2lmIFVTRShBTkdMRSkKLWNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOwotI2VsaWYgVVNFKE9Q
RU5HTF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7
CiAjZWxpZiBVU0UoT1BFTkdMKQogY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMOwpAQCAtOTcsMjgg
KzU5LDExIEBAIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKIAogdHlwZWRl
ZiBIYXNoTWFwPENTdHJpbmcsIHVpbnQ2NF90PiBTaGFkZXJOYW1lSGFzaDsKIAorLy8gQmFzZSBj
bGFzcyBmb3IgR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dHMgdGhhdCB1c2UgT3BlbkdMIG9yIE9w
ZW5HTCBFUy4KIGNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIDog
cHVibGljIEdyYXBoaWNzQ29udGV4dEdMCiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0woKTsKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0jaWYgVVNFKEFOR0xFKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0OwotICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0xDb25maWcgcGxhdGZvcm1Db25maWcoKSBjb25zdDsKLSAgICBHQ0dMZW51bSBk
cmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOwotICAgIHN0YXRpYyBHQ0dMZW51bSBkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5n
VGFyZ2V0KTsKLSAgICBzdGF0aWMgR0NHTGludCBFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dEZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCk7Ci0gICAgZW51bSBjbGFz
cyBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciB7Ci0gICAgICAgIC8vIFJlbGVhc2VzIGN1
cnJlbnQgY29udGV4dCBhZnRlciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjYWxscyBkb25lIGlu
IHRoZSB0aHJlYWQuCi0gICAgICAgIFJlbGVhc2VDdXJyZW50Q29udGV4dCwKLSAgICAgICAgLy8g
UmVsZWFzZXMgYWxsIHRocmVhZCByZXNvdXJjZXMgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgotICAgICAgICBSZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VzLAotICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQgYmUgdXNl
ZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCi0gICAgICAgIC8vIGJlZW4g
cmVsZWFzZWQuCi0gICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMKLSAg
ICB9OwotICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFzZVRocmVh
ZFJlc291cmNlQmVoYXZpb3IpOwotI2VuZGlmCiAKICAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcg
b24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4KICAgICB2b2lkIHBy
ZXBhcmVUZXh0dXJlKCk7CkBAIC0xMzIsMTUgKzc3LDkgQEAgcHVibGljOgogICAgIC8vIEVxdWl2
YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9j
YXRpb24uCiAgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKIAotI2lmICFVU0UoQU5HTEUpCi0gICAgLy8gSGVscGVy
IHRvIHRleEltYWdlMkQgd2l0aCBwaXhlbD09MCBjYXNlOiBwaXhlbHMgYXJlIGluaXRpYWxpemVk
IHRvIDAuCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgbm8gR0wgZXJyb3IgaXMgc3ludGhlc2l6ZWQu
Ci0gICAgLy8gQnkgZGVmYXVsdCwgYWxpZ25tZW50IGlzIDQsIHRoZSBPcGVuR0wgZGVmYXVsdCBz
ZXR0aW5nLgogICAgIGJvb2wgdGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xpbnQgYWxpZ25tZW50ID0gNCk7Ci0jZW5kaWYKIAogICAgIGJvb2wgaXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0IGZpbmFsOwotCiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAg
Ly8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4KICAgICAvLwpAQCAtMjA2LDkgKzE0NSw3IEBAIHB1
YmxpYzoKICAgICBHQ0dMaW50NjQgZ2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsK
ICAgICBHQ0dMaW50NjQgZ2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgpIGZpbmFsOwogICAgIEdDR0xpbnQgZ2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7Ci0jaWYgIVVTRShBTkdMRSkKICAgICB2b2lkIGdl
dE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSk7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKICAg
ICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CiAgICAg
U3RyaW5nIGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVp
LCBjb25zdCBTdHJpbmcmKTsKICAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CkBAIC0yODYsMTAgKzIyMyw4
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5h
bDsKICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKLSNp
ZiAhVVNFKEFOR0xFKQogICAgIGJvb2wgY2hlY2tWYXJ5aW5nc1BhY2tpbmcoUGxhdGZvcm1HTE9i
amVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0
OwogICAgIGJvb2wgcHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVy
LCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdDsKLSNlbmRpZgogCiAgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgpIGZpbmFsOwog
ICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQsIDE+IHZhbHVlcykgZmluYWw7CkBAIC0zMTcsMTAgKzI1Miw4IEBAIHB1YmxpYzoK
IAogICAgIC8vID09PT09PT09PT0gV2ViR0wyIGVudHJ5IHBvaW50cy4KIAotI2lmICFVU0UoQU5H
TEUpCiAgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29uc3Qgdm9pZCogZGF0
YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKTsK
ICAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5
dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNyY0RhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgbGVuZ3RoKTsKLSNlbmRpZgogICAgIHZvaWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwg
R0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpIGZpbmFsOwogCiAgICAg
dm9pZCBnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQs
IEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKSBmaW5hbDsKQEAgLTQ1Niw5ICszODksNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQpOwogI2VuZGlmCiAK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsK
LSNlbmRpZgogCiAgICAgdm9pZCBzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKSBmaW5hbDsKIApA
QCAtNDg0LDEyICs0MTQsOCBAQCBwdWJsaWM6CiAgICAgLy8gYWxsIG1ldGhvZHMgaXQgY29udGFp
bnMgbWF5IG5lY2Vzc2FyaWx5IGJlIHN1cHBvcnRlZCBvbiB0aGUKICAgICAvLyBjdXJyZW50IGhh
cmR3YXJlLiBNdXN0IGNhbGwgRXh0ZW5zaW9uc0dMOjpzdXBwb3J0cygpIHRvCiAgICAgLy8gZGV0
ZXJtaW5lIHRoaXMuCi0jaWYgIVVTRShBTkdMRSkKICAgICAvLyBVc2UgY292YXJpYW50IHJldHVy
biB0eXBlIGZvciBPUEVOR0wvT1BFTkdMX0VTCiAgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9u
JiBnZXRFeHRlbnNpb25zKCkgZmluYWw7Ci0jZWxzZQotICAgIEV4dGVuc2lvbnNHTCYgZ2V0RXh0
ZW5zaW9ucygpIGZpbmFsOwotI2VuZGlmCiAKICAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0
aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CiAKQEAgLTQ5NywzMSArNDIz
LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKSBvdmVycmlkZTsK
IAotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLSAgICBHcmFwaGljc0Nv
bnRleHRHTENWKiBhc0NWKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHBhaW50
VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiwgUGl4ZWxCdWZmZXIm
JiwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0Jik7Ci0KLSNpZiBV
U0UoQU5HTEUpCi0gICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkZWZh
dWx0RGlzcGxheSA9IEVHTF9ERUZBVUxUX0RJU1BMQVk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBsb3dQb3dlckRpc3BsYXkg
PSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTEpOwotICAgIGNvbnN0ZXhwciBzdGF0
aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgaGlnaFBlcmZvcm1hbmNlRGlzcGxheSA9IEVHTF9DQVNU
KEVHTE5hdGl2ZURpc3BsYXlUeXBlLCAtMik7Ci0jZW5kaWYKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6
CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
KTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbiBtX3N3YXBDaGFpbjsKLSAgICBFR0xEaXNwbGF5IG1fZGlzcGxheU9iaiB7IG51bGxw
dHIgfTsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dE9iaiB7IG51bGxw
dHIgfTsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnT2JqIHsg
bnVsbHB0ciB9OwotI2VuZGlmCisKICAgICBHQ0dMdWludCBtX3RleHR1cmUgeyAwIH07CiAKLXBy
aXZhdGU6CiAgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRz
IHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KICAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwg
dGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRoYXQgZXZlbnR1YWxseSBj
YWxsIE9wZW5HTC4KICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKQEAgLTU0NywyNCArNDUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc29sdmVNdWx0
aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgPSBJbnRSZWN0KCkpOwogICAgIHZv
aWQgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0NHTHVpbnQgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKLSNpZiBVU0UoQU5H
TEUpCi0gICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKLSNlbmRpZgotI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgYWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoKTsKLSAgICBib29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKLSAgICBzdGF0aWMgYm9vbCBt
YWtlQ3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSwgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTCk7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RTsKLSNlbmRpZgotI2lmIFVTRShBTkdMRSkKLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGNvbnRl
eHQgc2hvdWxkIGJlIGxvc3QgZHVlIHRvIHRpbWVvdXQuCi0gICAgYm9vbCB3YWl0QW5kVXBkYXRl
T2xkZXN0RnJhbWUoKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICAvLyBQbGF0Zm9ybSBzcGVj
aWZpYyBiZWhhdmlvciBmb3IgcmVsZWFzZVJlc291cmNlcygpOwotICAgIHN0YXRpYyB2b2lkIHBs
YXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygpOwotI2VuZGlmCiAKLSNpZiAhVVNFKEFOR0xF
KQogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFVuaXF1ZVJlZjxzaDo6U2hhZGVyVmFyaWFi
bGU+PiBTaGFkZXJTeW1ib2xNYXA7CiAKICAgICBzdHJ1Y3QgU2hhZGVyU291cmNlRW50cnkgewpA
QCAtNjMxLDEyICs1MjAsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBv
cmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBB
TkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZGVyTmFtZUhhc2g+IG5hbWVIYXNoTWFwRm9yU2hhZGVyczsKLSNlbmRpZiAv
LyAhVVNFKEFOR0xFKQogCi0jaWYgVVNFKEFOR0xFKQotICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNp
b25zR0xBTkdMRTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+IG1fZXh0
ZW5zaW9uczsKLSNlbGlmIFVTRShPUEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKICAgICBm
cmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7CiAgICAgZnJpZW5kIGNsYXNzIEV4dGVu
c2lvbnNHTE9wZW5HTENvbW1vbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMT3Bl
bkdMRVM+IG1fZXh0ZW5zaW9uczsKQEAgLTY0OCw5ICs1MzMsNyBAQCBwcml2YXRlOgogCiAgICAg
VmVjdG9yPFZlY3RvcjxmbG9hdD4+IG1fdmVydGV4QXJyYXk7CiAKLSNpZiAhVVNFKEFOR0xFKQog
ICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29tcGlsZXI7Ci0jZW5kaWYKIAogICAgIEdDR0x1aW50
IG1fZmJvIHsgMCB9OwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKQEAgLTY1OCw1NCAr
NTQxLDE0IEBAIHByaXZhdGU6CiAgICAgR0NHTHVpbnQgbV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsg
MCB9OwogI2VuZGlmCiAKLSNpZiAhVVNFKEFOR0xFKSAmJiBVU0UoT1BFTkdMX0VTKQorI2lmIFVT
RShPUEVOR0xfRVMpCiAgICAgR0NHTHVpbnQgbV9kZXB0aEJ1ZmZlciB7IDAgfTsKICAgICBHQ0dM
dWludCBtX3N0ZW5jaWxCdWZmZXIgeyAwIH07CiAjZW5kaWYKICAgICBHQ0dMdWludCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlciB7IDAgfTsKIAogICAgIEdDR0x1aW50IG1faW50ZXJuYWxDb2xvckZvcm1h
dCB7IDAgfTsKLSNpZiBVU0UoQU5HTEUpCi0gICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3Rl
bmNpbEZvcm1hdCB7IDAgfTsKLSNlbmRpZgotICAgIHN0cnVjdCBHcmFwaGljc0NvbnRleHRHTFN0
YXRlIHsKLSAgICAgICAgR0NHTHVpbnQgYm91bmRSZWFkRkJPIHsgMCB9OwotICAgICAgICBHQ0dM
dWludCBib3VuZERyYXdGQk8geyAwIH07Ci0gICAgICAgIEdDR0xlbnVtIGFjdGl2ZVRleHR1cmVV
bml0IHsgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUwIH07Ci0KLSAgICAgICAgdXNpbmcgQm91
bmRUZXh0dXJlTWFwID0gSGFzaE1hcDxHQ0dMZW51bSwKLSAgICAgICAgICAgIHN0ZDo6cGFpcjxH
Q0dMdWludCwgR0NHTGVudW0+LAotICAgICAgICAgICAgSW50SGFzaDxHQ0dMZW51bT4sCi0gICAg
ICAgICAgICBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50PiwKLSAg
ICAgICAgICAgIFBhaXJIYXNoVHJhaXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50
Pj4KLSAgICAgICAgPjsKLSAgICAgICAgQm91bmRUZXh0dXJlTWFwIGJvdW5kVGV4dHVyZU1hcDsK
LSAgICAgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJv
dW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0KLSAgICAgICAgR0NHTHVpbnQgYm91bmRU
ZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOwotICAg
ICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4dHVyZU1hcC5lbmQoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmZpcnN0OwotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBHQ0dMdWludCBjdXJyZW50Qm91bmRUYXJnZXQoKSBj
b25zdCB7IHJldHVybiBib3VuZFRhcmdldChhY3RpdmVUZXh0dXJlVW5pdCk7IH0KLSAgICAgICAg
R0NHTGVudW0gYm91bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0
dXJlVW5pdCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVu
ZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuc2Vjb25kOwotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEJvdW5kVGV4
dHVyZShHQ0dMZW51bSB0ZXh0dXJlVW5pdCwgR0NHTHVpbnQgdGV4dHVyZSwgR0NHTGVudW0gdGFy
Z2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0KHRleHR1cmVV
bml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHVzaW5nIFRleHR1cmVTZWVkQ291bnQgPSBIYXNoQ291bnRlZFNldDxHQ0dMdWludCwgSW50
SGFzaDxHQ0dMdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVp
bnQ+PjsKLSAgICAgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OwotICAgIH07
CiAKICAgICBHcmFwaGljc0NvbnRleHRHTFN0YXRlIG1fc3RhdGU7CiAKQEAgLTcxNCwxNiArNTU3
LDYgQEAgcHJpdmF0ZToKICAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVm
ZmVyIHsgMCB9OwogICAgIEdDR0x1aW50IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciB7IDAgfTsK
IAotI2lmIFVTRShBTkdMRSkKLSAgICAvLyBGb3IgcHJlc2VydmVEcmF3aW5nQnVmZmVyOnRydWUg
d2l0aG91dCBtdWx0aXNhbXBsaW5nLgotICAgIEdDR0x1aW50IG1fcHJlc2VydmVEcmF3aW5nQnVm
ZmVyVGV4dHVyZSB7IDAgfTsKLSAgICAvLyBBdHRhY2hlcyBtX3RleHR1cmUgd2hlbiBtX3ByZXNl
cnZlRHJhd2luZ0J1ZmZlclRleHR1cmUgaXMgbm9uLXplcm8uCi0gICAgR0NHTHVpbnQgbV9wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXJGQk8geyAwIH07Ci0gICAgLy8gUXVlcmllZCBhdCBkaXNwbGF5IHN0
YXJ0dXAuCi0gICAgRUdMaW50IG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgeyAtMSB9Owot
Ci0jZW5kaWYKLQogICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4K
ICAgICBMaXN0SGFzaFNldDxHQ0dMZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7CiAKQEAgLTc0NCwy
OSArNTc3LDggQEAgcHJpdmF0ZToKICNpZiBVU0UoQ0FJUk8pCiAgICAgUGxhdGZvcm1HTE9iamVj
dCBtX3ZhbyB7IDAgfTsKICNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLy8gQmFj
a2luZyBzdG9yZSBmb3IgdGhlIHRoZSBidWZmZXIgd2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZv
ciBkaXNwbGF5LgotICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0
aGlzIGlzIHRoZSBkcmF3aW5nIGJ1ZmZlciBiYWNraW5nIHN0b3JlLgotICAgIC8vIFdoZW4gcHJl
c2VydmVEcmF3aW5nQnVmZmVyID09IHRydWUsIHRoaXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlz
cGxheSBwcmVwYXJlLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1
ZmZlckJhY2tpbmc7Ci0gICAgdm9pZCogbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIg
fTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRp
c3BsYXlSZWNvbmZpZ3VyYXRpb24geyBmYWxzZSB9OwotICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5j
ZUdQVVJlcXVlc3QgbV9oaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0OwotI2VuZGlmCi0jaWYgRU5B
QkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0NvbnRleHRHTENWQU5HTEU+IG1fY3Y7Ci0jZW5kaWYKLSNpZiBVU0UoQU5HTEUpCi0gICAg
Ym9vbCBtX3VzZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKLSAgICBzaXplX3QgbV9v
bGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKLSAgICBTY29wZWRHTEZlbmNlIG1fZnJh
bWVDb21wbGV0aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOwotI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvbW1vbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMGQ2
ZDM2N2YxZjk1NDQ1YjBhNzljMTc0ZGE4OGEzZWU1MWNiOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI4ODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nl
b2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYg
IVVTRShBTkdMRSkKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSAiRXh0ZW5zaW9uc0dM
T3BlbkdMRVMuaCIKLSNlbHNlCi0jaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMLmgiCi0jZW5k
aWYKLSNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKLSNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCi0jaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1JlZ3VsYXJFeHByZXNzaW9uLmg+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDx3dGYv
SGV4TnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYv
VGhyZWFkU3BlY2lmaWMuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRl
ICJFcG94eVNoaW1zLmgiCi0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIk9wZW5HTEVT
U2hpbXMuaCIKLSNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUg
Ik9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
VGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiYgZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyKCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0gICAgc3Rh
dGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4qIHNoYXJlZE5hbWVIYXNoOwotICAg
IHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIHNoYXJlZE5hbWVIYXNoID0g
bmV3IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj47Ci0gICAgfSk7Ci0KLSAgICByZXR1
cm4gKnNoYXJlZE5hbWVIYXNoOwotfQotCi1zdGF0aWMgdm9pZCBzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIoU2hhZGVyTmFtZUhhc2gqIHNoYWRlck5hbWVIYXNoKQotewotICAgICpnZXRD
dXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKSA9IHNoYWRlck5hbWVIYXNoOwotfQotCi0vLyBI
YXNoIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEFOR0xFIHRyYW5zbGF0b3IvY29tcGlsZXIgdG8gZG8K
LS8vIHN5bWJvbCBuYW1lIG1hbmdsaW5nLiBTaW5jZSB0aGlzIGlzIGEgc3RhdGljIG1ldGhvZCwg
YmVmb3JlCi0vLyBjYWxsaW5nIGNvbXBpbGVTaGFkZXIgd2Ugc2V0IGN1cnJlbnROYW1lSGFzaE1h
cEZvclNoYWRlcgotLy8gdG8gcG9pbnQgdG8gdGhlIG1hcCBrZXB0IGJ5IHRoZSBjdXJyZW50IGlu
c3RhbmNlIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotCi1zdGF0aWMgdWludDY0X3QgbmFt
ZUhhc2hGb3JTaGFkZXIoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDU3RyaW5nIG5hbWVBc0NTdHJp
bmcgPSBDU3RyaW5nKG5hbWUpOwotCi0gICAgLy8gTG9vayB1cCBuYW1lIGluIG91ciBsb2NhbCBt
YXAuCi0gICAgU2hhZGVyTmFtZUhhc2gqJiBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIgPSAq
Z2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCk7Ci0gICAgU2hhZGVyTmFtZUhhc2g6Oml0
ZXJhdG9yIGZpbmRSZXN1bHQgPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmZpbmQobmFt
ZUFzQ1N0cmluZyk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgIT0gY3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVlOwotCi0gICAg
dW5zaWduZWQgaGFzaFZhbHVlID0gbmFtZUFzQ1N0cmluZy5oYXNoKCk7Ci0KLSAgICAvLyBDb252
ZXJ0IHRoZSAzMi1iaXQgaGFzaCBmcm9tIENTdHJpbmc6Omhhc2ggaW50byBhIDY0LWJpdCByZXN1
bHQKLSAgICAvLyBieSBzaGlmdGluZyB0aGVuIGFkZGluZyB0aGUgc2l6ZSBvZiBvdXIgdGFibGUu
IE92ZXJmbG93IHdvdWxkCi0gICAgLy8gb25seSBiZSBhIHByb2JsZW0gaWYgd2UncmUgYWxyZWFk
eSBoYXNoaW5nIHRvIHRoZSBzYW1lIHZhbHVlIChhbmQKLSAgICAvLyB3ZSdyZSBob3BpbmcgdGhh
dCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY29udGV4dCB3ZQotICAgIC8vIGRvbid0IGhhdmUg
dGhhdCBtYW55IHN5bWJvbHMpLgotCi0gICAgdWludDY0X3QgcmVzdWx0ID0gaGFzaFZhbHVlOwot
ICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgMzIpICsgKGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRl
ci0+c2l6ZSgpICsgMSk7Ci0KLSAgICBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNldChu
YW1lQXNDU3RyaW5nLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKLXsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0
dHJpYnV0ZXMoKTsKLQotICAgIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbiYgZXh0ZW5zaW9ucyA9
IGdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBpZiAo
ZXh0ZW5zaW9ucy5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7Ci0gICAg
ICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKTsKLSAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KLSAg
ICAgICAgICAgIGF0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBhdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0
dHJzKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiAhbV9pc0ZvcldlYkdMMikg
ewotICAgICAgICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlIikpIHsKLSAgICAgICAgICAgIGF0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwot
ICAgICAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUiKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnByZXBhcmVUZXh0dXJlKCkKLXsKLSAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotCi0jaWYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBUZW1wb3JhcnlP
cGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7Ci0g
ICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxT
RSk7Ci0jZW5kaWYKLQotICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykKLSAg
ICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1fY29tcG9zaXRvclRl
eHR1cmUpOwotICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7
Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIDo6
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKLSAgICBnbEZsdXNo
KCk7Ci0KLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERy
YXdGQk8pOwotICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKLSAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBlbHNlCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgcmV0dXJu
OwotI2VuZGlmCi0KLSAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7Ci0gICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fc3RhdGUuYm91bmRUYXJnZXQoR0xfVEVYVFVS
RTApID09IEdMX1RFWFRVUkVfMkQgPyBtX3N0YXRlLmJvdW5kVGV4dHVyZShHTF9URVhUVVJFMCkg
OiAwKTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0KTsK
LSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8p
OwotICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKLSAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKLSAgICA6OmdsRmx1c2goKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkK
LXsKLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHRBdHRy
aWJ1dGVzKCkuYW50aWFsaWFzKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNl
c3NhcnkoKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRH
TDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBt
X2ZibykgewotICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IHJlYWRQaXhlbHNGb3JQ
YWludFJlc3VsdHMoKTsKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJv
dW5kRHJhd0ZCTyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaWYgKHdp
ZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdodCA+PSAwKTsKLSAg
ICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOwotCi0gICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKLSAgICBtX2N1cnJl
bnRIZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLQotICAgIFRl
bXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZB
TFNFKTsKLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIs
IEdMX0ZBTFNFKTsKLSAgICAKLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gcmVzaGFwZUZCT3Mo
SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZl
cnMgdG8gMC4KLSAgICBHTGZsb2F0IGNsZWFyQ29sb3JbXSA9IHswLCAwLCAwLCAwfSwgY2xlYXJE
ZXB0aCA9IDA7Ci0gICAgR0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKLSAgICBHTGJvb2xlYW4gY29s
b3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFz
ayA9IEdMX1RSVUU7Ci0gICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZiwgc3RlbmNp
bE1hc2tCYWNrID0gMHhmZmZmZmZmZjsKLSAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9IEdMX0NP
TE9SX0JVRkZFUl9CSVQ7Ci0gICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9WQUxVRSwg
Y2xlYXJDb2xvcik7Ci0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgOjpnbEdl
dEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKLSAgICA6OmdsQ29sb3JN
YXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOwotCi0gICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cnMuZGVwdGgpIHsKLSAgICAg
ICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOwotICAg
ICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsKLSAgICAgICAgOjpn
bEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7Ci0gICAgICAgIDo6
Z2xEZXB0aE1hc2soR0xfVFJVRSk7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZG
RVJfQklUOwotICAgIH0KLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICA6OmdsR2V0
SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7Ci0gICAgICAg
IDo6Z2xDbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lM
X1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykpOwotICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSywgcmVpbnRlcnBy
ZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOwotICAgICAgICA6OmdsU3RlbmNpbE1h
c2tTZXBhcmF0ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdM
X1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICB9Ci0KLSAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsK
LQotICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFy
Q29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOwotICAgIDo6Z2xDb2xvck1hc2soY29sb3JNYXNrWzBd
LCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKLSAgICBpZiAoYXR0
cnMuZGVwdGgpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgo
Y2xlYXJEZXB0aCk7Ci0gICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKLSAgICB9Ci0g
ICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbChjbGVhclN0
ZW5jaWwpOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgc3RlbmNp
bE1hc2spOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCBzdGVuY2ls
TWFza0JhY2spOwotICAgIH0KLQotICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3Rh
dGUuYm91bmREcmF3RkJPKTsKLQotICAgIGF1dG8gZXJyb3IgPSA6OmdsR2V0RXJyb3IoKTsKLSAg
ICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViR0ws
ICJGYXRhbDogT3BlbkdMIGVycm9yIGR1cmluZyBHcmFwaGljc0NvbnRleHRHTCBidWZmZXIgaW5p
dGlhbGl6YXRpb24gKCVkKS4iLCBlcnJvcik7Ci0gICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIDo6Z2xGbHVzaCgpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybUdMT2Jq
ZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7
Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7
Ci0gICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZl
cnRleFNoYWRlciktPnZhbHVlOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFw
PFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdzOwotICAgIGZvciAo
Y29uc3QgYXV0byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWluZ01hcCkgewotICAg
ICAgICBjb25zdCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wua2V5OwotICAgICAg
ICAvLyBUaGUgdmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBlYWNoIGluZGV4IG9m
IGFuIGFycmF5IHZhcmlhYmxlLgotICAgICAgICAvLyBXZSBvbmx5IHdhbnQgYSBzaW5nbGUgdmFy
aWFibGUgdG8gcmVwcmVzZW50IHRoZSBhcnJheS4KLSAgICAgICAgaWYgKHN5bWJvbE5hbWUuZW5k
c1dpdGgoIl0iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIERvbid0IGNv
dW50IGJ1aWx0IGluIHZhcnlpbmdzLgotICAgICAgICBpZiAoc3ltYm9sTmFtZSA9PSAiZ2xfRnJh
Z0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwgc3ltYm9sTmFtZSA9
PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25z
dCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWluZ01hcC5maW5kKHN5
bWJvbE5hbWUpOwotICAgICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJhZ21lbnRFbnRyeS52
YXJ5aW5nTWFwLmVuZCgpKQotICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5ncy5hZGQoc3ltYm9s
TmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZhbHVlKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbnVtVmFy
eWluZ3MgPSBjb21iaW5lZFZhcnlpbmdzLnNpemUoKTsKLSAgICBpZiAoIW51bVZhcnlpbmdzKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJs
ZT4gdmFyaWFibGVzOwotICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVkVmFyeWluZ3Muc2l6
ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBjb21iaW5lZFZhcnlp
bmdzLnZhbHVlcygpKQotICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZhcnlpbmdTeW1ib2wp
OwotCi0gICAgR0NHTGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7Ci0jaWYgVVNFKE9QRU5HTF9F
UykKLSAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdW
ZWN0b3JzKTsKLSNlbHNlCi0gICAgaWYgKG1faXNGb3JXZWJHTDIpCi0gICAgICAgIDo6Z2xHZXRJ
bnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwotICAg
IGVsc2UgewotICAgICAgICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMgPSAwOwotICAgICAgICA6
OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFyeWluZ0Zsb2F0cyk7
Ci0gICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0cyAvIDQ7Ci0gICAg
fQotI2VuZGlmCi0gICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1p
dHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRl
ciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQo
bV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Ci0gICAgQVNTRVJUKG1f
c2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0gICAgY29uc3QgYXV0
byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZh
bHVlOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgc2g6OkdM
ZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBl
bnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOwotICAgICAgICB2
ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1h
cHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24pOwotICAgIH0K
LQotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5LnVuaWZvcm1NYXAp
IHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5n
ZXQoKS5tYXBwZWROYW1lOwotICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgPSB2ZXJ0
ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBw
ZWROYW1lLmxlbmd0aCgpKSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wgIT0gdmVydGV4U3lt
Ym9sUHJlY2lzaW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUgIT0gZW50cnkudmFs
dWUuZ2V0KCkucHJlY2lzaW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3Rp
dmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCA9
IHRleHR1cmU7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAg
ICBBU1NFUlQoc2hhZGVyKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJv
Z3JhbSk7Ci0gICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IEFTU0VSVChwcm9ncmFtKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJv
Z3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Ci0gICAgTE9HKFdlYkdM
LCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICA6OmdsQmluZEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHTHVpbnQgZmJvOwotICAg
IGlmIChidWZmZXIpCi0gICAgICAgIGZibyA9IGJ1ZmZlcjsKLSAgICBlbHNlCi0gICAgICAgIGZi
byA9IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBt
X2Zibyk7Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUik7Ci0gICAgQVNTRVJU
KG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAo
ZmJvICE9IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQodGFyZ2V0LCBmYm8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3Rh
dGUuYm91bmRSZWFkRkJPID0gZmJvOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgcmVuZGVyYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgcmVuZGVy
YnVmZmVyKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVy
ZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlLnNl
dEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0YXJnZXQp
OwotICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBm
IGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kQ29s
b3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRXF1YXRpb24o
bW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25T
ZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5k
RXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQotCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBk
ZmFjdG9yKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Ci19ICAgICAgIAotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBz
cmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFs
cGhhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0
IHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgZGF0
YS5idWZTaXplLCBkYXRhLmRhdGEsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJn
ZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwotfQotCi1HQ0dMZW51bSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJn
ZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdM
X0lOVkFMSURfT1BFUkFUSU9OOwotCi0gICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzRVhUKHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXIobWFzayk7
Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBH
Q0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIp
Ci17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1ZSB0byB0
aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKLSAgICAvLyBwb2ludCBhIGdsb2Jh
bCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgotICAgIFNoQnVpbHRJ
blJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7Ci0g
ICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFOR0xFUmVzb3VyY2Vz
Lkhhc2hGdW5jdGlvbjsKLSAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24gPSBuYW1lSGFz
aEZvclNoYWRlcjsKLQotICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICBu
YW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwotICAg
IHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0
KCkpOwotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLQotICAg
IFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT5nZXRUcmFuc2xh
dGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKLQotICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hG
dW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOwotICAgIG1fY29tcGlsZXIuc2V0UmVzb3Vy
Y2VzKEFOR0xFUmVzb3VyY2VzKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIo
bnVsbHB0cik7Ci0KLSAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3Ry
aW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJh
bnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICBp
bnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmxlbmd0
aCgpOwotCi0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBzb3VyY2Ug
LS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuIiwgZ2V0U2hhZGVy
U291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7Ci0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2lu
IHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRyYW5zbGF0ZWQgc2hh
ZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKLQotICAgIDo6Z2xTaGFkZXJT
b3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFkZXJM
ZW5ndGgpOwotICAgIAotICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgCi0gICAg
aW50IGNvbXBpbGVTdGF0dXM7Ci0gICAgCi0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09N
UElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKLQotICAgIFNoYWRlclNvdXJjZU1hcDo6aXRl
cmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIFNoYWRl
clNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0KLSAgICAvLyBQb3B1bGF0ZSB0
aGUgc2hhZGVyIGxvZwotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2
KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAgIGlmIChsZW5ndGgp
IHsKLSAgICAgICAgR0xzaXplaSBzaXplID0gMDsKLSAgICAgICAgVmVjdG9yPEdMY2hhcj4gaW5m
byhsZW5ndGgpOwotICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwg
JnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNb
Ml0gPSB7IHNoYWRlciwgMCB9OwotICAgICAgICBlbnRyeS5sb2cgPSBnZXRVbm1hbmdsZWRJbmZv
TG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwotICAgIH0KLQotICAg
IGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9
IGZhbHNlOwotICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRyYW5zbGF0b3IgcHJv
ZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUuIik7Ci0gICAgfQot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hNYXA8UGxh
dGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVy
U291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRy
eSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAgY29uc3QgQ1N0cmluZyYgc2hhZGVyU291
cmNlQ1N0cmluZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogc2hhZGVy
U291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7Ci0gICAgaW50IHNoYWRlclNv
dXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBMT0coV2Vi
R0wsICItLS0gYmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBkaXJl
Y3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7Ci0KLSAgICA6OmdsU2hh
ZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRlclNvdXJjZUxlbmd0
aCk7Ci0KLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotCi0gICAgaW50IGNvbXBpbGVT
dGF0dXM7Ci0KLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNv
bXBpbGVTdGF0dXMpOwotCi0gICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xfVFJVRSkgewotICAg
ICAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRGlyZWN0IGNv
bXBpbGF0aW9uIG9mIHNoYWRlciBzdWNjZWVkZWQuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
ZW50cnkuaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogZGlyZWN0
IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5k
UmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlh
cyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAg
IHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KSk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6
OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsK
LSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGF0dHJz
ID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZC
TyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBt
X3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIHJlc29s
dmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSLCBtX2Zibyk7Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAo
YXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVG
Qk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ3VsbEZhY2UobW9kZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBmdW5j
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChw
cm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xlbnVtIGNh
cCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsRGlzYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNv
dW50KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0gICAgY2hlY2tHUFVT
dGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRz
KEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0
ciBvZmZzZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnBy
ZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotICAgIGNo
ZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJs
ZShHQ0dMZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmaW5pc2goKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGaW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRh
cmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUy
REVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJl
KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVu
dW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdlbmVyYXRl
TWlwbWFwKHRhcmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihw
cm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXpl
KTsKLSAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJ
VkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBH
THNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0
eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhBdHRy
aWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAg
aWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3RyaW5n
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9M
X1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAK
LSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1l
TGVuZ3RoKTsKLSAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIGF0
dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFt
ZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQot
ICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAg
IGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIEdDR0xpbnQgc3ltYm9s
Q291bnQ7Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5m
aW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHBy
b2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywgJnN5bWJvbENvdW50
KTsKLSAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChw
cm9ncmFtKTsKLSAgICB9Ci0gICAgCi0gICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1i
b2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOwotICAgIEdDR0x1aW50IHJhd0luZGV4ID0gKGluZGV4
IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5zaXplKCkp
ID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcFtpbmRleF0g
OiAtMTsKLQotICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIHJhd0luZGV4
LCBpbmZvKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZl
SW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFt
LCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwotCi0gICAg
VmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9VTklGT1JN
X01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNpemVpIG5hbWVM
ZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAg
ICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZu
YW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5n
dGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTdHJpbmcgb3JpZ2luYWxOYW1l
ID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JN
LCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBM
T0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZvcm0gJWQgZnJvbSAn
JXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwg
b3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAgCi0gICAgaW5mby5uYW1l
ID0gb3JpZ2luYWxOYW1lOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0g
c2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIEdDR0xpbnQgc3ltYm9sQ291bnQ7Ci0gICAg
YXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0p
OwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkp
IHsKLSAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBo
aWNzQ29udGV4dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7Ci0gICAgICAgIHJl
c3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAg
fQotICAgIAotICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVz
dWx0LT52YWx1ZTsKLSAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50
cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMu
ZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsKLSAgICAKLSAgICBy
ZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSogY291bnQs
IFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFk
ZXJzKTsKLX0KLQotc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUoY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5hbWU7
Ci0gICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFtZS51dGY4KCkuZGF0
YSgpLCBuYW1lLmxlbmd0aCgpKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygid2ViZ2xfIiwgaGV4
KG51bWJlciwgTG93ZXJjYXNlKSk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9
IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOwotICAgIGF1dG8gc3ltYm9sRW50
cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKLSAgICBpZiAoc3ltYm9sRW50cnkgPT0gc3ltYm9s
TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgYXV0byYgbWFw
cGVkTmFtZSA9IHN5bWJvbEVudHJ5LT52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOwotICAgIHJldHVy
biBTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKTsKLX0KLQot
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0
IFN0cmluZyYgbmFtZSkKLXsKLSAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwotICAgIFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3Jh
bSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLQotICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgewotICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNo
YWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYg
KG1hcHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAg
IH0KLQotICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hhZGVy
cyBhZnRlciBsaW5raW5nLgotICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAuZmlu
ZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgpKSB7
Ci0gICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgICAgIGF1
dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRl
cnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgICAgIG1hcHBlZE5hbWUg
PSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3lt
Ym9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0
dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ltYm9sVHlwZSA9PSBT
SEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHkoKSkgewotICAgICAg
ICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkgYmUgcmVxdWVzdGVk
IGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCi0gICAgICAgIC8vIGFuZCBh
cmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIgcHJvZ3JhbS4KLSAg
ICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgICAgICBuYW1lSGFzaE1h
cEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwotICAgICAgICBzZXRD
dXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFkZXJzLmdldCgpKTsK
LQotICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hlZE5hbWUobmFtZSk7
Ci0KLSAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51bGxwdHIpOwotCi0g
ICAgICAgIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVyYXRlZE5hbWUsIG5h
bWUpOwotCi0gICAgICAgIHJldHVybiBnZW5lcmF0ZWROYW1lOwotICAgIH0KLQotICAgIHJldHVy
biBuYW1lOwotfQotCi1zdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUp
Ci17Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0g
ICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFs
dWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOwotICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50
cnkgOiBzeW1ib2xNYXApIHsKLSAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUu
Z2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQotICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5
LmtleTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBu
YW1lKQotewotICAgIEdDR0xzaXplaSBjb3VudDsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cnNbMl07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVy
cyk7Ci0gICAgCi0gICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0g
ICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAg
ICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIg
bGlua2luZy4KLSAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQocHJvZ3Jh
bSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgewotICAgICAg
ICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOwotICAgICAgICBhdXRvIG9yaWdp
bmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5m
aXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCi0gICAg
ICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgICAgIG9yaWdpbmFsTmFt
ZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5zZWNvbmQs
IHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQotICAgICAgICAg
ICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIGlmIChzeW1ib2xU
eXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSBy
ZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKLSAgICAgICAg
Ly8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9n
cmFtLgotCi0gICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2libHlVbnVzZWRBdHRy
aWJ1dGVNYXAuZmluZChuYW1lKTsKLSAgICAgICAgaWYgKGNhY2hlZCAhPSBtX3Bvc3NpYmx5VW51
c2VkQXR0cmlidXRlTWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC0+dmFsdWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0sIHNp
emVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGZvciAoc2l6ZV90IHN5bWJv
bFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oU0hBREVSX1NZTUJP
TF9UWVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJh
dG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7Ci0gICAgICAg
ICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBTaGFkZXJTeW1i
b2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0YXRpY19jYXN0PGVu
dW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7Ci0gICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotfQotCi1pbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0
dXJuIC0xOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IC0xOwotCi0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3Jh
bSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Ci0gICAgTE9HKFdlYkdMLCAi
OjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5k
YXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1pbnQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3Jh
bSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIC0xOwotCi0KLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBt
b3ZlZEFuRXJyb3IgPSBmYWxzZTsKLQotICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2Yg
MTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCi0gICAgLy8gYSBwcm9ibGVtIGRy
aXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9yLgot
ICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19FUlJP
Ui4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKLSAgICAgICAgR0NH
TGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7Ci0gICAgICAgIGlmIChlcnJvciA9PSBOT19FUlJP
UikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJy
b3IpOwotICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBt
b3ZlZEFuRXJyb3I7Ci19Ci0KLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRF
cnJvcigpCi17Ci0gICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVy
cm9yIGxpc3QgaW4gY2FzZQotICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFscmVhZHkgdGhlcmUs
IHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCi0gICAgICAgIC8vIGdsR2V0RXJy
b3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3IgY29kZSBvbmNlLgot
ICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICAgICAgcmV0dXJu
IG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOwotICAgIH0KLQotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLQot
ICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKLX0KLQotR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQotewotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAg
ICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVy
biA6OmdsSXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0g
ICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAg
cmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKLX0KLQotR0NHTGJvb2xl
YW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0K
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7
Ci0KLSAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
cmVuZGVyYnVmZmVyKQotewotICAgIGlmICghcmVuZGVyYnVmZmVyKQotICAgICAgICByZXR1cm4g
R0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1
ZmZlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRl
cihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlcikKLSAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOwot
fQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRm
b3JtR0xPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHJldHVy
biBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0IHdpZHRo
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJU
KHByb2dyYW0pOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotCi0gICAgR0NHTHNpemVpIGNvdW50ID0gMDsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0gPSB7IH07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3Vu
dCwgc2hhZGVycyk7Ci0KLSAgICBpZiAoY291bnQgPT0gMikKLSAgICAgICAgbV9saW5rZWRTaGFk
ZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0sIHNoYWRlcnNbMV0p
KTsKLQotICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0p
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NHTGZsb2F0IHVu
aXRzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dM
Ym9vbGVhbiBpbnZlcnQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFNjaXNzb3IoeCwg
eSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNo
YWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLQotICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5OwotCi0g
ICAgZW50cnkuc291cmNlID0gc3RyaW5nOwotCi0gICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNo
YWRlciwgV1RGTW92ZShlbnRyeSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51
bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNpbEZ1bmNTZXBh
cmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNr
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0
ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRl
KGZhY2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
T3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xT
dGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZmFpbCwg
R0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsT3BTZXBhcmF0ZShm
YWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xm
bG9hdCB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVGV4UGFyYW1ldGVy
aSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZv
cm0xZihsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJy
YXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUsIGFycmF5LmRhdGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0yZihsb2Nh
dGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQot
ewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0yZnYobG9jYXRp
b24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwg
R0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zZihsb2NhdGlvbiwgdjAs
IHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAg
ICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBh
cnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xm
bG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm00Zihsb2Nh
dGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
YXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGludD4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5p
Zm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0y
aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xp
bnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zaShsb2NhdGlvbiwg
djAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17Ci0g
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNpdihsb2NhdGlvbiwg
YXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGlu
dCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2
MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17
Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRpdihsb2NhdGlv
biwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkp
Ci17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybU1hdHJpeDNm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAxNikpOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRyYW5zcG9zZSwgYXJy
YXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWYWxpZGF0ZVBy
b2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJp
YjFmKGluZGV4LCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAxPiBh
cnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwg
djAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
MmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IGFycmF5KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZs
b2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliM2Yo
aW5kZXgsIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwg
Mz4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQg
djMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWludCBpbmRl
eCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmli
NGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dM
aW50cHRyIG9mZnNldCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19j
YXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi1Q
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJh
eSgpCi17Ci0gICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQ
bGF0Zm9ybUdMT2JqZWN0IGFycmF5KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5kZWxldGVWZXJ0
ZXhBcnJheU9FUyhhcnJheSk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCi17Ci0gICAgcmV0dXJu
IGdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJy
YXkpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBu
YW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEJvb2xlYW52KHBuYW1l
LCB2YWx1ZS5kYXRhKTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAg
IEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLQotICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxv
YXQ+IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmRhdGEpOwotfQotCi1HQ0dM
aW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFt
ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0NHTGludDY0IHZhbHVlID0gMDsKLSAg
ICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dp
dGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBX
ZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgotICAgIC8vIDo6Z2xHZXRJbnRlZ2Vy
NjR2KHBuYW1lLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50NjQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1
aW50IGluZGV4KQotewotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KGluZGV4KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7Ci0gICAgLy8gRklYTUUgMTQxMTc4OiBCZWZv
cmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5o
IGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3Bl
bkdMIEVTIDMuMC4KLSAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1lLCBpbmRleCwgdmFs
dWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKLSAgICAg
ICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVO
VCwgZWl0aGVyIHdvcmtzLgotICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2
YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWko
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBHQ0dMaW50IHZhbHVl
ID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAmdmFsdWUpOwotICAg
IHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9u
QnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQotewotICAgIEFTU0VSVChBQ1RJVkVfQVRUUklCVVRF
UyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOwotICAgIGlmICghdmFsdWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5
bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclBy
b2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICAqdmFsdWUgPSByZXN1bHQtPnZh
bHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0aXZlU2hhZGVyU3lt
Ym9sQ291bnRzKCkpOwotICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRz
ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKS0+dmFsdWU7Ci0K
LSAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxkIGEgZmlsdGVyZWQg
Y291bnQsIGFuZCBhIG1hcHBpbmcgb2YKLSAgICAvLyBvdXIgaW50ZXJuYWwgYXR0cmlidXRlcyBp
bmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUgT3BlbkdMLgotICAg
IEdDR0xpbnQgYXR0cmlidXRlQ291bnQgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7Ci0gICAgZm9yIChHQ0dMaW50
IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgewotICAgICAgICBBY3RpdmVJbmZvIGlu
Zm87Ci0gICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwgaW5mbyk7Ci0gICAg
ICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4
TWFwLmFwcGVuZChpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRG8gdGhlIHNhbWUgZm9yIHVuaWZv
cm1zLgotICAgIEdDR0xpbnQgdW5pZm9ybUNvdW50ID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2
KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Ci0gICAgZm9yIChHQ0dM
aW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKLSAgICAgICAgQWN0aXZlSW5mbyBp
bmZvOwotICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKLSAg
ICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAKLSAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlm
b3JtSW5kZXhNYXAuYXBwZW5kKGkpOwotICAgIH0KLSAgICAKLSAgICAqdmFsdWUgPSBzeW1ib2xD
b3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwg
R0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKLXsKLSAgICBMT0coV2ViR0wsICJP
cmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBK
U0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAxMjM0NTY3ODlhYmNk
ZWZBQkNERUZdKyIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRMb2c7Ci0gICAgCi0g
ICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8gdGhlIHNoYWRlciBz
b3VyY2UgdGhhdAotICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBjb21waWxlcnMuIFRo
ZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKLSAgICAvLyB0aGlzIHdhcm5pbmcgdG8gdGhlIHVzZXIg
c2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAotICAgIC8vIGlzIGNhdXNpbmcg
aXQuCi0gICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYW5nbGVXYXJuaW5n
IHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRlcjUnIGlzIG5vdCBz
dXBwb3J0ZWRcbiJfcyB9OwotICAgIGludCBzdGFydEZyb20gPSBsb2cuc3RhcnRzV2l0aChhbmds
ZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsKLSAgICBpbnQgbWF0
Y2hlZExlbmd0aCA9IDA7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGludCBzdGFydCA9IHJlZ0V4cC5t
YXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOwotICAgICAgICBpZiAoc3RhcnQg
PT0gLTEpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5k
KGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkpOwotICAgICAgICBz
dGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7Ci0KLSAgICAgICAgY29uc3QgU3RyaW5n
JiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hlZExlbmd0aCk7Ci0g
ICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3ltYm9sTmFtZShzaGFk
ZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7Ci0gICAgICAgIExPRyhXZWJHTCwgIkRlbWFuZ2xp
bmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBtYXBwZWRTeW1ib2wu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobWFwcGVkU3ltYm9s
KTsKLSAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+KGxvZy5sZW5ndGgo
KSkpOwotCi0gICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwg
bG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7Ci0KLSAgICBMT0coV2ViR0wsICJVbm1hbmdsZWQg
U2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBHTGludCBsZW5ndGgg
PSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAm
bGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQot
ICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwot
ICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmRh
dGEoKSk7Ci0KLSAgICBHQ0dMc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXJzWzJdOwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRl
cnMpOwotCi0gICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgY291bnQsIFN0
cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIDo6Z2xHZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2YWx1
ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgQVNTRVJUKHNoYWRl
cik7Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotCi0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBt
X3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgCi0gICAgc3dpdGNoIChwbmFtZSkg
ewotICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKLSAgICBjYXNlIFNIQURFUl9UWVBFOgotICAgICAg
ICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRl
clNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8aW50Pihy
ZXN1bHQtPnZhbHVlLmlzVmFsaWQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElORk9fTE9H
X0xFTkdUSDoKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkK
LSAgICAgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgotICAgICAgICB2
YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VOVU0pOwot
ICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBB
U1NFUlQoc2hhZGVyKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgY29uc3QgU2hhZGVyU291
cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKLSAgICBpZiAoIWVudHJ5LmlzVmFsaWQp
Ci0gICAgICAgIHJldHVybiBlbnRyeS5sb2c7Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAg
IDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0g
ICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICBHTHNpemVp
IHNpemUgPSAwOwotICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKLSAgICA6OmdsR2V0
U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAg
IFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07Ci0gICAgcmV0dXJu
IGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXpl
KSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNl
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwot
ICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsgCi0KLSAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3VyY2U7Ci19Ci0KLUdD
R0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0
dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQ
YXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGlu
dCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIHZhbHVlOwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFs
dWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0s
IGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldFVuaWZvcm1pdihwcm9ncmFtLCBs
b2NhdGlvbiwgdmFsdWUuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0p
OwotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
LX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFT
U0VSVChwcm9ncmFtKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiAtMTsKLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShw
cm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7Ci0gICAgTE9HKFdlYkdM
LCAiOjpnZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gOjpnbEdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1H
Q0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNl
dChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHZvaWQqIHBvaW50ZXIgPSAw
OwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVy
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJldF9jYXN0
PGludHB0cl90Pihwb2ludGVyKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhv
ZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhl
bHMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgIVVTRShPUEVOR0xfRVMpCi0gICAgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpCi0g
ICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKLSNlbmRpZgotCi0gICAgaWYgKG1fdXNp
bmdDb3JlUHJvZmlsZSkgIHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHZhbHVl
cyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNvcmUgcHJv
ZmlsZSwgc28gd2UgbmVlZAotICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBhcyB3ZSBkbyBpbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgotICAgICAgICBzd2l0Y2ggKGZv
cm1hdCkgewotICAgICAgICBjYXNlIEFMUEhBOgotICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5n
IEdMX1JFRCB0byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCi0gICAgICAg
ICAgICBmb3JtYXQgPSBSRUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMVU1J
TkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkcgdG8gYmFjayBH
TF9MVU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAgICAgICAgICAgIGZv
cm1hdCA9IFJHOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5l
ZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdl
IGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KLSAgICA6OmdsVGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscy5kYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwg
ZGF0YS5kYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3Vy
cmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdl
U2l6ZSwgZGF0YS5kYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBn
bEdlbkJ1ZmZlcnMoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQg
byA9IDA7Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwot
fQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9n
cmFtKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKLX0KLQotUGxhdGZvcm1HTE9iamVj
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWlu
dCBvID0gMDsKLSAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBv
OwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
aGFkZXIoR0NHTGVudW0gdHlwZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBG
UkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7
Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRl
eHR1cmUoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOwotICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJh
bWVidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmRE
cmF3RkJPKTsKLSAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pIHsK
LSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUg
dXNlZCBmb3IgZHJhd2luZwotICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVs
ZXRlZC4KLSAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci0g
ICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0pCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwot
ICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVy
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5VmFsdWUp
IHsKLSAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7Ci0gICAg
fSk7Ci0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci0gICAgbV9zdGF0ZS50ZXh0
dXJlU2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCi17Ci0gICAgLy8g
TmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxp
c3QgdG8KLSAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBzbyBhIGNhbGxlciB0
byBnZXRFcnJvciB3aWxsIGdldAotICAgIC8vIGFueSBlcnJvcnMgZnJvbSBnbEVycm9yIGJlZm9y
ZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemluZy4KLSAgICBtb3ZlRXJyb3JzVG9TeW50aGV0
aWNFcnJvckxpc3QoKTsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0KCkKLXsKLSAgICBm
b3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGll
bnQtPmZvcmNlQ29udGV4dExvc3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVjeWNsZUNvbnRleHQoKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVj
dG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRleHQoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlm
aWNhdGlvbigpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGll
bnRzKSkKLSAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9u
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3Qo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5h
ZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQg
Zmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBnZXRF
eHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBjb3VudCwg
cHJpbWNvdW50KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNp
emVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHBy
aW1jb3VudCkKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5H
TEUobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKLSAgICBjaGVja0dQVVN0
YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJE
aXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQotewotICAgIGdldEV4dGVu
c2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwotfQotCi0j
aWYgSEFWRShPUEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRleCkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsUHJp
bWl0aXZlUmVzdGFydEluZGV4KGluZGV4KTsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29uc3Qgdm9pZCogZGF0
YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQot
ewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLSAg
ICBVTlVTRURfUEFSQU0odXNhZ2UpOwotICAgIFVOVVNFRF9QQVJBTShzcmNPZmZzZXQpOwotICAg
IFVOVVNFRF9QQVJBTShsZW5ndGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RCeXRlT2Zmc2V0
LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxlbmd0
aCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZHN0Qnl0
ZU9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY0RhdGEpOwotICAgIFVOVVNFRF9QQVJBTShz
cmNPZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotfQotCi0jaWYgSEFWRShPUEVO
R0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFy
Z2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xz
aXplaXB0ciBzaXplKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRh
cmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwotfQotI2Vsc2UKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtLCBHQ0dMZW51
bSwgR0NHTGludHB0ciwgR0NHTGludHB0ciwgR0NHTHNpemVpcHRyKQotewotfQotI2VuZGlmCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpCi17Ci0j
aWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgR0NHTHZvaWQqIHB0ciA9IDo6Z2xN
YXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBHcmFwaGljc0NvbnRl
eHRHTDo6TUFQX1JFQURfQklUKTsKLSAgICBpZiAoIXB0cikKLSAgICAgICAgcmV0dXJuOwotICAg
IG1lbWNweShkYXRhLmRhdGEsIHB0ciwgZGF0YS5idWZTaXplKTsKLSAgICBpZiAoITo6Z2xVbm1h
cEJ1ZmZlcih0YXJnZXQpKQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0
KTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci0g
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
KTsKLSNlbmRpZgotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFt
ZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dM
aW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBH
Q0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQotewotICAg
IFVOVVNFRF9QQVJBTShzcmNYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1kwKTsKLSAgICBVTlVT
RURfUEFSQU0oc3JjWDEpOwotICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRzdFgwKTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WTApOwotICAgIFVOVVNFRF9QQVJBTShk
c3RYMSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKLSAgICBVTlVTRURfUEFSQU0obWFzayk7
Ci0gICAgVU5VU0VEX1BBUkFNKGZpbHRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
YXR0YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IGxheWVyKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJB
TShhdHRhY2htZW50KTsKLSAgICBVTlVTRURfUEFSQU0odGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGxldmVsKTsKLSAgICBVTlVTRURfUEFSQU0obGF5ZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdDR0xlbnVtIHRh
cmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Ci0gICAgVU5V
U0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0od2lk
dGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
c3JjKTsKLX0KLQotI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxH
Q0dMaW50PiBkYXRhKQotewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEludGVybmFsZm9ybWF0
aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRh
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlu
dGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIFVOVVNFRF9QQVJB
TShidWZTaXplKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKLSNlbmRpZgotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xUZXhTdG9yYWdl
MkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xU
ZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJl
bnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0jZWxzZQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dM
U3BhbjxHQ0dMaW50PikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVt
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3RvcmFnZTNEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTHNpemVpKQotewotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAg
ICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwotICAgIFVO
VVNFRF9QQVJBTSh4b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oeW9mZnNldCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHpvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFS
QU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0
KTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKG5hbWUpOwotCi0gICAg
cmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0
aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWlu
dCB2MSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh2
MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEsIEdDR0x1aW50IHYyKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5V
U0VEX1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFSQU0odjEpOwotICAgIFVOVVNFRF9QQVJBTSh2
Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWkoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVp
bnQgdjMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
djApOwotICAgIFVOVVNFRF9QQVJBTSh2MSk7Ci0gICAgVU5VU0VEX1BBUkFNKHYyKTsKLSAgICBV
TlVTRURfUEFSQU0odjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkK
LXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0g
ICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShk
YXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4
M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
dHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwot
ICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJB
TShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9Q
QVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGluZGV4LCBHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwot
ICAgIFVOVVNFRF9QQVJBTSh6KTsKLSAgICBVTlVTRURfUEFSQU0odyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5k
ZXgpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBH
Q0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQotewotICAgIFVOVVNFRF9QQVJBTShp
bmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBV
TlVTRURfUEFSQU0oeik7Ci0gICAgVU5VU0VEX1BBUkFNKHcpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBpbmRleCwgR0NHTFNw
YW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgp
OwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsK
LSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICBV
TlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0cmlkZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdS
YW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQs
IEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGFydCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGVuZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKLSAgICBVTlVTRURfUEFS
QU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBidWZz
KQotewotICAgIFVOVVNFRF9QQVJBTShidWZzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZl
ciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShi
dWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0o
dmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1
aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdD
R0x1aW50PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKLXsK
LSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7
Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQotewotICAgIFVOVVNFRF9QQVJBTShi
dWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0o
ZGVwdGgpOwotICAgIFVOVVNFRF9QQVJBTShzdGVuY2lsKTsKLX0KLQotUGxhdGZvcm1HTE9iamVj
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQotewotICAgIHJldHVybiAw
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeShQbGF0Zm9y
bUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci19Ci0KLUdDR0xi
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3Qg
cXVlcnkpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeShHQ0dMZW51bSB0
YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQotewotICAgIFVOVVNFRF9QQVJBTSh0
YXJnZXQpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWko
UGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHF1ZXJ5KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIHJldHVybiAwOwotfQot
Ci1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVy
KCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNhbXBsZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0o
c2FtcGxlcik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2Ft
cGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0odW5pdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBs
ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVy
aShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFt
KQotewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUp
OwotICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7
Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW0pOwotfQot
Ci1HQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJm
KFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDAu
ZjsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFt
ZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKLQotewotICAg
IFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIHJl
dHVybiAwOwotfQotCi1HQ0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5j
KEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQotewotICAgIFVOVVNFRF9Q
QVJBTShjb25kaXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyhHQ0dM
c3luYyBzeW5jKQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyhHQ0dMc3lu
YyBzeW5jKQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLX0KLQotR0NHTGVudW0gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRm
aWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQotewotICAgIFVOVVNFRF9QQVJBTShzeW5j
KTsKLSAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwotICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsK
LQotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0
U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbnQ2NCB0aW1lb3V0
KQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwot
ICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHN5bmMpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRyYW5zZm9ybUZlZWRiYWNrKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVj
dCBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlk
KQotewotICAgIFVOVVNFRF9QQVJBTShpZCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlkKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQotewot
ICAgIFVOVVNFRF9QQVJBTShwcmltaXRpdmVNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZm
ZXJNb2RlKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0o
dmFyeWluZ3MpOwotICAgIFVOVVNFRF9QQVJBTShidWZmZXJNb2RlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKQotewotICAgIFVO
VVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCkKLXsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2so
KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZShH
Q0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikK
LXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwot
ICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6
ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgp
OwotICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwot
ICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLX0KLQotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQotewotICAgIFVOVVNFRF9QQVJB
TShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybU5hbWVzKTsKLQotICAgIHJldHVy
biB7IH07Ci19Ci0KLVZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NH
THVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVmVjdG9yPEdD
R0xpbnQ+IHJlc3VsdCh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOwotI2lmIEhBVkUoT1BFTkdM
XzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICA6Omds
R2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZv
cm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHJlc3VsdC5kYXRhKCkpOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSNlbmRpZgotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmlu
ZyYgdW5pZm9ybUJsb2NrTmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja05hbWUpOwotICAgIHJldHVybiAwOwotfQotCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkKLXsKLSAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0lu
ZGV4KTsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5n
KQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9y
bUJsb2NrSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tCaW5kaW5nKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBVTlVTRURfUEFS
QU0oeCk7Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci0gICAgVU5VU0VEX1BBUkFNKGZvcm1hdCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWlu
dCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICBVTlVTRURfUEFSQU0ocG5h
bWUpOwotICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSAsIEdDR0xpbnRwdHIp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NH
TGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBH
Q0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTGludHB0
cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51
bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGlu
dCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdD
R0xlbnVtLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dM
aW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0s
IEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGlu
dCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdD
R0xlbnVtLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXpl
aSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTGludHB0cikK
LXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xp
bnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBH
Q0dMc2l6ZWksIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50
PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xF
KEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNp
emVpPiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQotewotICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzQU5HTEUoR0NH
TGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xT
cGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50Piwg
R0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKLXsKLSAgICBBU1NFUlQo
dW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIgfHwgdW5wYWNrQWxp
Z25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOwotICAgIFVuaXF1ZUFycmF5PHVu
c2lnbmVkIGNoYXI+IHplcm87Ci0gICAgdW5zaWduZWQgc2l6ZSA9IDA7Ci0gICAgaWYgKHdpZHRo
ID4gMCAmJiBoZWlnaHQgPiAwKSB7Ci0gICAgICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwot
ICAgICAgICBwYXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50OwotICAgICAgICBHQ0dM
ZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgs
IGhlaWdodCwgMSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIGlm
IChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHNpemUp
OwotICAgICAgICBpZiAoIXplcm8pIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAg
fQotICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4oemVyby5nZXQoKSwgc2l6
ZSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
ICYmICFVU0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuY3BwCmluZGV4IGU2NmUwMGFkYjI4NzVhZGY2OWExOTdmY2M2OTIzMTZkYTZmOTZlNmUu
LmQyOTlhMTlmYTg2NjM5NzU1MmRkNmRlNzg4MGNjYTQzMzgyZjI4YTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwCkBAIC0yOCw5ICsyOCwxMyBA
QAogI2lmIEVOQUJMRShXRUJHTCkKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaCIKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogCisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUuaCIKKyNlbHNlCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIK
KyNlbmRpZgogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXImIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpCkBA
IC01Niw3ICs2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpkaXNw
bGF5V2FzUmVjb25maWd1cmVkKCkKIH0KICNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMTWFuYWdlcjo6YWRkQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4
dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRDb250ZXh0KFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0wqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwog
ICAgIGlmICghY29udGV4dCkKQEAgLTY2LDcgKzcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRl
eHQKICAgICBtX2NvbnRleHRzLmFwcGVuZChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXI6OnJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6cmVtb3Zl
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKiBjb250ZXh0KQogewogICAgIGlmICgh
bV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oCmluZGV4IDBlZjg2ZGM2ZGU3ZjIx
ZDVlOGU5MTIwZTlhMzJiMGE4YjFmMWY3MzEuLmQxNDgzNDEwZDAyM2Y4MzAzNmQ5Nzg1NjQzNWZh
ZTU1ODRiMDQ2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5h
Z2VyLmgKQEAgLTM2LDE1ICszNiwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IHVu
c2lnbmVkIE1heENvbnRleHRzID0gMTY7CiAKKyNpZiBVU0UoQU5HTEUpCitjbGFzcyBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOworI2Vsc2UKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwor
I2VuZGlmCiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlciB7CiAgICAgZnJp
ZW5kIE5ldmVyRGVzdHJveWVkPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcj47CiBwdWJs
aWM6CisjaWYgVVNFKEFOR0xFKQorICAgIHVzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wg
PSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOworI2Vsc2UKKyAgICB1c2luZyBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYKKwogICAgIHN0
YXRpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXImIHNoYXJlZE1hbmFnZXIoKTsKICAg
ICAKLSAgICB2b2lkIGFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKLSAgICB2
b2lkIHJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lkIGFk
ZENvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCopOworICAgIHZvaWQgcmVtb3ZlQ29u
dGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKik7CiAgICAgCiAgICAgdm9pZCByZWN5Y2xl
Q29udGV4dElmTmVjZXNzYXJ5KCk7CiAgICAgYm9vbCBoYXNUb29NYW55Q29udGV4dHMoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHRzLnNpemUoKSA+PSBNYXhDb250ZXh0czsgfQpAQCAtNTksNyAr
NjksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlcigpID0gZGVmYXVsdDsKIAotICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTCo+
IG1fY29udGV4dHM7CisgICAgVmVjdG9yPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wqPiBtX2Nv
bnRleHRzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyLmNwcAppbmRleCAwNTc1NDQ0OGI5MDNlMTQ5OTNlZDMxYjBjYmQ2MWU4Njk0YTllZTk5
Li41YmMwNTIwN2MzMTNhZTY5ZGNkNWYyZWM3YTdiNWJjNDMxNzJmYjk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtOTEsOCArOTEsNiBA
QCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVy
ZU1hcHBlcihHcmFwaGljc0NvbnRleHRHTAogewogfQogCi0vLyBGSVhNRTogQmVsb3cgZnVuY3Rp
b25hbGl0eSBzaG91bGQgYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
IHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgotCiBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0w+
IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQg
PSBmYWxzZTsKQEAgLTEyNSw3NiArMTIzLDM2IEBAIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTD4g
Y3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4CiAg
ICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQorUGxh
dGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKIHsKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAgIG1faXNGb3JXZWJHTDIgPSBhdHRy
aWJ1dGVzLndlYkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2Vi
R0wyOwotI2VuZGlmCiAjaWYgVVNFKE5JQ09TSUEpCi0gICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtl
VW5pcXVlPE5pY29zaWE6OkdDR0xBTkdMRUxheWVyPigqdGhpcyk7CisgICAgcmV0dXJuICZtX25p
Y29zaWFMYXllci0+Y29udGVudExheWVyKCk7CiAjZWxzZQotICAgIG1fdGV4bWFwTGF5ZXIgPSBt
YWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOworICAgIHJl
dHVybiBtX3RleG1hcExheWVyLmdldCgpOwogI2VuZGlmCi0gICAgYm9vbCBzdWNjZXNzID0gbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsK
LQotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0
cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCi0K
LSAgICBHTGVudW0gdGV4dHVyZVRhcmdldCA9IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7
Ci0gICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50by4KLSAgICBnbDo6R2VuVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQs
IG1fdGV4dHVyZSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVY
VFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1
cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4
UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9f
RURHRSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFy
Z2V0LCAwKTsKK30KIAotICAgIC8vIENyZWF0ZSBhbiBGQk8uCi0gICAgZ2w6OkdlbkZyYW1lYnVm
ZmVycygxLCAmbV9mYm8pOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IG1fZmJvKTsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorUmVmUHRyPE1lZGlhU2FtcGxlPiBH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01l
ZGlhU2FtcGxlKCkKK3sKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgIGlmIChhdXRvIHBpeGVsQnVm
ZmVyID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCkpCisgICAgICAgIHJldHVybiBNZWRpYVNhbXBs
ZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2VTYW1wbGUoV1RGTW92ZSgqcGl4ZWxCdWZmZXIpKTsKKyNl
bmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorI2VuZGlmCiAKLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9jb21wb3NpdG9yVGV4dHVy
ZSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdf
RklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQs
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVy
aSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0g
ICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpOwotCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0
ZVRleHR1cmUpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX2ludGVybWVk
aWF0ZVRleHR1cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRl
eFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVf
V1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLQotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJl
VGFyZ2V0LCAwKTsKKyNpZiBFTkFCTEUoVklERU8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlcjo6Y29weVRleHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgUGxh
dGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMZW51bSBvdXRwdXRUYXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK3sKKyAgICByZXR1
cm4gcGxheWVyLmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSh0aGlzLCBvdXRwdXRU
ZXh0dXJlLCBvdXRwdXRUYXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBwcmVtdWx0aXBseUFscGhhLCBmbGlwWSk7Cit9CiAjZW5kaWYKIAotICAgIC8vIENyZWF0ZSBh
IG11bHRpc2FtcGxlIEZCTy4KLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9z
dGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAg
ICAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0g
ICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211
bHRpc2FtcGxlRkJPOwotICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRy
aWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJp
bmQgY2FudmFzIEZCTy4KLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgbV9mYm8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRS
ZWFkRkJPID0gbV9mYm87Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmli
dXRlcy5kZXB0aCkKLSAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQorLy8gRklYTUU6IEJlbG93IGZ1bmN0aW9uYWxpdHkgc2hv
dWxkIGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciB0byBzaW1wbGlm
eSB0aGUgYmFzZSBjbGFzcy4KIAotICAgIGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotfQot
I2Vsc2UKKyNpZiAhVVNFKEFOR0xFKQogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQog
ICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcykKIHsKQEAgLTMyMiw1MCArMjgwLDcg
QEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKIAogICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAs
IDApOwogfQotI2VuZGlmCiAKLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwotICAgIGJv
b2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7Ci0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgZ2w6OkRlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAg
ICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgYXV0byBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewot
ICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRkJPKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKSB7Ci0jaWYgIVVTRShBTkdMRSkgJiYgVVNFKE9QRU5HTF9FUykKLSAg
ICAgICAgaWYgKG1fZGVwdGhCdWZmZXIpCi0gICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnMoMSwgJm1fZGVwdGhCdWZmZXIpOwotCi0gICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCi0g
ICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7Ci0j
ZW5kaWYKLSAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAgZ2w6
OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0g
ICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLSAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4
dHVyZSk7Ci0jZW5kaWYKLQotI2lmIFVTRShDQUlSTykKLSAgICBpZiAobV92YW8pCi0gICAgICAg
IGRlbGV0ZVZlcnRleEFycmF5KG1fdmFvKTsKLSNlbmRpZgotfQotI2Vsc2UKIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogewogICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhp
cyk7CkBAIC00MDYsNyArMzIxLDYgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCgpCiAgICAgICAgIGRlbGV0ZVZlcnRleEFycmF5KG1fdmFvKTsKICNl
bmRpZgogfQotI2VuZGlmIC8vIFVTRShBTkdMRSkKIAogYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKQEAgLTQyMywyNSArMzM3LDE0IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3RhdHVzKCkKIAogYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CiB7Ci0jaWYgVVNFKEFO
R0xFKQotICAgIHJldHVybiBtX2lzRm9yV2ViR0wyOwotI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNp
ZiBVU0UoT1BFTkdMX0VTKQogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICByZXR1cm4gZmFs
c2U7CiAjZW5kaWYKIH0KIAotUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotI2lmIFVTRShOSUNPU0lBKQotICAgIHJldHVybiAm
bV9uaWNvc2lhTGF5ZXItPmNvbnRlbnRMYXllcigpOwotI2Vsc2UKLSAgICByZXR1cm4gbV90ZXht
YXBMYXllci5nZXQoKTsKLSNlbmRpZgotfQotCi0jaWYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKEFO
R0xFKQorI2lmIFBMQVRGT1JNKEdUSykKIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbiYgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQogewogICAgIGlmICghbV9leHRlbnNp
b25zKSB7CkBAIC00NzEsMjcgKzM3NCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpwcmVwYXJlRm9yRGlzcGxheSgpCiB7CiB9CiAKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQot
UmVmUHRyPE1lZGlhU2FtcGxlPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRDb21wb3Np
dGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUoKQotewotI2lmIFVTRShHU1RSRUFNRVIpCi0gICAgaWYg
KGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKSkKLSAgICAgICAgcmV0
dXJuIE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZShXVEZNb3ZlKCpwaXhl
bEJ1ZmZlcikpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0jZW5kaWYKLQogc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21w
b3NpdGVkUmVzdWx0cygpCiB7CiAgICAgcmV0dXJuIHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CiB9
Ci0KLSNpZiBFTkFCTEUoVklERU8pCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
cjo6Y29weVRleHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgUGxhdGZvcm1HTE9i
amVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMZW51bSBvdXRwdXRUYXJnZXQsIEdDR0xpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSAgICByZXR1cm4gcGxheWVy
LmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSh0aGlzLCBvdXRwdXRUZXh0dXJlLCBv
dXRwdXRUYXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0
aXBseUFscGhhLCBmbGlwWSk7Ci19CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oCmluZGV4IGU0NjYy
YjY4M2VhNDViNmYxOTY2YjMxOTczMzkzMzAzYWFmODYwOTUuLjdmNjIyNWExYTM5OWJlYjJiZjk5
MzA5ZDRlNzg4MzA4MTM5NzMzMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyLmgKQEAgLTI3LDE4ICsyNywzNCBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQog
CisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKKyNl
bHNlCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7CisjaWYgVVNF
KEFOR0xFKQordXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSA9IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU7CisjZWxzZQordXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyQmFzZSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOworI2VuZGlmCisKK2NsYXNzIFdF
QkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcj4gY3JlYXRlKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsKICAgICB+R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyKCk7CiAKKyAgICAvLyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJCYXNlIG92
ZXJyaWRlcy4KKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7
CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGJvb2wgY29weVRleHR1cmVGcm9tTWVkaWEoTWVkaWFQ
bGF5ZXImLCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBmaW5hbDsKICNlbmRp
ZgorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlKCkgZmluYWw7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJB
TkdMRS5jcHAKaW5kZXggMDg1MzlhN2Q5Mjk4MTE0NWRjMDYwMDFiNTc0Y2E4YzlhNzFmODk1NS4u
ZTNjMzQyZTM0MTViNjM5NjQ1NTFmMWU5MmU4NWFkOGQ5NGFmMWNhZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlckFOR0xFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCkBAIC00MCw3
ICs0MCwxMDUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMRGlzcGxheSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1EaXNwbGF5KCkg
Y29uc3QKK0dyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUoR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBHcmFwaGljc0NvbnRl
eHRHTChhdHRyaWJ1dGVzKQoreworI2lmIEVOQUJMRShXRUJHTDIpCisgICAgbV9pc0ZvcldlYkdM
MiA9IGF0dHJpYnV0ZXMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJz
aW9uOjpXZWJHTDI7CisjZW5kaWYKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFMYXll
ciA9IG1ha2VVbmlxdWU8Tmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsKKyNlbHNlCisg
ICAgbV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxh
eWVyPigqdGhpcyk7CisjZW5kaWYKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworCisgICAgdmFsaWRh
dGVBdHRyaWJ1dGVzKCk7CisgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8v
IFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KKworICAgIEdMZW51bSB0
ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKKyAgICAvLyBDcmVh
dGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsK
KyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRl
eHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBn
bDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xB
TVBfVE9fRURHRSk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOworCisg
ICAgLy8gQ3JlYXRlIGFuIEZCTy4KKyAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7
CisgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9jb21w
b3NpdG9yVGV4dHVyZSk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fY29t
cG9zaXRvclRleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgIGdsOjpHZW5UZXh0dXJlcygxLCAm
bV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdl
dCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJl
VGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBh
cmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIp
OworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9T
LCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICBnbDo6QmluZFRl
eHR1cmUodGV4dHVyZVRhcmdldCwgMCk7CisjZW5kaWYKKworICAgIC8vIENyZWF0ZSBhIG11bHRp
c2FtcGxlIEZCTy4KKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5i
b3VuZERyYXdGQk8pOworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICBn
bDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAg
IG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRpc2Ft
cGxlRkJPOworICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVz
LmRlcHRoKQorICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEJpbmQgY2Fu
dmFzIEZCTy4KKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9m
Ym8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJP
ID0gbV9mYm87CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkKKyAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgfQorCisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cit9CisK
K0dyYXBoaWNzQ29udGV4dEdMQU5HTEU6On5HcmFwaGljc0NvbnRleHRHTEFOR0xFKCkKK3sKKyAg
ICBHcmFwaGljc0NvbnRleHRHTEFOR0xFTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNv
bnRleHQodGhpcyk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICBpZiAobV90ZXh0dXJlKQor
ICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQorICAgICAgICBn
bDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCisKKyAg
ICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0dHJp
YnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2ls
IHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGdsOjpEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgIH0gZWxzZSBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgaWYgKG1fZGVw
dGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVy
cygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBnbDo6RGVs
ZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisjZW5kaWYKK30KKworUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxh
dGZvcm1EaXNwbGF5KCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJQSkKICAgICByZXR1cm4gbV9u
aWNvc2lhTGF5ZXItPnBsYXRmb3JtRGlzcGxheSgpOwpAQCAtNDksNyArMTQ3LDcgQEAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRm
b3JtRGlzcGxheSgpIGNvbnMKICNlbmRpZgogfQogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
Q29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0CitQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBs
YXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJQSkKICAgICByZXR1cm4gbV9u
aWNvc2lhTGF5ZXItPnBsYXRmb3JtQ29uZmlnKCk7CkBAIC01OCw3ICsxNTYsMjggQEAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZv
cm1Db25maWcoKSBjb25zdAogI2VuZGlmCiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0
dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbHNlCisgICAgcmV0
dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOworI2VuZGlmCit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hlY2tHUFVTdGF0dXMoKQoreworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCit7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXkoKQorewor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFj
a2luZygpCiB7CiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29u
c3QgYXV0byBzaXplID0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKQEAgLTgyLDcgKzIw
MSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVy
QmFja2luZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygpCiB7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRHTERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAppbmRleCAxMjE1MGIxZDUwZTViYzg5Mzc0
ZWFhODExZTIzMmIzY2M1MGYzMTUxLi4zYjRiNzU4MDI3ZjY5NjRlMDA5ZWIyZTU3MjBkNGEzYzFi
Y2NlZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCkBAIC00OCw3ICs0
OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdl
KGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQg
Y2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6
ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEdMOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxz
LCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdl
U2l6ZS5pc0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVh
ZC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQpp
bmRleCA5NTQ0YjUxYzI3OGRmNTY5ZWE0YWIwYmZlZjdlZjc0NGFjNTJjNzM1Li42ZDc3MDdkNDBj
MzJmMjg0MjljM2QzMjQ1MTVhNWNjNjk3NzYxYmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tCkBAIC0zMCw3ICszMCw3IEBACiAKICNp
bXBvcnQgIkNvbW1vblZNLmgiCiAjaW1wb3J0ICJGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuaCIK
LSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJSdW50aW1lQXBw
bGljYXRpb25DaGVja3MuaCIKICNpbXBvcnQgIlRocmVhZEdsb2JhbERhdGEuaCIKQEAgLTc3LDEz
ICs3NywxMyBAQCB2b2lkIFJlbGVhc2VXZWJUaHJlYWRHbG9iYWxTdGF0ZSgpCiAgICAgLy8gSW4g
c2luZ2xlLXRocmVhZGVkIGVudmlyb25tZW50cyB3ZSBkbyBub3QgbmVlZCB0byB1bnNldCB0aGUg
Y29udGV4dCwgYXMgdGhlcmUgc2hvdWxkIG5vdCBiZSBhY2Nlc3MgZnJvbQogICAgIC8vIG11bHRp
cGxlIHRocmVhZHMuCiAgICAgQVNTRVJUKFdlYlRocmVhZElzRW5hYmxlZCgpKTsKLSAgICB1c2lu
ZyBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjsKKyAgICB1c2luZyBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOwogICAgIC8vIEZvciB3ZWIgdGhyZWFk
LCBqdXN0IHJlbGVhc2UgdGhlIGNvbnRleHQgYXMgd2Uga25vdyB3ZSB3aWxsIHNlZSBjYWxscyB0
byBpdCBhZ2Fpbi4KICAgICAvLyBGb3Igbm9uLXdlYiB0aHJlYWRzLCBlLmcuIHRoaXJkLXBhcnR5
IGNsaWVudCB0aHJlYWRzLCB3ZSBkb24ndCBrbm93IGlmIHdlIGV2ZXIgc2VlIGFub3RoZXIgY2Fs
bCBmcm9tIHRoZQogICAgIC8vIHRocmVhZCwgc28gd2UgYWxzbyByZWxlYXNlIHRoZSB0aHJlYWQg
cmVzb3VyY2VzLgogICAgIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHJlbGVhc2VCZWhh
dmlvciA9CiAgICAgICAgIFdlYlRocmVhZElzQ3VycmVudCgpID8gUmVsZWFzZVRocmVhZFJlc291
cmNlQmVoYXZpb3I6OlJlbGVhc2VDdXJyZW50Q29udGV4dCA6IFJlbGVhc2VUaHJlYWRSZXNvdXJj
ZUJlaGF2aW9yOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VzOwotICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKHJlbGVhc2VCZWhhdmlvcik7
CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVsZWFzZVRocmVhZFJlc291
cmNlcyhyZWxlYXNlQmVoYXZpb3IpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcApp
bmRleCBhYzk1OTUyMGEyZTNkZmFkOWZjZDgyYjM5MmYxMGE5YTVhNjA0ODQwLi44NGIyZTY4NDVk
MDc0OWNkYWExZTc4Yjg1MzBkOGY4ZWE1YTBlMDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5j
cHAKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWlu
dFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcgogICAgICAgICAg
ICAgLy8gSGVyZSB3ZSBkbyBub3QgdHJ5IHRvIHBsYXkgYmFjayBwZW5kaW5nIGNvbW1hbmRzIGZv
ciBpbWFnZUJ1ZmZlci4gQ3VycmVudGx5IHRoaXMgY2FsbCBpcyBvbmx5IG1hZGUgZm9yIGVtcHR5
CiAgICAgICAgICAgICAvLyBpbWFnZSBidWZmZXJzIGFuZCB0aGVyZSdzIG5vIGdvb2Qgd2F5IHRv
IGFkZCBkaXNwbGF5IGxpc3RzLgogICAgICAgICAgICAgaWYgKHBpeGVsQnVmZmVyKQotICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRB
dHRyaWJ1dGVzLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6
ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICAgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTDo6cGFpbnRUb0NhbnZhcyhjb250ZXh0QXR0cmlidXRlcywgV1RGTW92ZSgqcGl4ZWxC
dWZmZXIpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQo
KSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS5jbGVhclJlY3QoeyBJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSB9
KTsKICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgImZsdXNoIiBpbXBsZW1lbnRhdGlvbiBp
biBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIG92ZXJsb2FkcyBvcmRlcmluZyBhbmQgZWZmZWN0cy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJH
TFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAKaW5kZXgg
NWE2Y2U2NWU3NDQ3ZDI0ZTFlNzczNjBmMmQ4Y2ZlNjRlYTg4YjMyYS4uMGRhN2I5NWQxNGU5YWRm
Y2RkMzY2OTM5OTMzZDgwMGYwMGJmOGZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVy
aW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMLmgiCiAjaW5jbHVkZSAiU3RyZWFtQ29ubmVjdGlvbldvcmtR
dWV1ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0wuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CiAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBT
Y29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q6OmZyZWVXZWJHTFJlbmRlcmluZ1Jl
c291cmNlcygpCiAgICAgaWYgKHNfcmVxdWVzdHMpCiAgICAgICAgIHJldHVybjsKICAgICByZW1v
dGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFtdIHsKLSAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlJlbGVhc2VUaHJlYWRSZXNvdXJj
ZUJlaGF2aW9yOjpUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTsKKyAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVsZWFzZVRocmVhZFJlc291cmNlcyhX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhh
dmlvcjo6VGVybWluYXRlQW5kUmVsZWFzZVRocmVhZFJlc291cmNlcyk7CiAgICAgfSk7CiB9CiAK
</data>
<flag name="commit-queue"
          id="470476"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445306</attachid>
            <date>2021-11-29 11:20:21 -0800</date>
            <delta_ts>2021-11-29 12:20:36 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211129212017.patch</filename>
            <type>text/plain</type>
            <size>572972</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5hMjc3NmJmMzcwMzNkNDc5NGRjNTk0YTJlNDdlZjNkNmNk
ZmI4ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MDUsNiArMTQwNSw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0FOR0xFSGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGls
aXRpZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4
MDExODYuLjE1ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
N2I2ZDU2MTQ2OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVj
MmQ1MzE4YWIzOTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEz
Niw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvaXNvL0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09WVFRDdWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTky
OTQ5ODk1MjBjMjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVy
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlNGQ5ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJl
ZTAyNmE2YTlkMTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBA
CiAJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAv
KiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAq
LzsgfTsKIAkJN0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRl
eHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYw
OTRERDI3MEM0NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAv
KiBBTkdMRVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJm
b3JtYW5jZUdQVVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFu
Y2VHUFVSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIz
MDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRl
eHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVE
Mjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYw
Q0UgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0No
ZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAy
MTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBH
cmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVG
MjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBB
MThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEw
MzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFB
QyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xDVkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ix
NjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4
MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1
Nyw4IEBACiAJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhD
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCOTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAw
NjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0
QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJ
CTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJ
CQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJ
CQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
ICovLAorCQkJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmggKi8sCiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xF
U2V0dGluZy5jcHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFy
eUFOR0xFU2V0dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3
QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgg
Ki8sCiAJCQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAw
MDA2MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2
OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBA
QAogCQkJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJ
CTdCOEVENUVGMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEw
MzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdC
MTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICov
LAotCQkJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCAqLywKKwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8q
IEltYWdlUm90YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdG
RjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4
MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0
MjYyLDE2IEBACiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4
dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3Jh
cGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3
MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdCOTVDRkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIx
MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAv
KiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4
MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0
MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5
RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGlj
c0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5
MTVmYTVmNzRkYzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2
MzQ1NTlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8g
UmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRh
KEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25l
ZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50
UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGlu
dCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0R0xTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNi
NGQ3ZTljZWUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBH
Q0dMdWludCBib3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVu
aXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4
dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwg
R0NHTGVudW0+LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJh
aXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5k
VGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0K
KyAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91
bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0
dXJlLCBHQ0dMZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0
KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIElu
dEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1
aW50Pj47CisgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYw
ZmI1ZWUxYWMzOTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2
NDBmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNp
bmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dM
QU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
KQorRXh0ZW5zaW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUqIGNvbnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhm
YWxzZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5k
ZXggMGE2MWVmYzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRi
OWY2MTVjM2IzYTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0z
MiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMu
Ci0gICAgZXhwbGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
KTsKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVu
c2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRl
bnNpb25zR0xBTkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4
ICs2NCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRl
bnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAg
Ly8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFj
ayB0byBHcmFwaGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUq
IG1fY29udGV4dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0
aW5nLXBvaW50IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAg
ICBib29sIG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBk
ZmEyYjdhNTA5Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmgiCiAKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJl
c3Npb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFW
Rk9VTkRBVElPTikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBk
ZWZpbml0aW9uIHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAg
LTc2LDggKzcxLDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpCiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEp
CiAgICAgICAgIEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3Jt
Q29uZmlnKCksIEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQor
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBz
d2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyAr
OTksNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2lu
Z1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1Rh
cmdldCkgewogICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZv
ckRyYXdpbmdUYXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJl
aGF2aW9yIHJlbGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNl
QmVoYXZpb3IpCiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAg
LTE2MSw3ICsxNTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xf
UmVsZWFzZVRocmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFp
bnRSZXN1bHRzKCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpA
QCAtMTg3LDE0ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBw
aXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1
dGVzKCkKIHsKICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygp
LmFscGhhID8gR0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11
c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hE
ZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChH
THVpbnQgaW50ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3Bl
ZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAg
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+
IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBnbDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwg
bnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBw
cmVjaXNpb25UeXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lz
aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48
R0NHTGludCwgMj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xl
bnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNo
YWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAg
ICAgICAgIGludGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihn
ZXRFeHRlbnNpb25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZz
ZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQg
eW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0wKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwg
R0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewogICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VT
aXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNl
dCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQg
eW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBH
Q0dMY2xhbXBmIHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGds
OjpEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oekZhcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRo
KEdDR0xjbGFtcGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVw
dGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVw
dGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lv
bnMpCiAgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+
KHRoaXMpOwogICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpy
ZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0
YS5kYXRhLCBmYWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRu
UGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJ
bXBsKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBs
ZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0
YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMs
IEdDR0xzaXplaSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZm
ZXJPYmplY3QpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYK
IH0KIAotLy8gVGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZv
bGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygp
OwogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZv
cm1zIGFyZSBub3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQog
ICAgICAgICByZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFT
U0VSVCghbV9sYXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVS
ZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5i
b3VuZFJlYWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpA
QCAtNTg3LDcgKzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhl
bHNGb3JQYWludFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBt
X2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1
cm47CkBAIC02NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0
dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTY4Miw3ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVU
ZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNT
RVJUKHNoYWRlcik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8K
ICAgICBnbDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC03MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0CiB9CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGds
OjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xj
bGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBn
cmVlbiwgR0NHTGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVu
dW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dM
ZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dM
ZW51bSBtb2RlQWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9
CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShH
Q0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xl
bnVtIGRzdEFscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBh
cmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEs
IEdDR0xlbnVtIGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJH
QgogICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0
ciBzaXplLCBHQ0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRh
dGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xT
cGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdD
R0x2b2lkPiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0
YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciBy
ZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVh
ZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NH
TGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0
aXZSb2J1c3RBTkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXpl
LCBudWxscHRyLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODQ4LDcgKzg0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
IGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgs
IGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRl
ciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAg
Z2w6OlRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6
ZSwgcGl4ZWxzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQq
PihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50
IHhvZmYKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIHBpeGVscy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50
IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4
OTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
aW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+
KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5
MDcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1
YkltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZz
ZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0Qo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBw
bmFtZSkKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVV
bmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4m
IHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4g
cmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpA
QCAtOTI5LDcgKzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwpAQCAtOTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6
OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNs
YW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTk0NSw3ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNv
bG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVh
cihHQ0dMYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05
NjIsNyArOTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KEdDR0xpbnQgcykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdy
ZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwg
R0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNv
bXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEw
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEw
MzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAg
ICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVu
YyhmdW5jKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdD
R0xib29sZWFuIGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhH
Q0dMYm9vbGVhbiBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxh
Zyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAg
QVNTRVJUKHNoYWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMTwogICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAg
IGdsOjpEaXNhYmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODks
NyArMTA4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5
cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBm
aXJzdCwgR0NHTHNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xlCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2Fw
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0NHTHVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50
IGluZGV4KQogICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1
c2goKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExMzksNyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNo
KCkKICAgICBnbDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBs
ZXZlbCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMTU2LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE2NCw3ICsxMTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3Miw3ICsxMTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVN
aXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9W
QUxVRSk7CkBAIC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwg
aW5mbyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1J
bXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDRwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJv
Z3JhbSwgaW5kZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4
Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZv
cm1HTE9iamVjdCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwg
bWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBp
ZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAg
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0
cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJu
IG1vdmVkQW5FcnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEVycm9yKCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsK
ICAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCkBAIC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0xMzA3LDcgKzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0
cmluZyhHQ0dMZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1v
ZGUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTMxNSw3ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2Rl
KTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKICAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0xMzM0LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXAp
OwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZl
cihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQog
ewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEz
NDUsNyArMTMzOSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0Zy
YW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJ
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpA
QCAtMTM1Niw3ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1By
b2dyYW0ocHJvZ3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgcmVuZGVyYnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBy
ZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
QEAgLTEzODksNyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNU
ZXh0dXJlKHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0
aCh3aWR0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQgcGFyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFt
KQogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9h
dCB1bml0cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dM
ZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYg
dmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAs
NyArMTQyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdl
KEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVy
YWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
Y2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0x
NDUxLDcgKzE0NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJT
b3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0g
ZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBt
YXNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE0NTksNyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywg
R0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGlu
dCByZWYsIEdDR0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLAogICAgIGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQ3NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE1hc2soR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0
ZShmYWNlLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdD
R0xlbnVtCiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShm
YWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xm
bG9hdCB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsx
NTAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2
YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyAr
MTUxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbAogICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAg
ICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0y
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsK
ICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAog
ICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2
MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXpl
ICUgMykpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyAr
MTU3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlm
b3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJh
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50
IHYxCiAgICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
IHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bgogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXku
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCwgR0NHTGludCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAzLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xp
bnQgdjIsIEdDR0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBH
Q0dMaW50IHYzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQog
ewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
CiAgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1N
YXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAg
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAg
ICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MTY3NSw3ICsxNjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRl
eEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAg
ICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZgogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxv
YXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBn
bDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgND4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cK
ICAgICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRl
eCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBH
Q0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNp
emUsCiAgICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1h
bGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTc3Myw3ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVy
dGV4QXR0cmliSVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
CiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE3OTQsNyArMTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTgwNiw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0
ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTE4MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGds
OjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4MjgsNyArMTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJv
b2xlYW4+CiAgICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNp
emUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0g
MDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAg
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xF
KHBuYW1lLCB2YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdD
R0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBu
YW1lKQorR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dM
ZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgpCiB7CiAgICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYs
NyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTg5MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBj
b25zdCBTdHJpbmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAg
VU5VU0VEX1BBUkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sCiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogCkBAIC0xOTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmko
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChz
aGFkZXIpOwogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTcz
LDEyICsxOTY3LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVk
SW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxh
dGZvcm1HTE9iamVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAg
IEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTk4Nyw3ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlv
biwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9n
cmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3
ICsyMDE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVp
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5k
YXRhKTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogCkBAIC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAg
IHJldHVybiBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CiB9CiAKLUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQg
aW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5k
ZXgsIEdDR0wKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAg
IHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICBy
ZXR1cm4gbzsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlUHJvZ3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVByb2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVh
dGVQcm9ncmFtKCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
ICAgIHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIw
ODMsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
aGFkZXIoR0NHTGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9
PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURF
Uik7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRleHR1cmUoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVh
dGVUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRl
bGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAg
ICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6
RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVy
KQogICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6
OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2
MSw3ICsyMTU1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LnJlbW92ZUFsbCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQg
dG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRv
CiAgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0
RXJyb3Igd2lsbCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50
aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zm9yY2VDb250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNl
Q29udGV4dExvc3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNw
YXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIy
MjMsNyArMjIxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0
ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIy
Niw3IEBAIEdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJ
bmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3Jt
QmxvY2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yMjUyLDcgKzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTAogCiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0
dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGds
OjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6
OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRRdWVyeU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogCiAvLyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVl
ZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5z
Zm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAg
ICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVk
YmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0
IHRyYW5zZm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xP
YmplY3QgdHJhbnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9y
bUZlZWRiYWNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1G
ZWVkYmFjaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MzM0LDcgKzIzMjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNm
b3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJh
bnNmb3JtRmVlZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1G
ZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2Rl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjM1MCw3ICsyMzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dM
ZW51bSBidWZmZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyhwcm9ncmFtLCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3Mu
ZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0g
MDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAg
Z2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZT
aXplKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBp
bmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsCiAgICAgZ2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNy
Y1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50
IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dM
Yml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNDAzLDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpC
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NH
TGludCBsYXllcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0
dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVM
YXllcih0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0
YXJnZXQsIGF0dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVi
dWZmZXIodGFyZ2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRC
dWZmZXIoR0NHTGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNy
Yyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlclRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIC0xOwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMK
ICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yNDc2LDcgKzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlm
b3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSwgR0NHTHVpbnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
NDg0LDcgKzI0NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3Jt
M3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYw
LCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dQogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gMiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCgh
KGRhdGEuYnVmU2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MjUxOCw3ICsyNTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9y
bTN1aXYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1CiAgICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSA2KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyAr
MjUzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgy
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgz
eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlv
biwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZT
aXplIC8gOCwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xl
YW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAg
ICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJh
bnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQo
IShkYXRhLmJ1ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yNTcyLDcgKzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlm
b3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRh
dGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDEyKSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyAr
MjU3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dM
dWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShp
bmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+
IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyAr
MjU5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0
aXYoaW5kZXgsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQg
eSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwg
R0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4
LCBHQ0dMdQogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMu
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1l
bnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50
IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcK
ICAgICBnbDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3Qg
R0NHTGVudW0+IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6
OkRyYXdCdWZmZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIs
IGRyYXdidWZmZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZh
bHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZm
ZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRo
LCBHQ0dMaW50IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsCiAgICAgZ2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3Rl
bmNpbCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
ICAgICBnbDo6RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJu
IGdsOjpJc1F1ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVl
KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
U2FtcGxlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0
ZVNhbXBsZXIoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAg
ICBnbDo6RGVsZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIp
CiAgICAgcmV0dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcy
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJp
KHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAK
LUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NH
TGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dM
c3luYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9u
LCBHQ0dMYml0ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZp
ZWxkIGZsYQogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQog
Ci1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5
bmMpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMg
c3luYykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMo
c3luYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NH
THN5bmMgc3luYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dM
c3luYyBzeW5jKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xz
eW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywg
R0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4
OSw3ICsyNzgzLDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdh
aXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNs
aWVudFdhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdz
LCBHQ0dMaW50NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5
bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
Nzk3LDcgKzI3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhH
Q0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3lu
YyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBw
bmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1G
ZWVkYmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVl
ZGJhY2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVk
YmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgyMyw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgzMSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6
QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0K
IAotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5p
Zm9ybU5hbWVzKQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRV
bmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB1bmlmb3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBw
YXJhbXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJs
b2NraXZSb2J1c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFt
cy5idWZTaXplLCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xzaXplaSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRp
RHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZp
cnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjg1OSw3ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVs
dGlEcmF3QXJyYXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291
bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJz
dHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBt
b2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBH
Q0dMc2l6ZWkgZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTCiAgICAgZ2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5k
YXRhLCBjb3VudHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
ODgwLDcgKzI4NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdF
bGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURy
YXdFbGVtZW50c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCks
IGRyYXdjb3VudCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9m
ZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3
Y291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjg5Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVs
dGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6
TXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwg
cG9pbnRlcnMuZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQog
ewogICAgIHNpemVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVD
b21wbGV0aW9uRmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKQEAgLTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVs
YXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVk
RXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1
cmUpIHsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29t
cGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVm
ZmVyKSwgaW1hZ2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RG
TW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZl
ci5jb250ZXh0KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAg
ICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRp
cGx5aW5nLCB3aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byBy
ZXN1bHRzID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1
bHRzICYmICFyZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1
bHRzLT5mb3JtYXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0
cy0+Zm9ybWF0KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAg
Ly8gRklYTUU6IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJv
d0J5dGVzIGFuZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXpl
ID0gcmVzdWx0cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6
ZS53aWR0aCgpICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRh
dGEoKTsKKyAgICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAx
KSAqIHJvd1N0cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChu
ZXcgdWludDhfdFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9w
ICs9IHJvd1N0cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5
KHRlbXAuZ2V0KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0
b20sIHRvcCwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCks
IHJvd1N0cmlkZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHNGb3JQYWludGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRlMzBiY2JjNDc3NDViYjhiNDIxNTI3YmZkMzQ5YmFkNjc3YmQwNjcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29z
aWEgeworY2xhc3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBI
b3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNz
IFBpeGVsQnVmZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBo
aWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7Cisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
OworICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGlj
IEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0
KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0
KTsKKyAgICBlbnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAg
ICAgLy8gUmVsZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRl
eHQsCisgICAgICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRl
LiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisg
ICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNh
bXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAg
dm9pZCBwcmVwYXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlv
biB3aXRob3V0IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAg
aW50IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2lu
ZyB0aHJvdWdoIEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdM
T2JqZWN0KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dz
IHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkg
ZmluYWw7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRp
b24oUGxhdGZvcm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkg
ZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCkgZmluYWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVu
ZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUs
IEdDR0xjbGFtcGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51
bSBtb2RlKSBmaW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBt
b2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdD
R0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRG
dW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNy
Y0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAg
dm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEsIEdDR0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEpIGZpbmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVu
dW0gdGFyZ2V0KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4s
IEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVh
ckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdD
R0xpbnQgcykgZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dM
Ym9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFs
OworICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0g
bW9kZSkgZmluYWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7Cisg
ICAgdm9pZCBkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0
aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9p
ZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7
CisgICAgdm9pZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0Fy
cmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFs
OworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxl
KEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lk
IGZsdXNoKCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dM
ZW51bSB0YXJnZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBi
b29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7Cisg
ICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSog
Y291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmli
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAg
ICB2b2lkIGdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4g
dmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZp
bmFsOworICAgIHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxv
YXQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBw
bmFtZSkgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5n
IGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJp
KFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0
U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5h
bDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIFN0cmluZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0
IGdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CisgICAgR0NHTGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7
CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRV
bmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTHVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdD
R0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBt
b2RlKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBm
aW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAg
IEdDR0xib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVh
biBpc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgo
R0NHTGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qp
IGZpbmFsOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pIGZpbmFsOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCByZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUs
IEdDR0xib29sZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAg
IHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFs
OworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1
aW50IG1hc2spIGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7Cisg
ICAgdm9pZCBzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAg
dm9pZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAg
dm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwg
R0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVs
cykgZmluYWw7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
aW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgp
IGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gdikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGludCB4LCBHQ0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2
b2lkIHVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJv
Z3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NH
THVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NH
TGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBH
Q0dMZmxvYXQgeikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHks
IEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmlu
YWw7CisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdD
R0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
c29yKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmlu
YWw7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICBHQ0dMYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZv
aWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVU
YXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NH
THNpemVpcHRyKSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdD
R0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAs
IEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51
bSBmaWx0ZXIpIGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0
ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0
dGFjaG1lbnRzKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7
CisgICAgdm9pZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXpl
aSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5h
bDsKKyAgICB2b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9p
ZCB0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNl
dCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRy
IG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dM
aW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNz
ZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmlu
YWw7CisgICAgR0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZp
bmFsOworICAgIHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3Vp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAg
ICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCB1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwg
R0NHTGludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBH
Q0dMdWludCB6LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2
KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1
aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdi
dWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xm
bG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVF1ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2Jq
ZWN0IHF1ZXJ5KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmpl
Y3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0g
dGFyZ2V0KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0
dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2Ft
cGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlz
U2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNh
bXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAg
ICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRl
cmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBh
cmFtKSBmaW5hbDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRT
YW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
KSBmaW5hbDsKKyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dM
Yml0ZmllbGQgZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykg
ZmluYWw7CisgICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51
bSBjbGllbnRXYWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0
IHRpbWVvdXQpIGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVs
ZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2ko
R0NHTHN5bmMsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1Ry
YW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmlu
ZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkg
ZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2
ZU1vZGUpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAg
ICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lk
IHBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9y
bUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAg
dm9pZCBiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZp
bmFsOworICAgIFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsK
KyAgICBWZWN0b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsK
KyAgICBTdHJpbmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9p
ZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykg
ZmluYWw7CisgICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRl
OworICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBtdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRz
LCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZUJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZm
ZXIoKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsK
KyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdl
dEV4dGVuc2lvbnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsK
KyAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZp
bmFsOworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisgICAgdm9p
ZCBwcmVwYXJlRm9yRGlzcGxheSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBmb3JjZUNvbnRleHRM
b3N0KCk7CisgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOworICAgIHZvaWQgZGlzcGF0Y2hDb250
ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CisjZW5kaWYK
KyAgICB1bnNpZ25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKTsKKworICAgIGNvbnN0
ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVG
QVVMVF9ESVNQTEFZOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNvbnN0ZXhwciBzdGF0aWMg
RUdMTmF0aXZlRGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZl
RGlzcGxheVR5cGUsIC0xKTsKKyAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlU
eXBlIGhpZ2hQZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlw
ZSwgLTIpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xF
KEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxs
IHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAg
ICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5z
aW9uc0dMIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50
IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKKyAgICAv
LyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGlj
aCBjb3VsZCBvcgorICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBh
YmlsaXRpZXMgb2YgdGhlIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQg
dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKTsKKyAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgdm9pZCByZWFkblBp
eGVsc0ltcGwoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpKiBsZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dz
LCBHQ0dMdm9pZCogZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCk7CisKKyAg
ICAvLyBEaWQgdGhlIG1vc3QgcmVjZW50IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUg
aW4gYW4gYWNjZXB0YWJsZSBzdGF0ZT8KKyAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsK
KworICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcHJlcGFy
ZVRleHR1cmVJbXBsKCk7CisgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsKKyAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3Rl
bmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CisgICAg
c3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXks
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOworI2VuZGlmCisgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgorICAgIGJvb2wgd2Fp
dEFuZFVwZGF0ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gUGxh
dGZvcm0gc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICBzdGF0
aWMgdm9pZCBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKKworICAgIEdDR0x1aW50
IG1fdGV4dHVyZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKKyAgICBHQ0dMdWlu
dCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsQ29s
b3JGb3JtYXQgeyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCB7IDAgfTsKKyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OworICAgIEdDR0x1
aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OworICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdp
bmdCdWZmZXI6dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCisgICAgR0NHTHVpbnQgbV9wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIHsgMCB9OworICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVy
ZSB3aGVuIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KKyAgICBH
Q0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKKyAgICAvLyBRdWVyaWVk
IGF0IGRpc3BsYXkgc3RhcnR1cC4KKyAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRh
cmdldCB7IC0xIH07CisgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigp
LgorICAgIExpc3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKyAgICBib29s
IG1faXNGb3JXZWJHTDIgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3Vu
dCB7IDAgfTsKKyAgICBib29sIG1fZmFpbE5leHRTdGF0dXNDaGVjayB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3VzZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKKyAgICBzaXplX3QgbV9v
bGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKKyAgICBTY29wZWRHTEZlbmNlIG1fZnJh
bWVDb21wbGV0aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOworICAgIEdyYXBoaWNzQ29udGV4
dEdMU3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+
IG1fZXh0ZW5zaW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIEdyYXBoaWNzQ29udGV4
dEdMSU9TdXJmYWNlU3dhcENoYWluIG1fc3dhcENoYWluOworICAgIEVHTERpc3BsYXkgbV9kaXNw
bGF5T2JqIHsgbnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0T2JqIHsgbnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcg
bV9jb25maWdPYmogeyBudWxscHRyIH07CisgICAgLy8gQmFja2luZyBzdG9yZSBmb3IgdGhlIHRo
ZSBidWZmZXIgd2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5LgorICAgIC8vIFdo
ZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3aW5nIGJ1
ZmZlciBiYWNraW5nIHN0b3JlLgorICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09
IHRydWUsIHRoaXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7CisgICAgdm9p
ZCogbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24g
eyBmYWxzZSB9OworICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9oaWdoUGVy
Zm9ybWFuY2VHUFVSZXF1ZXN0OworI2VuZGlmCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorICAgIEdDR0x1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisgICAgR0NHTHVpbnQg
bV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsgMCB9OworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisg
ICAgc3RkOjp1bmlxdWVfcHRyPE5pY29zaWE6OkdDR0xMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Cisj
ZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKKyNlbmRpZgorCisgICAgZnJpZW5k
IGNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOworI2lmIFVTRShOSUNPU0lBKQorICAgIGZyaWVuZCBj
bGFzcyBOaWNvc2lhOjpHQ0dMTGF5ZXI7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAg
ZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyNlbmRpZgorfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXggY2Nj
YjU3MjRhNGNkOTJmZjBiZjhlNzM4M2M1ZDlmZTY4OWQ3N2I4Ni4uNGQ1OWNiMTJjNWU0NDc1Mzdk
ZTBhZWUyMTBkZTAwMmNiZDc5ZmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5j
cHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0
ZXMsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50
VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0
QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVCghcGl4ZWxC
dWZmZXIuc2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAppbmRleCBmNzlmMjJlMzEzZWExMTczODljNWY0MDlkZDBmNDk0
YWUxNWFlYjkzLi5hZjRjMTdkNTFmYTU5ZjQ2ODhkZjQzOTY1MzUxOGY1Y2EwZGFhZjIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3Vy
Y2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50
U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBj
b25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAg
ICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFz
U2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKaW5kZXggMjU1NWZm
MDgzMjhlMzQ2OWNkN2E0YTI5N2RiZWY3OTBmNjMwNTI4OC4uZTQwOTVhMmIxOWUyNGQxZGI4MDlj
MTgyZjY0MzJiZGMwY2I3ODZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApAQCAt
MjcsMTIgKzI3LDE4IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIK
ICNpbmNsdWRlICJJT1N1cmZhY2UuaCIKIAorI2lmIEVOQUJMRShWSURFTykKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTsKK30KKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgeworY2xhc3MgV0VCQ09S
RV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRH
TEFOR0xFIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMQ29j
b2E+IGNyZWF0ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAg
fkdyYXBoaWNzQ29udGV4dEdMQ29jb2EoKTsKQEAgLTQ5LDE0ICs1NSwyNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwog
I2VuZGlmCiAKLSAgICAvLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBvdmVycmlkZXMuCisgICAg
Ly8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICBi
b29sIGNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgYm9vbCBmbGlwWSkgZmluYWw7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
R3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOworI2VuZGlmCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3Vs
dHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBo
aWNzQ29udGV4dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYp
OwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3
MmM3N2VjYjIxOWUzOS4uMDI5Y2MzZmFlNDdmODcwMjNjNWMzMDIyNWUwMjU5YTA0MWYwZDY2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5k
aWYKIAogI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxh
dGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJs
ZSgpID09IHRydWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJl
YWRlZCBtYW5uZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxz
ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1
dCBhbHdheXMgc2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIg
YW5kIG51bGxwdHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUqIGN1cnJlbnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGlj
dGFibGUoKQogewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxp
emVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAg
ICAgfQogCiAgICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNr
ZW5kLiIsIGF0dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRp
dmVEaXNwbGF5VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
ZmF1bHREaXNwbGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNl
TWV0YWwpIHsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9Q
TEFURk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0
YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAg
ICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0Vf
QU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9X
RVJfQU5HTEUpOwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpsb3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYg
KHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJl
ZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRl
cy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxh
eUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5h
dGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlz
cGxheTsKKyAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpoaWdoUGVyZm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFw
aGljc0NvbnRleHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xB
TkdMRShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVu
Y3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29h
IHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJz
KQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRy
cykKIHsKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVu
c2lvbik7CiAgICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0g
ICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRo
cm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkg
b24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3Rz
IGFyZSBub3Qgc2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVy
cywgc28KICAgICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0
bGluZy4gT3BlbkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21l
IHNvcnQgb2YgaW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAot
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIs
IHRoaXMpOworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
ICglcCkuIiwgdGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVu
dCgpKSB7CkBAIC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAh
PSB0aGlzKTsKICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9H
KFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlz
KTsKKyAgICBMT0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICgl
cCkuIiwgdGhpcyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgp
IGNvbnN0CkBAIC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6
OmlzVmFsaWQoKSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRm
b3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXND
aGVjaykgewogICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0
ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRT
dGF0dXMgPSAwOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0
VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIGlmICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUy
MCw3ICs1MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIGlmIChtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcg
KzUyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQoKQogICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5n
KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNr
aW5nKCkKIHsKICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0
eSgpKTsKICAgICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxs
b2NhdGluZyBhIG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVz
c3VyZS4KQEAgLTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAg
ICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBh
dXRvIGJhY2tpbmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoKQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShi
YWNraW5nKSwgcGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5n
LCB2b2lkKiBwYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCog
cGJ1ZmZlcikKIHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJp
bmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4
dHVyZVRhcmdldCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNU
QU5HTEVfQVJCKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtl
Q3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VS
RkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNo
bWVudFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwg
R0NHTHVpbnQgcGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewog
ICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19j
YXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2
NywyNCArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZh
Y2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1faXNGb3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNp
bXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsK
LSAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdl
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdl
cigpLmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJl
KSB7Ci0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JE
aXNwbGF5KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXko
KQogewogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0
LDE1ICs3MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRp
c3BsYXkoKQogCiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGlj
c0NvbnRleHRHTENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1f
Y3YuZ2V0KCk7CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHMoKQogewogICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVm
ZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIu
aGFuZGxlKQpAQCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxN
ZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvTWVkaWFTYW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFp
bi5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRp
c3BsYXlCdWZmZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZv
cm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3Jt
RwogfQogI2VuZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZp
ZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdP
Ymo7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxF
KFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRl
ICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSA8cGFsL3NwaS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi9TY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNp
bmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0
dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNp
emU7IgotICAgICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBp
bnQgdV9mbGlwWTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4o
KSIKLSAgICAieyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAx
LjApOyIKLSAgICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41
ICsgLjU7IgotICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFs
aXplZFBvc2l0aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2
X3lUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2
VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19Owot
Ci1zdGF0aWMgY29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
IHsKLSAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1
X3lUZXh0dXJlU2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29y
ZGluYXRlOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAg
InZvaWQgbWFpbigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9z
aXRpb24sIDAsIDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bv
c2l0aW9uICogLjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAg
ICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIK
LSAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95
VGV4dHVyZVNpemU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXpl
ZFBvc2l0aW9uICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHBy
IGF1dG8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVu
aWZvcm0gc2FtcGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JN
YXRyaXg7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2
YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0g
ICAgInsiCi0gICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1
X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0
ZXh0dXJlMkQodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIg
ICAgeXV2LmEgPSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1h
dHJpeDsiCi0gICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdt
ZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3Jt
IHNhbXBsZXIyRFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1h
dHJpeDsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZh
cnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAg
ICAieyIKLSAgICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVj
dCh1X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2Ig
PSB0ZXh0dXJlMkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIK
LSAgICAiICAgIHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVf
Y29sb3JNYXRyaXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2Ugewot
ICAgIFVua25vd24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJh
bnNmZXJGdW5jdGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBr
SVRVX1JfNjAxXzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQ
M19ENjUsCi0gICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJh
bmdlRnJvbVBpeGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBp
eGVsRm9ybWF0KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4Ogot
ICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhB
VkUoQ09SRVZJREVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlm
Ci0gICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
X0FSR0IyMTAxMDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBD
YkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZ
cENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0
NFlwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NF
RF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxS
YW5nZTo6RnVsbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5r
bm93bjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5j
dGlvbkZyb21TdHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQot
ICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAg
ICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENG
RXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkp
Ci0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0g
ICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1Az
KCkgJiYgQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkK
LSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2Fu
TG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVW
aWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0
cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0
dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVy
RnVuY3Rpb25DVjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAg
ICAgR0xmbG9hdCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxv
YXQgY2I7Ci0gICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07
Ci0KLSAgICBjb25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZs
b2F0IGIpCi0gICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkK
LSAgICAgICAgOiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAg
IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xm
bG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0K
LX07Ci0KLXN0cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBibGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRD
b2xvciB3aGl0ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xv
ciByZWQgICAgIHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBn
cmVlbiAgIHswLCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVl
ICAgIHswLCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAg
IHswLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsx
LCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAx
LCAwfTsKLX07Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0
XVs0XTsKLQotICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNi
Q29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25z
dCBHTGZsb2F0KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0g
ICAgfQotCi0gICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9h
dENvbG9yJikgY29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4
KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZm
aWNpZW50KQotICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlD
YkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiAr
IEtnICogRyArIEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0g
ICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFs
dWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlz
IGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0
aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6
Ci0gICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAq
ICgxIC0gS2IpKSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtn
KSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8g
V2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBb
MTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEg
cmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZh
bHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFu
Z2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2Vm
ZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0
IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5m
IC8gMjE5LmY7Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVs
UmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlT
Y2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNy
U2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10g
PSAwOwotCi0gICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0g
PSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZm
aWNpZW50IC8gY2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZm
aWNpZW50KTsKLSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGlu
Z0ZhY3RvcjsKLSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBj
YkNvZWZmaWNpZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsK
LQotICAgIHJvd3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11b
Ml0gPSAwOwotICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5h
bCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4
XQotICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0
byBbMTYsIDI0MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7
ICsrcm93TnVtYmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAg
ICAgICAgYXV0byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAg
ICAgYXV0byYgeiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAg
ICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJh
bmdlOjpWaWRlbykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQot
Y29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxv
YXRDb2xvciYgY29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAg
ICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsg
cm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVsw
XSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAq
IGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJn
Yi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5i
ICsgcm93c1syXVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRv
UkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRy
YW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9
IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1h
dHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20g
dGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAg
Ly8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0
YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4x
MTRmLCAwLjI5OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxs
TWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAx
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwg
MCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
eWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRy
aWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2
IDIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJU
LjcwOS0yLTE5OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5Vmlk
ZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25z
dGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVs
bCwgMC4wNzIyLCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwg
MjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAg
IDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQs
IDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRh
LCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFn
ZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBm
dWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTks
ICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAg
ICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIu
NzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRo
ZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8v
IGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAu
MDU5MywgMC4yNjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAx
MjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxh
Y2sgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIw
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVu
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMx
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2Vu
dGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwg
MCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0g
ICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01Q
VEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVl
Lm9yZy9kb2N1bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXgg
c21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07
Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQw
TVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNN
UFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0
MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVs
bG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNv
bG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRl
MjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwg
IDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJl
ZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJT
TVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAx
LCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpj
eWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsK
LSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8s
IFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAg
ICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJh
bnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAg
IG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1h
dHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVu
Y3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlv
bkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMu
Z2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNW
OjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQo
KS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjpr
U01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQot
ICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQg
d2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxS
YW5nZTo6VW5rbm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0g
ICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBt
YXRyaWNlcy5nZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8g
QXNzdW1lIHVua25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRl
cmF0b3IgPT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmlj
ZXMuZ2V0KCkuZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7
Ci0KLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJl
dHVybiBpdGVyYXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4
dCkgfTsKLSAgICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rl
c3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFOjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmIG93bmVyKQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0
aWJsZSBjb250ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBk
b2VzIG5vdAotICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5Lgot
ICAgIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09O
VEVYVF9DTElFTlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAy
LAotICAgICAgICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUs
Ci0gICAgICAgIEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19F
TkFCTEVEX0FOR0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJ
TkRfR0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAg
ICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0
Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25m
aWcoKTsKLSAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5
LCBjb25maWcsIG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlm
IChjb250ZXh0ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAg
YXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRl
eHQpOwotICAgIH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQp
IHsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9y
ZWN0YW5nbGUiKTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3Rl
eHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBH
TF9OT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdM
aW50IHZlcnRleFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0g
ICAgR0xpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUik7Ci0gICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAg
IGF1dG8gcHJvZ3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyLCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4
U2hhZGVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAg
ICAgIGdsOjpEZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNl
IGFyZSB3cml0dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQg
dnNMZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5n
dGgoKSA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBH
TGludCBmc0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
MkQubGVuZ3RoKCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgo
KTsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBz
X3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUy
RCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4
dHVyZVJlY3RhbmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAm
dmVydGV4U2hhZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJh
Z21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBn
bDo6Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNo
YWRlcik7Ci0gICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2w6OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlz
IGNoZWNrZWQgYWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24g
YmVuZWZpdC4KLQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5C
dWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVs
ZXRlQnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0
aWNlc1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsK
LSAgICBnbDo6QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0
aWNlcywgR0xfU1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAg
ICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1
ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGlu
dCBzdGF0dXMgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFt
LCBHTF9MSU5LX1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMp
IHsKLSAgICAgICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZS
b2J1c3RBTkdMRSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAm
dnNTdGF0dXMpOwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRT
aGFkZXJpdlJvYnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwg
bnVsbHB0ciwgJmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFKCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIs
IHRoaXMsIHN0YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjb250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xl
YW51cC5yZWxlYXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBt
X2Rpc3BsYXkgPSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25m
aWcgPSBjb25maWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0g
ICAgbV9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7
Ci0gICAgbV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9u
KHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4
Iik7Ci0gICAgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRp
b24oeXV2UHJvZ3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2Nh
dGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXpl
Iik7Ci0gICAgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1M
b2NhdGlvbih5dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlv
bkF0dHJpYnV0ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJh
X3Bvc2l0aW9uIik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdo
aWxlIHRoZSBwcm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0o
eXV2UHJvZ3JhbSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRp
b25BdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQ
b3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAg
IGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2Us
IFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQy
MGYnIHBpeGVsIGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3Jt
YXRzLgotICAgIE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1h
dFR5cGUoaW1hZ2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVf
NDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShD
T1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVs
Rm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9S
YW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZv
cm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJl
ZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFz
dXJmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVk
ID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0Rmxp
cFkKLSAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1
cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7
Ci0gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRo
ZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhp
cyBpcyBhIG5vLW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2Nv
bnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXks
IG1fY29udGV4dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9
IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4
ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmlu
aXRpYWxpemVkIGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAv
LyBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xf
VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUs
IG51bGxwdHIpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0g
ICAgfSk7Ci0gICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0g
ICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBn
bDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0
YXR1cyA9IGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBp
ZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1
cmUuIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0
ZXh0dXJlcyBmb3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9T
dXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0
ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxh
bmVXaWR0aCA9IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRv
IHV2UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwot
Ci0gICAgR0xlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5U
ZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtl
U2NvcGVFeGl0KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1
dlRleHR1cmUpOwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsK
LSAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3Jl
OjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZp
ZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1
dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEp
OwotICAgIGlmICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2
SGFuZGxlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFu
ZGxlXSB7Ci0gICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNl
KGRpc3BsYXksIHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7
Ci0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNs
ZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4
dHVyZXMoMSwgJnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9
IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2Nv
bmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwg
R0xfUkVELCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJm
YWNlLCAwKTsKLSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBh
dXRvIHlIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwg
eUhhbmRsZV0gewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNw
bGF5LCB5SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBw
YXJhbWV0ZXJzLgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwg
MCk7Ci0gICAgZ2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0g
ICAgZ2w6OlVuaWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlw
WTo6WWVzID8gMSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYo
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWln
aHQpOwotCi0gICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxG
b3JtYXQpOwotICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9t
U3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50
KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBj
b2xvck1hdHJpeCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24o
cmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29s
b3JNYXRyaXhVbmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAg
ICAvLyBEbyB0aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5H
TEVTLCAwLCA2KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1
cmZhY2VTZWVkID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91
dHB1dFRleHR1cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1f
bGFzdEZsaXBZID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
QU5HTEUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQz
MDFmMTI1MWI3MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5o
IgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0v
LyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9m
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBp
bnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5H
TEUgQ29jb2EuCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUo
Q1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBGbGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4
dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RU
ZXh0dXJlU2VlZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmIG1fb3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9k
aXNwbGF5IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9j
b25maWcgeyBudWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIg
eyAwIH07Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAg
ICBHQ0dMaW50IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQg
bV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlw
WVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2Nh
dGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7
IC0xIH07Ci0gICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9
OwotCi0gICAgRmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2lu
dGVyPElPU3VyZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJm
YWNlU2VlZCB7IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dM
dWludCwgdW5zaWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVy
ZVNlZWQ7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBo
aWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJ
T04pCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckND
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVy
ZTJEIHsKKyAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVj
MiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7Igor
ICAgICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVD
b29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZvaWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFf
cG9zaXRpb24sIDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBh
X3Bvc2l0aW9uICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAi
ICAgICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55
OyIKKyAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIK
KyAgICAiICAgIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisg
ICAgIn0iX3MKK307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRl
eHR1cmVSZWN0YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAi
dW5pZm9ybSB2ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIg
dl95VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29y
ZGluYXRlOyIKKyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlv
biA9IHZlYzQoYV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQ
b3NpdGlvbiA9IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09
IDEpIgorICAgICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXpl
ZFBvc2l0aW9uLnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVk
UG9zaXRpb24gKiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5h
dGUgPSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9
OworCitjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0
dXJlOyIKKyAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3Jt
IG1hdDQgdV9jb2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRp
bmF0ZTsiCisgICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2
b2lkIG1haW4oKSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5y
ID0gdGV4dHVyZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAi
ICAgIHl1di5nYiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRl
KS5yZzsiCisgICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5
dXYgKiB1X2NvbG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBh
dXRvIHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsi
CisgICAgInVuaWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0g
bWF0NCB1X2NvbG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGlu
YXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZv
aWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIg
PSB0ZXh0dXJlMkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAg
ICAiICAgIHl1di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29v
cmRpbmF0ZSkucmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0Nv
bG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3Mg
UGl4ZWxSYW5nZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKwor
ZW51bSBjbGFzcyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9S
XzcwOV8yLAorICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtE
Q0lfUDMsCisgICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhl
bFJhbmdlIHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQorewor
ICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
NDQ0QVlwQ2JDcjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoK
KyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAg
IGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisg
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFu
Z2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVv
UmFuZ2U6CisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMp
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVv
UmFuZ2U6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVW
SURFT19DT01QUkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25D
ViB0cmFuc2ZlckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAg
aWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247
CisgICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9S
XzcwOV8yKSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8y
OworICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVf
Ul82MDFfNCkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFf
NDsKKyAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01Q
VEVfMjQwTV8xOTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRF
XzI0ME1fMTk5NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9EQ0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1h
dHJpeF9EQ0lfUDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1Az
OworICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1Az
X0Q2NSgpICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2
NSkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYg
KGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgp
ICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAp
KQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENv
bG9yIHsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0
IHI7CisgICAgICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAg
ICAgIH0gcmdiOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAg
ICAgICAgICAgR0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0g
eWNiY3I7CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBH
TGZsb2F0IGcsIEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7Cisg
ICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBH
TGZsb2F0IHNjYWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8g
c2NhbGUgfQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJz
KEdMZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVl
IDogLXZhbHVlOworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVx
dWFsVG8oY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4
RGVsdGEpOworICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25z
dGV4cHIgR0xmbG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHTGZsb2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR0xmbG9hdENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JN
YXRyaXggeworICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1h
dHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmlj
aWVudCk7CisKKyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRD
b2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4
cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JD
b2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAg
ICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhl
IGZvcm06CisgICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0g
KEIgLSBZKSAvICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAt
IEtyKSkKKyAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBp
biBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0g
MQorICAgIC8vCisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBh
bmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3Ip
KSAqIENyCisgICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkg
LSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3Ig
LyBLZykgKiBDcgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRl
byByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwg
YW5kIENiICYgQ3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0
aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFu
ZCBDciBhbGwgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9m
IDI1Ni4KKworICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0g
Y3JDb2VmZmljaWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4
ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2Nh
bGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIy
NC5mOworCisgICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0g
PSAwOworICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29l
ZmZpY2llbnQpOworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2Fs
aW5nRmFjdG9yOworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEg
LSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAg
cm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
ICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsK
KworICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2Jj
clNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJd
ID0gMDsKKyAgICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJv
d3NbM11bMV0gPSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOwor
CisgICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252
ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2Yg
dmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJv
d051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8m
IHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAg
ICAgYXV0byYgeSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAg
YXV0byYgdyA9IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Cisg
ICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0g
eCAqIDE2IC8gMjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1h
dHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEdMZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsg
cm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93
c1swXVszXSwKKyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAq
IGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAg
ICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5n
ICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0
YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1
bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0
aW9uKQoreworICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0
IFlDYkNyTWF0cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBt
YXRyaWNlczsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8v
IE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYw
MSByZXYgNCBzcGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1S
RUMtQlQuNjAxCisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRy
aXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIg
c3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4x
MTRmLCAwLjI5OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1
LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
ci42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUw
LCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fz
c2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1
LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAx
NzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFu
LCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21w
b25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBz
Oi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywg
MC4wNzIyLCAwLjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEu
NWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChy
NzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDEx
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAx
LjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisK
KyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNr
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJs
YWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41
ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIz
NywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBH
TGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBN
YXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4y
MDIwLTIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVD
LUJULjIwMjAKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0
cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwg
MC4wNTkzLCAwLjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4
ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQs
ICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpy
ZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAx
NiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxs
b3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsK
KworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwg
ICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAx
MSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAv
IDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgY3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJv
bSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAg
ICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNv
bnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJh
bmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1h
dHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEy
IH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYy
LCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAx
MTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Ymx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICog
R0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRh
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
Ojp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3Jl
ZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21w
dGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3
NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUg
MjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRp
c3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFj
ZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYw
MV80KSwgcjYwMVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShN
YXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQp
LCByNjAxRnVsbE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5
KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3
MDlWaWRlb01hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBp
eGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1
bGxNYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVv
TWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5n
ZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRy
aXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpW
aWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlk
ZW9NYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0
ME1GdWxsTWF0cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tl
ZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4K
KyAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdl
ID09IFBpeGVsUmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVs
bDsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5j
dGlvbnMgYXJlIHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQo
KSkKKyAgICAgICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1hdHJpY2VzLmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBH
cmFwaGljc0NvbnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRl
eHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBp
ZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9k
aXNwbGF5LCBtX2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJm1feXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZtX2ZyYW1lYnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2Nv
bnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYShHcmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3du
ZXIpCit7CisgICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0
ZSB3aXRoIG93bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5l
c3Mgb3IgV2ViR0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAg
IG93bmVyLm1faXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdM
X0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAg
IEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZB
TFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlV
TSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdM
RGlzcGxheSBkaXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmln
IGNvbmZpZyA9IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0
ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmos
IGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50
KGRpc3BsYXksIGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6bWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVz
dHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29s
IHVzZVRleHR1cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBH
TF9URVhUVVJFXzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlT
VCkKKyAgICBpZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVz
dEV4dGVuc2lvbkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAg
ICAgaWYgKGdsOjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNo
YWRlcihHTF9WRVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpD
cmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9
IGdsOjpDcmVhdGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAg
ICAgZ2w6OkRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgfSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJl
IGNvbXBpbGUtdGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
VmVydGV4U2hhZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8g
c195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRl
clNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195
dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUy
RCA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRl
clNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7
CisgICAgZ2w6OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVy
U291cmNlLCAmZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7
CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hT
aGFkZXIoeXV2UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1
dlByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgLy8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0
aWNhbCBwYXJhbGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRl
eEJ1ZmZlciA9IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7Cisg
ICAgYXV0byB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4
QnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIp
OworICAgIH0pOworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwg
MSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgeXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZG
RVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBH
THVpbnQgZnJhbWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1l
YnVmZmVyKTsKKyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Zy
YW1lYnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVm
ZmVyKTsKKyAgICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dy
YW1pdlJvYnVzdEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAm
c3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7
CisgICAgICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09N
UElMRV9TVEFUVVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3Rh
dHVzID0gMDsKKyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFk
ZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFp
bGVkIHRvIGxpbms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0
dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2Uo
KTsKKyAgICB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZl
ckNsZWFudXAucmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250
ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1
ZmZlciA9IHl1dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7
CisgICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7Cisg
ICAgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0
aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAg
IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVy
ZVNpemUiKTsKKyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0
cmliTG9jYXRpb24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlz
IGRlbGV0ZWQgYnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGlu
IHVzZS4KKyAgICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6
VmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdM
X0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1
cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJl
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgRmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9u
bHkgc3VwcG9ydHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUg
c3VwcG9ydGluZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0g
Q1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9y
bWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8v
IE5PTElOVAorICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9Q
SVhFTF9GT1JNQVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhl
bEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxS
YW5nZQorI2VuZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBB
c2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywg
Rm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1
ZmZlckdldElPU3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChz
dXJmYWNlKTsKKyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFj
ZSA9PSBtX2xhc3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1
cmZhY2VTZWVkCisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBt
X293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0
ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVk
IHRvIGl0LCBhbmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNp
bmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRo
KGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFn
ZSk7CisKKyAgICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBU
aGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBl
YXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVy
cm9yIGlzIG5vdCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFr
ZVNjb3BlRXhpdChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQs
IHR5cGVdIHsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRl
eHR1cmUpOworICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGds
OjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0
ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUy
RChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91
dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRv
IGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCk7CisKKyAgICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8g
c291cmNlLgorICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUo
c3VyZmFjZSwgMCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRP
ZlBsYW5lKHN1cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3Vy
ZmFjZUdldEhlaWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0
dXJlVGFyZ2V0ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAg
R0x1aW50IHV2VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OworICAgIGF1dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0g
eworICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7Cisg
ICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2
aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRh
Y2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xf
SU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhl
aWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNj
b3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29y
ZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOwor
ICAgIH0pOworCisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMo
MSwgJnlUZXh0dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQo
W3lUZXh0dXJlXSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOwor
ICAgIH0pOworICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6Qmlu
ZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZl
ckFuZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJn
ZXQsIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5
UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhh
bmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRl
c3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0p
OworCisgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVu
aWZvcm0xaShtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFp
KG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2
RmxpcFlVbmlmb3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAg
Z2w6OlVuaWZvcm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgs
IHlQbGFuZUhlaWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdl
ID0gcGl4ZWxSYW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFu
c2ZlckZ1bmN0aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0
PENGU3RyaW5nUmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JH
Qk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlv
bik7CisgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biwgMSwgR0xfRkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJh
d2luZy4KKyAgICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9s
YXN0U3VyZmFjZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNl
U2VlZDsKKyAgICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50
ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAg
ICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0
ZTM5NjBiNmQ3MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx3dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHcmFwaGljc0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxl
bWVudGF0aW9uIGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBw
YXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENv
Y29hLgorY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZD
b2NvYSgpIGZpbmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBGbGlwWSkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
KEdyYXBoaWNzQ29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2Vl
ZChHQ0dMdWludCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVT
ZWVkLmdldCh0ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBt
X293bmVyOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7
IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51
bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsg
bnVsbHB0ciB9OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9Owor
ICAgIFBsYXRmb3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGlu
dCBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3Jt
TG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biB7IC0xIH07CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAt
MSB9OworICAgIEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9Owor
ICAgIEdDR0xpbnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAg
IEZsaXBZIG1fbGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1
cmZhY2VSZWY+IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQg
eyAwIH07CisKKyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVu
c2lnbmVkLCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOwor
fTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCmlu
ZGV4IGI4MzJhMTg2YTQyYzhiZTMyMmE0YzcwODFmNzVkY2Q0OTBjMjdmODguLjM5NWM0NDhlODU1
MmEyODc4Y2U1NzZmNTRiNmFlNzUwMDkxOGI4YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwyMiArMjMsMzA4
OSBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBF
TkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIK
KyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKLSNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0
dGluZy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgorI2luY2x1ZGUgPGNzdHJpbmc+
CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFy
cmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZiBVU0UoT1BF
TkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1
ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNpZiBVU0UoTElCRVBPWFkpCisj
aW5jbHVkZSAiRXBveHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJP
cGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKKyNp
bmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
c3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlcigpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwor
ICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWROYW1lSGFz
aDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBzaGFyZWROYW1l
SGFzaCA9IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OworICAgIH0pOworCisg
ICAgcmV0dXJuICpzaGFyZWROYW1lSGFzaDsKK30KKworc3RhdGljIHZvaWQgc2V0Q3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkKK3sKKyAg
ICAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFzaDsKK30K
KworLy8gSGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2NvbXBpbGVy
IHRvIGRvCisvLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBt
ZXRob2QsIGJlZm9yZQorLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXIKKy8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0aGUgY3Vy
cmVudCBpbnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KKworc3RhdGljIHVpbnQ2
NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmluZyBuYW1l
QXNDU3RyaW5nID0gQ1N0cmluZyhuYW1lKTsKKworICAgIC8vIExvb2sgdXAgbmFtZSBpbiBvdXIg
bG9jYWwgbWFwLgorICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyID0gKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOworICAgIFNoYWRlck5hbWVI
YXNoOjppdGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5m
aW5kKG5hbWVBc0NTdHJpbmcpOworICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlci0+ZW5kKCkpCisgICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZTsK
KworICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOworCisgICAg
Ly8gQ29udmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8gYSA2NC1i
aXQgcmVzdWx0CisgICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUgb2Ygb3Vy
IHRhYmxlLiBPdmVyZmxvdyB3b3VsZAorICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlmIHdlJ3Jl
IGFscmVhZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCisgICAgLy8gd2UncmUgaG9w
aW5nIHRoYXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKKyAgICAvLyBkb24n
dCBoYXZlIHRoYXQgbWFueSBzeW1ib2xzKS4KKworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGhhc2hW
YWx1ZTsKKyAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXItPnNpemUoKSArIDEpOworCisgICAgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVy
LT5zZXQobmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChh
dHRyaWJ1dGVzKQoreworI2lmIFVTRShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gbWFr
ZVVuaXF1ZTxOaWNvc2lhOjpHQ0dMTGF5ZXI+KCp0aGlzKTsKKyNlbHNlCisgICAgbV90ZXhtYXBM
YXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7
CisjZW5kaWYKKworICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0
ZXMoKTsKKyAgICBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkg
aGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9uLgorCisgICAgLy8gQ3JlYXRlIGEgdGV4dHVy
ZSB0byByZW5kZXIgaW50by4KKyAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Cisg
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworICAgIC8vIENyZWF0
ZSBhbiBGQk8uCisgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1
cmUpOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRp
YXRlVGV4dHVyZSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faW50ZXJt
ZWRpYXRlVGV4dHVyZSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6Omds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIDApOworI2VuZGlmCisKKyAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8u
CisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEdlbkZyYW1l
YnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX3N0YXRlLmJv
dW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAg
ICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAg
ICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisg
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91
bmRSZWFkRkJPID0gbV9mYm87CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgaWYgKGF0dHJp
YnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhC
dWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAgIGlm
IChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGds
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKworI2lm
ICFVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRf
U0laRSk7CisKKyAgICBpZiAoR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjAp
IHsKKyAgICAgICAgbV91c2luZ0NvcmVQcm9maWxlID0gdHJ1ZTsKKworICAgICAgICAvLyBGcm9t
IHZlcnNpb24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgc28gcmVxdWVz
dCB0aGF0IG91cHV0IHRvIHRoZSBzaGFkZXIgY29tcGlsZXIuCisgICAgICAgIC8vIE9wZW5HTCB2
ZXJzaW9uIDMuMiB1c2VzIEdMU0wgdmVyc2lvbiAxLjUwLgorICAgICAgICBtX2NvbXBpbGVyID0g
QU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF8xNTBfQ09SRV9PVVRQVVQpOworCisgICAgICAgIC8v
IEZyb20gdmVyc2lvbiAzLjIgb24gd2UgdXNlIHRoZSBPcGVuR0wgQ29yZSBwcm9maWxlLCBhbmQg
d2UgbmVlZCBhIFZBTyBmb3IgcmVuZGVyaW5nLgorICAgICAgICAvLyBBIFZBTyBjb3VsZCBiZSBj
cmVhdGVkIGFuZCBib3VuZCBieSBlYWNoIGNvbXBvbmVudCB1c2luZyBHTCByZW5kZXJpbmcgKFRl
eHR1cmVNYXBwZXIsIFdlYkdMLCBldGMpLiBUaGlzIGlzCisgICAgICAgIC8vIGEgc2ltcGxlciBz
b2x1dGlvbjogdGhlIGZpcnN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNyZWF0ZWQgb24gYSBH
TENvbnRleHQgd2lsbCBjcmVhdGUgYW5kIGJpbmQgYSBWQU8gZm9yIHRoYXQgY29udGV4dC4KKyAg
ICAgICAgR0NHTGludCBjdXJyZW50VkFPID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6VkVSVEVYX0FSUkFZX0JJTkRJTkcpOworICAgICAgICBpZiAoIWN1cnJlbnRWQU8pIHsK
KyAgICAgICAgICAgIG1fdmFvID0gY3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICAgICAgICAgIGJp
bmRWZXJ0ZXhBcnJheShtX3Zhbyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBGb3IgbG93ZXIgdmVyc2lvbnMgcmVxdWVzdCB0aGUgY29tcGF0aWJpbGl0eSBvdXRwdXQgdG8g
dGhlIHNoYWRlciBjb21waWxlci4KKyAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJp
ZGdlKFNIX0dMU0xfQ09NUEFUSUJJTElUWV9PVVRQVVQpOworCisgICAgICAgIC8vIEdMX1BPSU5U
X1NQUklURSBpcyBuZWVkZWQgaW4gbG93ZXIgdmVyc2lvbnMuCisgICAgICAgIDo6Z2xFbmFibGUo
R0xfUE9JTlRfU1BSSVRFKTsKKyAgICB9CisjZWxzZQorICAgIC8vIEFkanVzdCB0aGUgc2hhZGVy
IHNwZWNpZmljYXRpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMgKGkuZS4gV2ViR0wyIHN1
cHBvcnQpIHdhcyByZXF1ZXN0ZWQuCisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICBtX2NvbXBpbGVy
ID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfRVNTTF9PVVRQVVQsIChhdHRyaWJ1dGVzLndlYkdMVmVy
c2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyKSA/IFNIX1dFQkdM
Ml9TUEVDIDogU0hfV0VCR0xfU1BFQyk7CisjZWxzZQorICAgIG1fY29tcGlsZXIgPSBBTkdMRVdl
YktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCwgU0hfV0VCR0xfU1BFQyk7CisjZW5kaWYKKyNlbmRp
ZgorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWlsdEluUmVzb3VyY2Vz
IEFOR0xFUmVzb3VyY2VzOworICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNv
dXJjZXMpOworCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyA9IGdldEludGVn
ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgQU5H
TEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyk7CisgICAgQU5HTEVS
ZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpNQVhfVkFSWUlOR19WRUNUT1JTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICBBTkdMRVJlc291
cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyk7CisKKyAgICAvLyBBbHdheXMgc2V0IHRv
IDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7
CisKKyAgICBHQ0dMaW50IHJhbmdlWzJdIHsgfTsKKyAgICBHQ0dMaW50IHByZWNpc2lvbiA9IDA7
CisgICAgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpG
UkFHTUVOVF9TSEFERVIsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpISUdIX0ZMT0FULCByYW5n
ZSwgJnByZWNpc2lvbik7CisgICAgQU5HTEVSZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdo
ID0gKHJhbmdlWzBdIHx8IHJhbmdlWzFdIHx8IHByZWNpc2lvbik7CisKKyAgICBtX2NvbXBpbGVy
LnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKK30KKworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRH
TE9wZW5HTCgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRN
YW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAg
IGlmIChtX3RleHR1cmUpCisgICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJl
KTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRl
eHR1cmUpCisgICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CisjZW5kaWYKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChh
dHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xE
ZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgewor
I2lmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIGlmIChtX2RlcHRoQnVmZmVyKQorICAgICAgICAg
ICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKworICAgICAgICBp
ZiAobV9zdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZtX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1
ZmZlcikKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisgICAgfQorICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJv
KTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgOjpnbERlbGV0ZVRleHR1cmVz
KDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworI2VuZGlmCisKKyNpZiBVU0UoQ0FJUk8pCisg
ICAgaWYgKG1fdmFvKQorICAgICAgICBkZWxldGVWZXJ0ZXhBcnJheShtX3Zhbyk7CisjZW5kaWYK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkK
K3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPm1ha2VDb250
ZXh0Q3VycmVudCgpOworI2Vsc2UKKyAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2hlY2tHUFVTdGF0dXMoKQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c0dMRVMyQ29tcGxpYW50KCkgY29uc3QKK3sKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIHJldHVy
biB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworI2lmIFBMQVRG
T1JNKEdUSykKK0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbiYgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKSB7CisjaWYgVVNF
KE9QRU5HTF9FUykKKyAgICAgICAgLy8gZ2xHZXRTdHJpbmdpIGlzIG5vdCBhdmFpbGFibGUgb24g
R0xFUzIuCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3Bl
bkdMRVM+KHRoaXMsICBmYWxzZSk7CisjZWxzZQorICAgICAgICAvLyBGcm9tIE9wZW5HTCAzLjIg
b24gd2UgdXNlIHRoZSBDb3JlIHByb2ZpbGUsIGFuZCB0aGVyZSB3ZSBtdXN0IHVzZSBnbEdldFN0
cmluZ2kuCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3Bl
bkdMPih0aGlzLCBHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCk7CisjZW5k
aWYKKyAgICB9CisgICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Cit9CisjZW5kaWYKKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkKK3sKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2ltdWxhdGVFdmVudEZvclRlc3Rpbmco
U2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nIGV2ZW50KQoreworICAgIGlmIChldmVudCA9PSBTaW11
bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1cmUpCisgICAgICAgIG1fZmFpbE5l
eHRTdGF0dXNDaGVjayA9IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnByZXBhcmVGb3JEaXNwbGF5KCkKK3sKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCit7CisgICAg
cmV0dXJuIHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvbikKK3sKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsK
KworICAgIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbiYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lv
bnMoKTsKKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBpZiAoZXh0ZW5zaW9ucy5z
dXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7CisgICAgICAgICAgICBleHRl
bnNpb25zLmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKKyAgICAg
ICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KKyAgICAgICAgICAgIGF0
dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBhdHRycy5zdGVu
Y2lsID0gZmFsc2U7CisgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICB9
CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiAhbV9pc0ZvcldlYkdMMikgeworICAgICAgICBp
ZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
IikpIHsKKyAgICAgICAgICAgIGF0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgICAgICAgICAg
c2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUiKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVU
ZXh0dXJlKCkKK3sKKyAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworCisj
aWYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5n
IHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CisgICAgVGVtcG9yYXJ5
T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7CisjZW5kaWYK
KworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykKKyAgICAgICAgcmVzb2x2
ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAg
IHN0ZDo6c3dhcChtX3RleHR1cmUsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIDo6Z2xGcmFtZWJ1ZmZl
clRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VY
VCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEZsdXNoKCk7CisKKyAgICBB
U1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAg
IGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKKyAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRE
cmF3RkJPKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgcmV0dXJuOworI2VuZGlmCisK
KyAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fc3RhdGUuYm91bmRUYXJnZXQoR0xfVEVYVFVSRTApID09IEdMX1RF
WFRVUkVfMkQgPyBtX3N0YXRlLmJvdW5kVGV4dHVyZShHTF9URVhUVVJFMCkgOiAwKTsKKyAgICA6
OmdsQWN0aXZlVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0KTsKKyAgICBBU1NFUlQo
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmICht
X3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKKyAgICA6OmdsRmx1c2goKTsKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKK3sKKyAgICBib29s
IG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50
aWFsaWFzKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyk7CisgICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykgeworICAg
ICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBhdXRvIHJlc3VsdCA9IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMo
KTsKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgaWYgKHdpZHRoID09IG1fY3Vy
cmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdodCA+PSAwKTsKKyAgICBpZiAod2lkdGgg
PCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgp
OworCisgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAgICBtX2N1cnJlbnRIZWlnaHQgPSBo
ZWlnaHQ7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIFRlbXBvcmFyeU9wZW5H
TFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKKyAgICBU
ZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsK
KyAgICAKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gcmVzaGFwZUZCT3MoSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7CisKKyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAg
ICBHTGZsb2F0IGNsZWFyQ29sb3JbXSA9IHsgMCwgMCwgMCwgMCB9LCBjbGVhckRlcHRoID0gMDsK
KyAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAwOworICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9
IHsgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSB9LCBkZXB0aE1hc2sgPSBHTF9U
UlVFOworICAgIEdMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmYsIHN0ZW5jaWxNYXNrQmFj
ayA9IDB4ZmZmZmZmZmY7CisgICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZG
RVJfQklUOworICAgIDo6Z2xHZXRGbG9hdHYoR0xfQ09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29s
b3IpOworICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIDo6Z2xHZXRCb29sZWFu
dihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7CisgICAgOjpnbENvbG9yTWFzayhHTF9U
UlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKKworICAgIGF1dG8gYXR0cnMgPSBjb250
ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0dHJzLmRlcHRoKSB7CisgICAgICAgIDo6Z2xH
ZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7CisgICAgICAgIDo6Z2xHZXRCb29s
ZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOworICAgICAgICA6OmdsRGVwdGhN
YXNrKEdMX1RSVUUpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsK
KyAgICB9CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2
KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsQ2xl
YXJTdGVuY2lsKDApOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1B
U0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2spKTsKKyAgICAgICAgOjpn
bEdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8
R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFy
YXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKKyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUoR0xfQkFDSywgMHhmZmZmZmZmZik7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lM
X0JVRkZFUl9CSVQ7CisgICAgfQorCisgICAgOjpnbENsZWFyKGNsZWFyTWFzayk7CisKKyAgICA6
OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJd
LCBjbGVhckNvbG9yWzNdKTsKKyAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JN
YXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7CisgICAgaWYgKGF0dHJzLmRlcHRo
KSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKGNsZWFyRGVw
dGgpOworICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7CisgICAgfQorICAgIGlmIChh
dHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsK
KyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIHN0ZW5jaWxNYXNrKTsK
KyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgc3RlbmNpbE1hc2tCYWNr
KTsKKyAgICB9CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7CisKKyAgICBhdXRvIGVycm9yID0gOjpnbEdldEVycm9yKCk7CisgICAgaWYgKGVy
cm9yICE9IEdMX05PX0VSUk9SKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYkdMLCAiRmF0YWw6
IE9wZW5HTCBlcnJvciBkdXJpbmcgR3JhcGhpY3NDb250ZXh0R0wgYnVmZmVyIGluaXRpYWxpemF0
aW9uICglZCkuIiwgZXJyb3IpOworICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICA6OmdsRmx1c2goKTsKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmcoUGxhdGZvcm1HTE9iamVjdCB2ZXJ0
ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOworICAgIEFT
U0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOworICAgIGNv
bnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0ZXhTaGFk
ZXIpLT52YWx1ZTsKKyAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOworCisgICAgSGFzaE1hcDxTdHJpbmcs
IHNoOjpTaGFkZXJWYXJpYWJsZT4gY29tYmluZWRWYXJ5aW5nczsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIHZlcnRleFN5bWJvbCA6IHZlcnRleEVudHJ5LnZhcnlpbmdNYXApIHsKKyAgICAgICAgY29u
c3QgU3RyaW5nJiBzeW1ib2xOYW1lID0gdmVydGV4U3ltYm9sLmtleTsKKyAgICAgICAgLy8gVGhl
IHZhcnlpbmcgbWFwIGluY2x1ZGVzIHZhcmlhYmxlcyBmb3IgZWFjaCBpbmRleCBvZiBhbiBhcnJh
eSB2YXJpYWJsZS4KKyAgICAgICAgLy8gV2Ugb25seSB3YW50IGEgc2luZ2xlIHZhcmlhYmxlIHRv
IHJlcHJlc2VudCB0aGUgYXJyYXkuCisgICAgICAgIGlmIChzeW1ib2xOYW1lLmVuZHNXaXRoKCJd
IikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBEb24ndCBjb3VudCBidWls
dCBpbiB2YXJ5aW5ncy4KKyAgICAgICAgaWYgKHN5bWJvbE5hbWUgPT0gImdsX0ZyYWdDb29yZCIg
fHwgc3ltYm9sTmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciIHx8IHN5bWJvbE5hbWUgPT0gImdsX1Bv
aW50Q29vcmQiKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgYXV0byYg
ZnJhZ21lbnRTeW1ib2wgPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAuZmluZChzeW1ib2xOYW1l
KTsKKyAgICAgICAgaWYgKGZyYWdtZW50U3ltYm9sICE9IGZyYWdtZW50RW50cnkudmFyeWluZ01h
cC5lbmQoKSkKKyAgICAgICAgICAgIGNvbWJpbmVkVmFyeWluZ3MuYWRkKHN5bWJvbE5hbWUsIGZy
YWdtZW50U3ltYm9sLT52YWx1ZSk7CisgICAgfQorCisgICAgc2l6ZV90IG51bVZhcnlpbmdzID0g
Y29tYmluZWRWYXJ5aW5ncy5zaXplKCk7CisgICAgaWYgKCFudW1WYXJ5aW5ncykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBzdGQ6OnZlY3RvcjxzaDo6U2hhZGVyVmFyaWFibGU+IHZhcmlh
YmxlczsKKyAgICB2YXJpYWJsZXMucmVzZXJ2ZShjb21iaW5lZFZhcnlpbmdzLnNpemUoKSk7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiB2YXJ5aW5nU3ltYm9sIDogY29tYmluZWRWYXJ5aW5ncy52YWx1
ZXMoKSkKKyAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2YXJ5aW5nU3ltYm9sKTsKKworICAg
IEdDR0xpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSAwOworI2lmIFVTRShPUEVOR0xfRVMpCisgICAg
OjpnbEdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7
CisjZWxzZQorICAgIGlmIChtX2lzRm9yV2ViR0wyKQorICAgICAgICA6OmdsR2V0SW50ZWdlcnYo
R0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgR0NHTGludCBtYXhWYXJ5aW5nRmxvYXRzID0gMDsKKyAgICAgICAgOjpnbEdldElu
dGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgJm1heFZhcnlpbmdGbG9hdHMpOworICAgICAg
ICBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1heFZhcnlpbmdGbG9hdHMgLyA0OworICAgIH0KKyNlbmRp
ZgorICAgIHJldHVybiBzaDo6Q2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRzKG1heFZh
cnlpbmdWZWN0b3JzLCB2YXJpYWJsZXMpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRm
b3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc2hhZGVy
U291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOworICAgIEFTU0VSVChtX3NoYWRlclNv
dXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOworICAgIGNvbnN0IGF1dG8mIHZlcnRl
eEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKKyAg
ICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFn
bWVudFNoYWRlciktPnZhbHVlOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHNoOjpHTGVudW0+IHZl
cnRleFN5bWJvbFByZWNpc2lvbk1hcDsKKworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiB2
ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBw
ZWROYW1lID0gZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKKyAgICAgICAgdmVydGV4U3lt
Ym9sUHJlY2lzaW9uTWFwLmFkZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1l
Lmxlbmd0aCgpKSwgZW50cnkudmFsdWUuZ2V0KCkucHJlY2lzaW9uKTsKKyAgICB9CisKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRyeS51bmlmb3JtTWFwKSB7CisgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUuZ2V0KCkubWFw
cGVkTmFtZTsKKyAgICAgICAgY29uc3QgYXV0byYgdmVydGV4U3ltYm9sID0gdmVydGV4U3ltYm9s
UHJlY2lzaW9uTWFwLmZpbmQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5s
ZW5ndGgoKSkpOworICAgICAgICBpZiAodmVydGV4U3ltYm9sICE9IHZlcnRleFN5bWJvbFByZWNp
c2lvbk1hcC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVlICE9IGVudHJ5LnZhbHVlLmdldCgp
LnByZWNpc2lvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVy
ZShHQ0dMZW51bSB0ZXh0dXJlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJl
OworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJU
KHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwor
ICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQo
cHJvZ3JhbSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNI
QURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOworICAgIExPRyhXZWJHTCwgIjo6Ymlu
ZEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgOjpnbEJpbmRBdHRyaWJMb2NhdGlvbihw
cm9ncmFtLCBpbmRleCwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRh
cmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR0x1aW50IGZibzsKKyAgICBpZiAoYnVm
ZmVyKQorICAgICAgICBmYm8gPSBidWZmZXI7CisgICAgZWxzZQorICAgICAgICBmYm8gPSAoY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwor
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIpOworICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGZibyAhPSBt
X3N0YXRlLmJvdW5kRHJhd0ZCTykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRh
cmdldCwgZmJvKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5k
UmVhZEZCTyA9IGZibzsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHJlbmRl
cmJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7
Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5zZXRCb3VuZFRl
eHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4dHVyZSwgdGFyZ2V0KTsKKyAgICA6
OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwg
R0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUo
R0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhhKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEVxdWF0aW9u
U2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVudW0gZGZhY3RvcikK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOworfSAgICAgICAKKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBH
Q0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCB2b2lkPiBk
YXRhLCBHQ0dMZW51bSB1c2FnZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZz
ZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhKTsKK30KKworR0NHTGVudW0gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElE
X09QRVJBVElPTjsKKworICAgIHJldHVybiA6OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCh0
YXJnZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdD
R0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmIGIsIEdDR0xjbGFtcGYgYSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENsZWFyKG1hc2spOworICAgIGNo
ZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
U3RlbmNpbChHQ0dMaW50IHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbENsZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwgR0NHTGJvb2xl
YW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29sZWFuIGFscGhhKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb2xv
ck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAg
IEFTU0VSVChzaGFkZXIpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFR1cm4gb24gbmFtZSBtYXBwaW5nLiBEdWUgdG8gdGhlIHdheSBB
TkdMRSBuYW1lIGhhc2hpbmcgd29ya3MsIHdlCisgICAgLy8gcG9pbnQgYSBnbG9iYWwgaGFzaG1h
cCB0byB0aGUgbWFwIG93bmVkIGJ5IHRoaXMgY29udGV4dC4KKyAgICBTaEJ1aWx0SW5SZXNvdXJj
ZXMgQU5HTEVSZXNvdXJjZXMgPSBtX2NvbXBpbGVyLmdldFJlc291cmNlcygpOworICAgIFNoSGFz
aEZ1bmN0aW9uNjQgcHJldmlvdXNIYXNoRnVuY3Rpb24gPSBBTkdMRVJlc291cmNlcy5IYXNoRnVu
Y3Rpb247CisgICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0gbmFtZUhhc2hGb3JTaGFk
ZXI7CisKKyAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKKyAgICAgICAgbmFtZUhhc2hN
YXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsKKyAgICBzZXRDdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFkZXJzLmdldCgpKTsKKyAg
ICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisKKyAgICBTdHJpbmcg
dHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9ucy0+Z2V0VHJhbnNsYXRlZFNoYWRl
clNvdXJjZUFOR0xFKHNoYWRlcik7CisKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24g
PSBwcmV2aW91c0hhc2hGdW5jdGlvbjsKKyAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdM
RVJlc291cmNlcyk7CisgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51bGxwdHIp
OworCisgICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZyA9IHRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIHRyYW5zbGF0ZWRT
aGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5kYXRhKCk7CisgICAgaW50IHRyYW5z
bGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5sZW5ndGgoKTsKKwor
ICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuJXNc
bi0tLSBlbmQgb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIGdldFNoYWRlclNvdXJjZShz
aGFkZXIpLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiB0cmFuc2xh
dGVkIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCB0cmFuc2xhdGVkIHNoYWRlciBzb3Vy
Y2UgLS0tIiwgdHJhbnNsYXRlZFNoYWRlclB0cik7CisKKyAgICA6OmdsU2hhZGVyU291cmNlKHNo
YWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoKTsK
KyAgICAKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIAorICAgIGludCBjb21w
aWxlU3RhdHVzOworICAgIAorICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RB
VFVTLCAmY29tcGlsZVN0YXR1cyk7CisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTaGFkZXJTb3VyY2VF
bnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgLy8gUG9wdWxhdGUgdGhlIHNoYWRl
ciBsb2cKKyAgICBHTGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIs
IEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisKKyAgICBpZiAobGVuZ3RoKSB7CisgICAg
ICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3Ro
KTsKKyAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBp
bmZvLmRhdGEoKSk7CisKKyAgICAgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyBz
aGFkZXIsIDAgfTsKKyAgICAgICAgZW50cnkubG9nID0gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFk
ZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKKyAgICB9CisKKyAgICBpZiAoY29t
cGlsZVN0YXR1cyAhPSBHTF9UUlVFKSB7CisgICAgICAgIGVudHJ5LmlzVmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IHNoYWRlciB0cmFuc2xhdG9yIHByb2R1Y2VkIGEg
c2hhZGVyIHRoYXQgT3BlbkdMIHdvdWxkIG5vdCBjb21waWxlLiIpOworICAgIH0KK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoTWFwPFBsYXRmb3JtR0xP
YmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZChzaGFkZXIpOworCisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1h
cC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5
ID0gcmVzdWx0LT52YWx1ZTsKKworICAgIGNvbnN0IENTdHJpbmcmIHNoYWRlclNvdXJjZUNTdHJp
bmcgPSBlbnRyeS5zb3VyY2UudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZVB0
ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOworICAgIGludCBzaGFkZXJTb3VyY2VMZW5n
dGggPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmxlbmd0aCgpOworCisgICAgTE9HKFdlYkdMLCAiLS0t
IGJlZ2luIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgZGlyZWN0IHNoYWRl
ciBzb3VyY2UgLS0tXG4iLCBzaGFkZXJTb3VyY2VQdHIpOworCisgICAgOjpnbFNoYWRlclNvdXJj
ZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZzaGFkZXJTb3VyY2VMZW5ndGgpOworCisg
ICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKworICAgIGludCBjb21waWxlU3RhdHVzOwor
CisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3Rh
dHVzKTsKKworICAgIGlmIChjb21waWxlU3RhdHVzID09IEdMX1RSVUUpIHsKKyAgICAgICAgZW50
cnkuaXNWYWxpZCA9IHRydWU7CisgICAgICAgIExPRyhXZWJHTCwgIkRpcmVjdCBjb21waWxhdGlv
biBvZiBzaGFkZXIgc3VjY2VlZGVkLiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVudHJ5Lmlz
VmFsaWQgPSBmYWxzZTsKKyAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IGRpcmVjdCBjb21waWxh
dGlvbiBvZiBzaGFkZXIgZmFpbGVkLiIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBhdHRycyA9
IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8g
PT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9z
dGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNvbHZl
TXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgIH0KKyAgICA6OmdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgaWYg
KGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBhdHRycyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7CisKKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9z
dGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5i
b3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOworICAgIH0KKyAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEN1bGxGYWNlKG1vZGUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
RGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0
aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3Zl
KHByb2dyYW0pOworICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bERpc2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51
bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKKyAgICBjaGVja0dQVVN0
YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVu
dW0gY2FwKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xFbmFibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmluaXNoKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsRmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZsdXNoKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsRmx1c2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0
dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSwgR0NHTGludCBsZXZlbCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQodGFy
Z2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBtX3N0YXRl
LnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbEZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcCh0
YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRy
aWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdM
aW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwg
R0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CisgICAg
VmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXplKTsgLy8gR0xfQUNUSVZFX0FUVFJJ
QlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisgICAgR0xzaXplaSBu
YW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7
CisgICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgbWF4QXR0cmlidXRlU2l6
ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOworICAgIGlmICghbmFt
ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFN0cmluZyBvcmlnaW5h
bE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FU
VFJJQlVURSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7CisgICAgCisjaWZuZGVm
IE5ERUJVRworICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7
CisgICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSBhdHRyaWJ1dGUg
JWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgp
LmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisKKyAgICBpbmZv
Lm5hbWUgPSBvcmlnaW5hbE5hbWU7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNp
emUgPSBzaXplOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBHQ0dMaW50IHN5bWJvbENvdW50Owor
ICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9n
cmFtKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVu
ZCgpKSB7CisgICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChwcm9ncmFtLCBH
cmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX0FUVFJJQlVURVMsICZzeW1ib2xDb3VudCk7CisgICAg
ICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7
CisgICAgfQorICAgIAorICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRz
ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJv
bENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJv
bENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXBbaW5kZXhdIDogLTE7CisK
KyAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBs
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGlu
Zm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0xpbnQg
bWF4VW5pZm9ybVNpemUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNU
SVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKKworICAgIFZlY3RvcjxH
TGNoYXI+IG5hbWUobWF4VW5pZm9ybVNpemUpOyAvLyBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVO
R1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0g
MDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdl
dEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0
aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdp
bmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgU3RyaW5n
KG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIFN0
cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7CisgICAgTE9HKFdlYkdM
LCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSB1bmlmb3JtICVkIGZyb20gJyVzJyB0byAn
JXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFs
TmFtZS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgIAorICAgIGluZm8ubmFtZSA9IG9yaWdp
bmFsTmFtZTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0
aXZlSW5mbyYgaW5mbykKK3sKKyAgICBHQ0dMaW50IHN5bWJvbENvdW50OworICAgIGF1dG8gcmVz
dWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICBp
ZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7CisgICAg
ICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChwcm9ncmFtLCBHcmFwaGljc0NvbnRl
eHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291bnQpOworICAgICAgICByZXN1bHQgPSBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIH0KKyAgICAK
KyAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+dmFs
dWU7CisgICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmlsdGVy
ZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVk
VG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhdIDogLTE7CisgICAgCisgICAgcmV0dXJuIGdl
dEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJhd0luZGV4LCBpbmZvKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHNpemVpIG1heENvdW50LCBHQ0dMc2l6ZWkqIGNvdW50LCBQbGF0Zm9y
bUdMT2JqZWN0KiBzaGFkZXJzKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
R2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Cit9
CisKK3N0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIYXNoZWROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIHVp
bnQ2NF90IG51bWJlciA9IG5hbWVIYXNoRm9yU2hhZGVyKG5hbWUudXRmOCgpLmRhdGEoKSwgbmFt
ZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIndlYmdsXyIsIGhleChudW1iZXIs
IExvd2VyY2FzZSkpOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAgPSByZXN1bHQt
PnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKKyAgICBhdXRvIHN5bWJvbEVudHJ5ID0gc3lt
Ym9sTWFwLmZpbmQobmFtZSk7CisgICAgaWYgKHN5bWJvbEVudHJ5ID09IHN5bWJvbE1hcC5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8mIG1hcHBlZE5hbWUg
PSBzeW1ib2xFbnRyeS0+dmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKKyAgICByZXR1cm4gU3RyaW5n
KG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSk7Cit9CisKK1N0cmluZyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgR0NHTHNpemVpIGNvdW50ID0gMDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7CisKKyAgICBmb3IgKEdDR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3Vy
Y2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWRO
YW1lKQorICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAg
ICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIg
bGlua2luZy4KKyAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQocHJvZ3Jh
bSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgeworICAgICAg
ICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOworICAgICAgICBhdXRvIG1hcHBl
ZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0
LCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAg
ICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOworICAgICAgICBtYXBwZWROYW1lID0gbWFwcGVk
U3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUs
IG5hbWUpOworICAgICAgICBpZiAobWFwcGVkTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBw
ZWROYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZ
TUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQXR0
cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUg
YW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAorICAgICAgICAvLyBhbmQgYXJlbid0IGV2
ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCisgICAgICAgIGlm
ICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQorICAgICAgICAgICAgbmFtZUhhc2hNYXBGb3JTaGFk
ZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsKKyAgICAgICAgc2V0Q3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7CisKKyAgICAg
ICAgYXV0byBnZW5lcmF0ZWROYW1lID0gZ2VuZXJhdGVIYXNoZWROYW1lKG5hbWUpOworCisgICAg
ICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsKKworICAgICAgICBt
X3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLnNldChnZW5lcmF0ZWROYW1lLCBuYW1lKTsKKwor
ICAgICAgICByZXR1cm4gZ2VuZXJhdGVkTmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFtZTsK
K30KKworc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmln
aW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdM
RVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJv
bE1hcChzeW1ib2xUeXBlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3lt
Ym9sTWFwKSB7CisgICAgICAgIGlmIChuYW1lID09IHN5bWJvbEVudHJ5LnZhbHVlLmdldCgpLm1h
cHBlZE5hbWUuY19zdHIoKSkKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS5rZXk7Cisg
ICAgfQorICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
QU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBHQ0dMc2l6ZWkgY291bnQ7CisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdOwor
ICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworICAg
IAorICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBh
dXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVy
c1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCisgICAg
ICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgLy8gV2Ug
bWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcu
CisgICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOworICAg
IGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKKyAgICAgICAgYXV0byBs
aW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKKyAgICAgICAgYXV0byBvcmlnaW5hbE5hbWUg
PSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuZmlyc3QsIHN5
bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAgICAgICAgICAg
cmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgICAgICBvcmlnaW5hbE5hbWUgPSBvcmln
aW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xU
eXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVy
biBvcmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoc3ltYm9sVHlwZSA9PSBT
SEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHkoKSkgeworICAgICAg
ICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkgYmUgcmVxdWVzdGVk
IGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCisgICAgICAgIC8vIGFuZCBh
cmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIgcHJvZ3JhbS4KKwor
ICAgICAgICBjb25zdCBhdXRvJiBjYWNoZWQgPSBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFw
LmZpbmQobmFtZSk7CisgICAgICAgIGlmIChjYWNoZWQgIT0gbV9wb3NzaWJseVVudXNlZEF0dHJp
YnV0ZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWQtPnZhbHVlOworICAgIH0K
KworICAgIHJldHVybiBuYW1lOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBzaXplX3QgY291
bnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBmb3IgKHNpemVfdCBzeW1ib2xUeXBlID0g
MDsgc3ltYm9sVHlwZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KFNIQURFUl9TWU1CT0xfVFlQRV9W
QVJZSU5HKTsgKytzeW1ib2xUeXBlKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgeworICAgICAgICAgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcnNbaV0pOworICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uc3QgU2hhZGVyU3ltYm9sTWFwJiBz
eW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzdGF0aWNfY2FzdDxlbnVtIEFOR0xF
U2hhZGVyU3ltYm9sVHlwZT4oc3ltYm9sVHlwZSkpOworICAgICAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgeworICAgICAgICAgICAgICAgIGlmIChuYW1l
ID09IHN5bWJvbEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWUuY19zdHIoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gbmFtZTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAtMTsK
KworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKKwor
CisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURF
Ul9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOworICAgIExPRyhXZWJHTCwgIjo6Z2xHZXRB
dHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBt
YXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAg
ICAgIHJldHVybiAtMTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiAtMTsKKworCisgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgbW92ZWRBbkVy
cm9yID0gZmFsc2U7CisKKyAgICAvLyBTZXQgYW4gYXJiaXRyYXJ5IGxpbWl0IG9mIDEwMCBoZXJl
IHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgorICAgIC8vIGEgcHJvYmxlbSBkcml2ZXIgaGFz
IGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIG5ldmVyIGNsZWFyIHRoZSBlcnJvci4KKyAgICAvLyBP
dGhlcndpc2UsIHdlIHdvdWxkIGp1c3QgbG9vcCB1bnRpbCB3ZSBnb3QgTk9fRVJST1IuCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIEdDR0xlbnVtIGVy
cm9yID0gZ2xHZXRFcnJvcigpOworICAgICAgICBpZiAoZXJyb3IgPT0gTk9fRVJST1IpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKKyAg
ICAgICAgbW92ZWRBbkVycm9yID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbW92ZWRBbkVy
cm9yOworfQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJyb3IoKQor
eworICAgIGlmICghbV9zeW50aGV0aWNFcnJvcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIE5l
ZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0
IGluIGNhc2UKKyAgICAgICAgLy8gdGhhdCBlcnJvciBpcyBhbHJlYWR5IHRoZXJlLCBzaW5jZSB0
aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgYm90aAorICAgICAgICAvLyBnbEdldEVycm9yIGFuZCBn
ZXRFcnJvciBpcyB0byBvbmx5IHJlcG9ydCBlYWNoIGVycm9yIGNvZGUgb25jZS4KKyAgICAgICAg
bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgICAgIHJldHVybiBtX3N5bnRo
ZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsKKyAgICB9CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisKKyAgICByZXR1
cm4gOjpnbEdldEVycm9yKCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIFN0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKG5hbWUpKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBt
b2RlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJu
IDo6Z2xJc0J1ZmZlcihidWZmZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElz
RW5hYmxlZChjYXApOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIGlmICgh
ZnJhbWVidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6
OmdsSXNGcmFtZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQor
eworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAg
cmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1
ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVChyZW5kZXJidWZmZXIpOwor
fQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKK30KKworR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybUdMT2Jq
ZWN0IHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0aCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
TGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlu
a1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFt
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKwor
ICAgIEdDR0xzaXplaSBjb3VudCA9IDA7CisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJd
ID0geyB9OworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRl
cnMpOworCisgICAgaWYgKGNvdW50ID09IDIpCisgICAgICAgIG1fbGlua2VkU2hhZGVyTWFwLnNl
dChwcm9ncmFtLCBzdGQ6Om1ha2VfcGFpcihzaGFkZXJzWzBdLCBzaGFkZXJzWzFdKSk7CisKKyAg
ICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xQ
aXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4g
aW52ZXJ0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IEFTU0VSVChzaGFkZXIpOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsKKworICAgIGVudHJ5
LnNvdXJjZSA9IHN0cmluZzsKKworICAgIG1fc2hhZGVyU291cmNlTWFwLnNldChzaGFkZXIsIFdU
Rk1vdmUoZW50cnkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywg
R0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFj
ZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbE1hc2sobWFzayk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBt
YXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xl
bnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbE9w
KGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFp
bCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFs
dWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0
LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMWYobG9j
YXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5kYXRhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMmYobG9jYXRpb24sIHYw
LCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJh
eS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9h
dCB2MSwgR0NHTGZsb2F0IHYyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJU
KCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkuYnVm
U2l6ZSAvIDMsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEs
IEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGYobG9jYXRpb24sIHYw
LCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQor
eworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm00ZnYobG9jYXRp
b24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bnQ+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJh
eS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0yaShs
b2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
K3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0
aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBH
Q0dMaW50IHYxLCBHQ0dMaW50IHYyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwg
djIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQoreworICAgIEFTU0VS
VCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1
ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdD
R0xpbnQgdjIsIEdDR0xpbnQgdjMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2
MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQoreworICAgIEFT
U0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5
LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEo
YXJyYXkuYnVmU2l6ZSAlIDQpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgYXJyYXku
YnVmU2l6ZSAvIDQsIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAg
IEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA5KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRp
b24sIGFycmF5LmJ1ZlNpemUgLyA5LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJh
eSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMTYpKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKHBy
b2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIx
ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmRl
eCwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIx
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dM
dWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVy
dGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwg
R0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2
MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQ0dMdWludCBpbmRleCwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjRmdihpbmRl
eCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlw
ZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBv
ZmZzZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1h
bGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3
cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQorewor
ICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1H
TE9iamVjdCBhcnJheSkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZGVsZXRlVmVydGV4QXJyYXlP
RVMoYXJyYXkpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNW
ZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQoreworICAgIHJldHVybiBnZXRFeHRl
bnNpb25zKCkuaXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorewor
ICAgIGdldEV4dGVuc2lvbnMoKS5iaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NH
TFNwYW48R0NHTGJvb2xlYW4+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUu
ZGF0YSk7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50
IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gdmFsdWU7CisKKyAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwg
JnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1
ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZS5kYXRhKTsKK30KKworR0NHTGludDY0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7CisgICAgLy8gRklY
TUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVy
IHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNv
bnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KKyAgICAvLyA6OmdsR2V0SW50ZWdlcjY0dihwbmFt
ZSwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludDY0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRl
eCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBHQ0dMaW50NjQgdmFsdWUgPSAwOworICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJs
aW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3Jl
YXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAz
LjAuCisgICAgLy8gOjpnbEdldEludGVnZXI2NGlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKKyAg
ICByZXR1cm4gdmFsdWU7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCisgICAgICAgIGF0dGFj
aG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhl
ciB3b3Jrcy4KKyAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQo
dGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9
CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7Cisg
ICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldE5vbkJ1aWx0SW5B
Y3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50KiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoQUNUSVZFX0FUVFJJQlVURVMgPT0gcG5h
bWUgfHwgQUNUSVZFX1VOSUZPUk1TID09IHBuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgKnZhbHVlID0gcmVzdWx0LT52YWx1ZS5jb3Vu
dEZvclR5cGUocG5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zaGFkZXJQ
cm9ncmFtU3ltYm9sQ291bnRNYXAuc2V0KHByb2dyYW0sIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50
cygpKTsKKyAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSktPnZhbHVlOworCisgICAgLy8g
UmV0cmlldmUgdGhlIGFjdGl2ZSBhdHRyaWJ1dGVzLCBidWlsZCBhIGZpbHRlcmVkIGNvdW50LCBh
bmQgYSBtYXBwaW5nIG9mCisgICAgLy8gb3VyIGludGVybmFsIGF0dHJpYnV0ZXMgaW5kZXhlcyB0
byB0aGUgcmVhbCB1bmZpbHRlcmVkIGluZGV4ZXMgaW5zaWRlIE9wZW5HTC4KKyAgICBHQ0dMaW50
IGF0dHJpYnV0ZUNvdW50ID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElW
RV9BVFRSSUJVVEVTLCAmYXR0cmlidXRlQ291bnQpOworICAgIGZvciAoR0NHTGludCBpID0gMDsg
aSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgQWN0aXZlSW5mbyBpbmZvOworICAg
ICAgICBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGksIGluZm8pOworICAgICAgICBpZiAo
aW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5hcHBl
bmQoaSk7CisgICAgfQorICAgIAorICAgIC8vIERvIHRoZSBzYW1lIGZvciB1bmlmb3Jtcy4KKyAg
ICBHQ0dMaW50IHVuaWZvcm1Db3VudCA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFt
LCBBQ1RJVkVfVU5JRk9STVMsICZ1bmlmb3JtQ291bnQpOworICAgIGZvciAoR0NHTGludCBpID0g
MDsgaSA8IHVuaWZvcm1Db3VudDsgKytpKSB7CisgICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAg
ICAgICAgZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaSwgaW5mbyk7CisgICAgICAgIGlm
IChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4
TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgKnZhbHVlID0gc3ltYm9sQ291bnRzLmNv
dW50Rm9yVHlwZShwbmFtZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0sIEdDR0xzaXpl
aSBjb3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCit7CisgICAgTE9HKFdlYkdMLCAiT3JpZ2luYWwg
U2hhZGVySW5mb0xvZzpcbiVzIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworCisgICAgSlNDOjpZYXJy
OjpSZWd1bGFyRXhwcmVzc2lvbiByZWdFeHAoIndlYmdsX1swMTIzNDU2Nzg5YWJjZGVmQUJDREVG
XSsiKTsKKworICAgIFN0cmluZ0J1aWxkZXIgcHJvY2Vzc2VkTG9nOworICAgIAorICAgIC8vIEFO
R0xFIGluc2VydHMgYSAiI2V4dGVuc2lvbiIgbGluZSBpbnRvIHRoZSBzaGFkZXIgc291cmNlIHRo
YXQKKyAgICAvLyBjYXVzZXMgYSB3YXJuaW5nIGluIHNvbWUgY29tcGlsZXJzLiBUaGVyZSBpcyBu
byBwb2ludCBzaG93aW5nCisgICAgLy8gdGhpcyB3YXJuaW5nIHRvIHRoZSB1c2VyIHNpbmNlIHRo
ZXkgZGlkbid0IHdyaXRlIHRoZSBjb2RlIHRoYXQKKyAgICAvLyBpcyBjYXVzaW5nIGl0LgorICAg
IHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFuZ2xlV2FybmluZyB7ICJXQVJO
SU5HOiAwOjE6IGV4dGVuc2lvbiAnR0xfQVJCX2dwdV9zaGFkZXI1JyBpcyBub3Qgc3VwcG9ydGVk
XG4iX3MgfTsKKyAgICBpbnQgc3RhcnRGcm9tID0gbG9nLnN0YXJ0c1dpdGgoYW5nbGVXYXJuaW5n
KSA/IGFuZ2xlV2FybmluZy5nZXQoKS5sZW5ndGgoKSA6IDA7CisgICAgaW50IG1hdGNoZWRMZW5n
dGggPSAwOworCisgICAgZG8geworICAgICAgICBpbnQgc3RhcnQgPSByZWdFeHAubWF0Y2gobG9n
LCBzdGFydEZyb20sICZtYXRjaGVkTGVuZ3RoKTsKKyAgICAgICAgaWYgKHN0YXJ0ID09IC0xKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vi
c3RyaW5nKHN0YXJ0RnJvbSwgc3RhcnQgLSBzdGFydEZyb20pKTsKKyAgICAgICAgc3RhcnRGcm9t
ID0gc3RhcnQgKyBtYXRjaGVkTGVuZ3RoOworCisgICAgICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xl
ZFN5bWJvbCA9IGxvZy5zdWJzdHJpbmcoc3RhcnQsIG1hdGNoZWRMZW5ndGgpOworICAgICAgICBj
b25zdCBTdHJpbmcmIG1hcHBlZFN5bWJvbCA9IG1hcHBlZFN5bWJvbE5hbWUoc2hhZGVycywgY291
bnQsIG1hbmdsZWRTeW1ib2wpOworICAgICAgICBMT0coV2ViR0wsICJEZW1hbmdsaW5nOiAlcyB0
byAlcyIsIG1hbmdsZWRTeW1ib2wudXRmOCgpLmRhdGEoKSwgbWFwcGVkU3ltYm9sLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKG1hcHBlZFN5bWJvbCk7CisgICAg
fSB3aGlsZSAoc3RhcnRGcm9tIDwgc3RhdGljX2Nhc3Q8aW50Pihsb2cubGVuZ3RoKCkpKTsKKwor
ICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIGxvZy5sZW5n
dGgoKSAtIHN0YXJ0RnJvbSkpOworCisgICAgTE9HKFdlYkdMLCAiVW5tYW5nbGVkIFNoYWRlcklu
Zm9Mb2c6XG4lcyIsIHByb2Nlc3NlZExvZy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAg
IHJldHVybiBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0p
Cit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAg
ICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBHTHNp
emVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKKyAgICA6Omds
R2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOwor
CisgICAgR0NHTHNpemVpIGNvdW50OworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXTsK
KyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKwor
ICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIGNvdW50LCBTdHJpbmcoaW5m
by5kYXRhKCksIHNpemUpKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
KQoreworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisK
K0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcmkoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAg
IEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIAorICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBj
YXNlIERFTEVURV9TVEFUVVM6CisgICAgY2FzZSBTSEFERVJfVFlQRToKKyAgICAgICAgOjpnbEdl
dFNoYWRlcml2KHNoYWRlciwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ09NUElMRV9TVEFUVVM6CisgICAgICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCisgICAgICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT52
YWx1ZS5pc1ZhbGlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6
CisgICAgICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAg
ICAgICB2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgdmFsdWUgPSBn
ZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHZhbHVlOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNo
YWRlcik7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIGNvbnN0IFNoYWRlclNvdXJjZUVudHJ5
JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisgICAgaWYgKCFlbnRyeS5pc1ZhbGlkKQorICAgICAg
ICByZXR1cm4gZW50cnkubG9nOworCisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICA6OmdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworICAgIGlmICgh
bGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgR0xzaXplaSBzaXplID0g
MDsKKyAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgOjpnbEdldFNoYWRlcklu
Zm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgIHJldHVybiBnZXRVbm1h
bmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGNvbnN0
IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7IAorCisgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291cmNlOworfQorCitHQ0dMZmxvYXQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMZmxvYXQgdmFsdWUgPSAwLmY7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xH
ZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1
ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVy
aShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEdDR0xpbnQgdmFsdWUg
PSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAg
ICByZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPEdDR0xmbG9hdD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlv
biwgdmFsdWUuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPEdDR0xpbnQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24s
IHZhbHVlLmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48R0NHTHVpbnQ+IHZhbHVlKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBV
TlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Cit9CisKK0dD
R0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJv
Z3JhbSk7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
LTE7CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwg
U0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOworICAgIExPRyhXZWJHTCwgIjo6Z2V0
VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworR0NHTHNpemVp
cHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVp
bnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0x2b2lkKiBwb2ludGVyID0gMDsKKyAgICA6
OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdDR0xzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4ocG9pbnRlcikpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2ZmLCBHQ0dM
aW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworI2lmICFV
U0UoT1BFTkdMX0VTKQorICAgIGlmICh0eXBlID09IEhBTEZfRkxPQVRfT0VTKQorICAgICAgICB0
eXBlID0gR0xfSEFMRl9GTE9BVF9BUkI7CisjZW5kaWYKKworICAgIGlmIChtX3VzaW5nQ29yZVBy
b2ZpbGUpICB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBzb21lIGZvcm1hdCB2YWx1ZXMgdXNlZCBp
biBXZWJHTCB0aGF0IGFyZSBkZXByZWNhdGVkIHdoZW4gdXNpbmcgYSBjb3JlIHByb2ZpbGUsIHNv
IHdlIG5lZWQKKyAgICAgICAgLy8gdG8gYWRhcHQgdGhlbSwgYXMgd2UgZG8gaW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoKS4KKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsK
KyAgICAgICAgY2FzZSBBTFBIQToKKyAgICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRUQg
dG8gYmFjayBHTF9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgorICAgICAgICAgICAgZm9y
bWF0ID0gUkVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFVNSU5BTkNFX0FM
UEhBOgorICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdMX1JHIHRvIGJhY2sgR0xfTFVNSU5B
TkNFX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCisgICAgICAgICAgICBmb3JtYXQgPSBS
RzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRl
YWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJz
IHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUuCisgICAgOjpnbFRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMuZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEuZGF0
YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3Vu
ZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRh
dGEuZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJl
bnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5CdWZm
ZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOwor
ICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHVpbnQgbyA9IDA7
CisgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwor
UGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdD
R0xlbnVtIHR5cGUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ2xDcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRf
U0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOworfQorCitQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKKyAgICBtX3N0YXRl
LnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOworICAgIHJldHVybiBvOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVy
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7
CisgICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7CisgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9y
IGRyYXdpbmcKKyAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCisg
ICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwgMCk7CisgICAgfQorICAgIGdsRGVs
ZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAgICBnbERl
bGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlLmJv
dW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7CisgICAg
ICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOworICAgIH0pOworICAg
IGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5yZW1vdmVBbGwodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQoreworICAgIC8vIE5lZWQgdG8g
bW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCisg
ICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJy
b3Igd2lsbCBnZXQKKyAgICAvLyBhbnkgZXJyb3JzIGZyb20gZ2xFcnJvciBiZWZvcmUgdGhlIGVy
cm9yIHdlIGFyZSBzeW50aGVzaXppbmcuCisgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7CisgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCgpCit7CisgICAgZm9yIChhdXRv
KiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5mb3Jj
ZUNvbnRleHRMb3N0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlY3lj
bGVDb250ZXh0KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2Ns
aWVudHMpKQorICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250ZXh0KCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24o
KQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisg
ICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit7CisgICAgZ2V0RXh0ZW5zaW9u
cygpLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3Vu
dCk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3Vu
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQp
Cit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1vZGUs
IGNvdW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcihH
Q0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBnZXRFeHRlbnNpb25zKCku
dmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsKK30KKworI2lmIEhBVkUo
T1BFTkdMXzQpICYmIEVOQUJMRShXRUJHTDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQgaW5kZXgpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFByaW1pdGl2ZVJl
c3RhcnRJbmRleChpbmRleCk7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNvbnN0IHZvaWQqIGRhdGEsIEdDR0xl
bnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxlbmd0aCkKK3sKKyAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7CisgICAgVU5VU0VE
X1BBUkFNKHVzYWdlKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjT2Zmc2V0KTsKKyAgICBVTlVTRURf
UEFSQU0obGVuZ3RoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVy
U3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgZHN0Qnl0ZU9mZnNldCwgY29uc3Qg
dm9pZCogc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGRzdEJ5dGVPZmZzZXQp
OworICAgIFVOVVNFRF9QQVJBTShzcmNEYXRhKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjT2Zmc2V0
KTsKKyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKK30KKworI2lmIEhBVkUoT1BFTkdMXzQpIHx8
IEhBVkUoT1BFTkdMX0VTXzMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NH
TGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIg
c2l6ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVUYXJnZXQsIHJl
YWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKK30KKyNlbHNlCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xp
bnRwdHIsIEdDR0xpbnRwdHIsIEdDR0xzaXplaXB0cikKK3sKK30KKyNlbmRpZgorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQoreworI2lmIEhBVkUo
T1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdDR0x2b2lkKiBwdHIgPSA6OmdsTWFwQnVmZmVy
UmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwgR3JhcGhpY3NDb250ZXh0R0w6Ok1B
UF9SRUFEX0JJVCk7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1jcHko
ZGF0YS5kYXRhLCBwdHIsIGRhdGEuYnVmU2l6ZSk7CisgICAgaWYgKCE6OmdsVW5tYXBCdWZmZXIo
dGFyZ2V0KSkKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7CisjZW5k
aWYKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIo
R0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwgR0NHTGludCBzcmNZ
MSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RYMSwgR0NHTGludCBk
c3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3JjWDApOworICAgIFVOVVNFRF9QQVJBTShzcmNZMCk7CisgICAgVU5VU0VEX1BBUkFN
KHNyY1gxKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWTEpOworICAgIFVOVVNFRF9QQVJBTShkc3RY
MCk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFkwKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WDEpOwor
ICAgIFVOVVNFRF9QQVJBTShkc3RZMSk7CisgICAgVU5VU0VEX1BBUkFNKG1hc2spOworICAgIFVO
VVNFRF9QQVJBTShmaWx0ZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1l
bnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NHTGludCBsYXll
cikKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oYXR0YWNo
bWVudCk7CisgICAgVU5VU0VEX1BBUkFNKHRleHR1cmUpOworICAgIFVOVVNFRF9QQVJBTShsZXZl
bCk7CisgICAgVU5VU0VEX1BBUkFNKGxheWVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQp
OworICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVudHMpOworICAgIFVOVVNFRF9QQVJB
TSh4KTsKKyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAg
ICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCit7CisgICAgVU5VU0VEX1BBUkFNKHNyYyk7Cit9
CisKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4g
ZGF0YSkKK3sKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdl
dCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZv
cm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oYnVmU2l6
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVt
IHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4U3RvcmFnZTJEKHRhcmdl
dCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCkKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4U3RvcmFn
ZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgp
OworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRU
ZXh0dXJlKCkpOworfQorI2Vsc2UKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldElu
dGVybmFsZm9ybWF0aXYoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48R0NH
TGludD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMc2l6ZWkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRl
eFN0b3JhZ2UyRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2Uz
RChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSkKK3sKK30KKyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
eG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFS
QU0oeG9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHlvZmZzZXQpOworICAgIFVOVVNFRF9QQVJB
TSh6b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOwor
ICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Cit9CisK
K0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgVU5VU0VE
X1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShuYW1lKTsKKworICAgIHJldHVybiAw
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0x1aW50IHYwKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Cisg
ICAgVU5VU0VEX1BBUkFNKHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpCit7
CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odjApOworICAg
IFVOVVNFRF9QQVJBTSh2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dM
dWludCB2MikKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJB
TSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKKyAgICBVTlVTRURfUEFSQU0odjIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIsIEdDR0x1aW50IHYzKQor
eworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAg
ICBVTlVTRURfUEFSQU0odjEpOworICAgIFVOVVNFRF9QQVJBTSh2Mik7CisgICAgVU5VU0VEX1BB
UkFNKHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aXYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7CisgICAg
VU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNF
RF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7
CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4MmZ2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQor
eworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9z
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VE
X1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVT
RURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRh
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4NGZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5V
U0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgzZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJh
bnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQoreworICAgIFVOVVNFRF9QQVJBTShpbmRl
eCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVT
RURfUEFSQU0oeik7CisgICAgVU5VU0VEX1BBUkFNKHcpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50LCA0PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAg
ICBVTlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQg
eSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwor
ICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BB
UkFNKHopOworICAgIFVOVVNFRF9QQVJBTSh3KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0
IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBV
TlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVu
dW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCit7CisgICAgVU5V
U0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShzdHJpZGUpOworICAgIFVOVVNFRF9QQVJBTShv
ZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVt
ZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwgR0NHTHVpbnQgZW5kLCBHQ0dMc2l6
ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIFVOVVNF
RF9QQVJBTShtb2RlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhcnQpOworICAgIFVOVVNFRF9QQVJB
TShlbmQpOworICAgIFVOVVNFRF9QQVJBTShjb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUp
OworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oYnVmcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xT
cGFuPGNvbnN0IEdDR0xpbnQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsK
KyAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xl
bnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
dmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShk
cmF3YnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMZmxv
YXQgZGVwdGgsIEdDR0xpbnQgc3RlbmNpbCkKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsK
KyAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKGRlcHRoKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RlbmNpbCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworfQorCitHQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQor
eworICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAg
IFVOVVNFRF9QQVJBTShxdWVyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
K30KKworUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFy
Z2V0KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK0dD
R0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKFBsYXRmb3Jt
R0xPYmplY3QgcXVlcnksIEdDR0xlbnVtIHBuYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShxdWVy
eSk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworUGxhdGZv
cm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNh
bXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1w
bGVyKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxl
cihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIp
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kU2FtcGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit7
CisgICAgVU5VU0VEX1BBUkFNKHVuaXQpOworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmkoUGxhdGZv
cm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBV
TlVTRURfUEFSQU0ocGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
YW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMZmxvYXQgcGFyYW0pCit7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVO
VVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtKTsKK30KKworR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShz
YW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIHJldHVybiAwLmY7Cit9CisK
K0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCisKK3sKKyAgICBVTlVTRURf
UEFSQU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMDsK
K30KKworR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZlbmNlU3luYyhHQ0dMZW51
bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKK3sKKyAgICBVTlVTRURfUEFSQU0oY29u
ZGl0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOworCisgICAgcmV0dXJuIDA7Cit9CisK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMoR0NHTHN5bmMgc3lu
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3luYyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3luYyk7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGllbnRXYWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxh
Z3MsIEdDR0x1aW50NjQgdGltZW91dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3luYyk7CisgICAg
VU5VU0VEX1BBUkFNKGZsYWdzKTsKKyAgICBVTlVTRURfUEFSQU0odGltZW91dCk7CisKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NH
THN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3luYyk7CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKyAgICBVTlVT
RURfUEFSQU0odGltZW91dCk7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIFVOVVNFRF9Q
QVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIHJldHVybiAwOworfQor
CitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFuc2Zv
cm1GZWVkYmFjaygpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCit7
CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmlzVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCBpZCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oaWQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAg
IFVOVVNFRF9QQVJBTShpZCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJl
Z2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9kZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0ocHJpbWl0aXZlTW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywgR0NHTGVudW0gYnVmZmVyTW9kZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHZhcnlpbmdz
KTsKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyTW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikKK3sKKyAgICBVTlVTRURfUEFS
QU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVT
RURfUEFSQU0oYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBV
TlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICBVTlVT
RURfUEFSQU0oc2l6ZSk7Cit9CisKK1ZlY3RvcjxHQ0dMdWludD4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHVuaWZvcm1OYW1lcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3Jh
bSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1OYW1lcyk7CisKKyAgICByZXR1cm4geyB9Owor
fQorCitWZWN0b3I8R0NHTGludD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVu
aWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDR0x1aW50PiYg
dW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIFZlY3RvcjxHQ0dMaW50PiBy
ZXN1bHQodW5pZm9ybUluZGljZXMuc2l6ZSgpLCAwKTsKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBI
QVZFKE9QRU5HTF9FU18zKQorICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgOjpnbEdldEFjdGl2
ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMuc2l6ZSgpLCB1bmlmb3JtSW5kaWNl
cy5kYXRhKCksIHBuYW1lLCByZXN1bHQuZGF0YSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitHQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9y
bUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZv
cm1CbG9ja05hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9Q
QVJBTSh1bmlmb3JtQmxvY2tOYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCit7CisgICAgVU5VU0VE
X1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Cisg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0lu
ZGV4KTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrQmluZGluZyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHgpOwor
ICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNF
RF9QQVJBTShoZWlnaHQpOworICAgIFVOVVNFRF9QQVJBTShmb3JtYXQpOworICAgIFVOVVNFRF9Q
QVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3Jh
bSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxH
Q0dMaW50PiBwYXJhbXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNF
RF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAg
ICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NH
THNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0gLCBHQ0dMaW50cHRyKQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtLCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0s
IEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
KEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXpl
aSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xl
bnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Vi
SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdm9pZD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xp
bnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdD
R0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dM
aW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVp
LCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0
aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xT
cGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKK3sKKyAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51
bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKK3sKKyAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0FOR0xFKEdDR0xlbnVtLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4sIEdDR0xzaXplaSkKK3sKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKK3sKKyAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTGludCB1bnBhY2tBbGlnbm1lbnQpCit7CisgICAgQVNTRVJUKHVucGFja0Fs
aWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAyIHx8IHVucGFja0FsaWdubWVudCA9
PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKKyAgICBVbmlxdWVBcnJheTx1bnNpZ25lZCBj
aGFyPiB6ZXJvOworICAgIHVuc2lnbmVkIHNpemUgPSAwOworICAgIGlmICh3aWR0aCA+IDAgJiYg
aGVpZ2h0ID4gMCkgeworICAgICAgICBQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsKKyAgICAgICAg
cGFyYW1zLmFsaWdubWVudCA9IHVucGFja0FsaWdubWVudDsKKyAgICAgICAgR0NHTGVudW0gZXJy
b3IgPSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQs
IDEsIHBhcmFtcywgJnNpemUsIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBpZiAoZXJyb3Ig
IT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihlcnJvcik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgemVybyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPihzaXplKTsKKyAgICAg
ICAgaWYgKCF6ZXJvKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgIH0KKyAgICB0
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHplcm8uZ2V0KCksIHNpemUpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xMDMsNiArMzE3MSw2IEBAIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRl
ZFJlc3VsdHNGb3JQYWluCiAgICAgcmV0dXJuIHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9CiAKLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuaAppbmRleCA2YzgxZWE3YTg4OTU0MGQ1M2UwNjVkNDUzNGI0Njk1NmYyMGNm
YTFmLi4yNDllOTIxNWI1ZDdhYmVkMDkzMmZmNTRlNjE0NDkyOThiZDQ4ZTg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaApAQCAtMjUsNTMgKzI1LDE3IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaWYgRU5BQkxFKFdFQkdMKQorI2lmIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdM
RSkKIAorI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9u
c0dMT3BlbkdMQ29tbW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTFN0YXRlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1
ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAot
I2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNl
U3dhcENoYWluLmgiCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jZW5kaWYKLQotI2lmIFVTRShD
QSkKLSNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKLSNlbmRpZgotCi0jaWYgVVNFKEFOR0xF
KQotI2luY2x1ZGUgIkFOR0xFVXRpbGl0aWVzLmgiCi0jZWxzZQotI2luY2x1ZGUgIkFOR0xFV2Vi
S2l0QnJpZGdlLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgiCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0LmgiCi0jZW5kaWYKLQotLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGF2
b2lkIHRoZSBuYW1lIGNvbmZsaWN0aW9uIGZvciBOT19FUlJPUi4KLSNpZiBQTEFURk9STShXSU4p
Ci0jdW5kZWYgTk9fRVJST1IKLSNlbGlmIFBMQVRGT1JNKEdUSykKLS8vIFRoaXMgZGVmaW5lIGlz
IGZyb20gdGhlIFgxMSBoZWFkZXJzLCBidXQgaXQncyB1c2VkIGJlbG93LCBzbyB3ZSBtdXN0IHVu
ZGVmaW5lIGl0LgotI3VuZGVmIFZFUlNJT04KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci1PQkpDX0NMQVNTIENBTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYkdMTGF5ZXI7Ci1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU7Ci19Ci0jZW5kaWYgLy8g
UExBVEZPUk0oQ09DT0EpCi0KICNpZiBVU0UoTklDT1NJQSkKIG5hbWVzcGFjZSBOaWNvc2lhIHsK
IGNsYXNzIEdDR0xMYXllcjsKQEAgLTgwLDkgKzQ0LDcgQEAgY2xhc3MgR0NHTExheWVyOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBFeHRlbnNpb25zR0w7Ci0jaWYgVVNFKEFOR0xFKQot
Y2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShP
UEVOR0xfRVMpCiBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xFUzsKICNlbGlmIFVTRShPUEVOR0wp
CiBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0w7CkBAIC05NywyOCArNTksMTEgQEAgY2xhc3MgVGV4
dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOwogCiB0eXBlZGVmIEhhc2hNYXA8Q1N0cmluZywg
dWludDY0X3Q+IFNoYWRlck5hbWVIYXNoOwogCisvLyBCYXNlIGNsYXNzIGZvciBHcmFwaGljc0Nv
bnRleHRHTCBjb250ZXh0cyB0aGF0IHVzZSBPcGVuR0wgb3IgT3BlbkdMIEVTLgogY2xhc3MgV0VC
Q09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0R0wKIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgp
OwotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKLSNp
ZiBVU0UoQU5HTEUpCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZv
cm1EaXNwbGF5KCkgY29uc3Q7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBw
bGF0Zm9ybUNvbmZpZygpIGNvbnN0OwotICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJl
VGFyZ2V0KCk7Ci0gICAgc3RhdGljIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0
UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOwotICAgIHN0YXRp
YyBHQ0dMaW50IEVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChH
Q0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKLSAgICBlbnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNv
dXJjZUJlaGF2aW9yIHsKLSAgICAgICAgLy8gUmVsZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVy
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNhbGxzIGRvbmUgaW4gdGhlIHRocmVhZC4KLSAgICAg
ICAgUmVsZWFzZUN1cnJlbnRDb250ZXh0LAotICAgICAgICAvLyBSZWxlYXNlcyBhbGwgdGhyZWFk
IHJlc291cmNlcyBhZnRlciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjYWxscyBkb25lIGluIHRo
ZSB0aHJlYWQuCi0gICAgICAgIFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMsCi0gICAgICAgIC8vIFJl
bGVhc2VzIGFsbCBnbG9iYWwgc3RhdGUuIFNob3VsZCBiZSB1c2VkIG9ubHkgYWZ0ZXIgYWxsIGRl
cGVuZGluZyBvYmplY3RzIGhhdmUKLSAgICAgICAgLy8gYmVlbiByZWxlYXNlZC4KLSAgICAgICAg
VGVybWluYXRlQW5kUmVsZWFzZVRocmVhZFJlc291cmNlcwotICAgIH07Ci0gICAgc3RhdGljIGJv
b2wgcmVsZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcik7
Ci0jZW5kaWYKIAogICAgIC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRp
c2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKQEAg
LTEzMiwxNSArNzcsOSBAQCBwdWJsaWM6CiAgICAgLy8gRXF1aXZhbGVudCB0byA6OmdsVGV4SW1h
Z2UyRCgpLiBBbGxvd3MgcGl4ZWxzPT0wIHdpdGggbm8gYWxsb2NhdGlvbi4KICAgICB2b2lkIHRl
eEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50
IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpOwogCi0jaWYgIVVTRShBTkdMRSkKLSAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRo
IHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KLSAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KLSAgICAvLyBCeSBkZWZhdWx0
LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNldHRpbmcuCiAgICAgYm9vbCB0
ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCBh
bGlnbm1lbnQgPSA0KTsKLSNlbmRpZgogCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29u
c3QgZmluYWw7Ci0KICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBFbnRyeSBwb2ludHMgZm9y
IFdlYkdMLgogICAgIC8vCkBAIC0yMDYsOSArMTQ1LDcgQEAgcHVibGljOgogICAgIEdDR0xpbnQ2
NCBnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5hbWUpIGZpbmFsOwogICAgIEdDR0xpbnQ2NCBnZXRJ
bnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CiAgICAgR0NH
TGludCBnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1l
KSBmaW5hbDsKLSNpZiAhVVNFKEFOR0xFKQogICAgIHZvaWQgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5
bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQqIHZhbHVlKTsKLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQogICAgIFN0cmluZyBnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKICAgICBTdHJpbmcgZ2V0VW5tYW5nbGVk
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0WzJdLCBHQ0dMc2l6ZWksIGNvbnN0IFN0cmluZyYpOwog
ICAgIEdDR0xpbnQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lKSBmaW5hbDsKQEAgLTI4NiwxMCArMjIzLDggQEAgcHVibGljOgogCiAgICAg
dm9pZCB1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwogICAgIHZvaWQgdmFsaWRh
dGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwotI2lmICFVU0UoQU5HTEUpCiAgICAg
Ym9vbCBjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwg
UGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7CiAgICAgYm9vbCBwcmVjaXNp
b25zTWF0Y2goUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3Qg
ZnJhZ21lbnRTaGFkZXIpIGNvbnN0OwotI2VuZGlmCiAKICAgICB2b2lkIHZlcnRleEF0dHJpYjFm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CiAgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVz
KSBmaW5hbDsKQEAgLTMxNywxMCArMjUyLDggQEAgcHVibGljOgogCiAgICAgLy8gPT09PT09PT09
PSBXZWJHTDIgZW50cnkgcG9pbnRzLgogCi0jaWYgIVVTRShBTkdMRSkKICAgICB2b2lkIGJ1ZmZl
ckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpOwogICAgIHZvaWQgYnVmZmVyU3Vi
RGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgZHN0Qnl0ZU9mZnNldCwgY29uc3Qgdm9p
ZCogc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpOwotI2VuZGlm
CiAgICAgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51
bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zm
c2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkgZmluYWw7CiAKICAgICB2b2lkIGdldEJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+
IGRhdGEpIGZpbmFsOwpAQCAtNDU2LDkgKzM4OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW1p
dGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJlZCgpOwotI2VuZGlmCiAKICAgICB2b2lk
IHNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpIGZpbmFsOwogCkBAIC00ODQsMTIgKzQxNCw4IEBA
IHB1YmxpYzoKICAgICAvLyBhbGwgbWV0aG9kcyBpdCBjb250YWlucyBtYXkgbmVjZXNzYXJpbHkg
YmUgc3VwcG9ydGVkIG9uIHRoZQogICAgIC8vIGN1cnJlbnQgaGFyZHdhcmUuIE11c3QgY2FsbCBF
eHRlbnNpb25zR0w6OnN1cHBvcnRzKCkgdG8KICAgICAvLyBkZXRlcm1pbmUgdGhpcy4KLSNpZiAh
VVNFKEFOR0xFKQogICAgIC8vIFVzZSBjb3ZhcmlhbnQgcmV0dXJuIHR5cGUgZm9yIE9QRU5HTC9P
UEVOR0xfRVMKICAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIGdldEV4dGVuc2lvbnMoKSBm
aW5hbDsKLSNlbHNlCi0gICAgRXh0ZW5zaW9uc0dMJiBnZXRFeHRlbnNpb25zKCkgZmluYWw7Ci0j
ZW5kaWYKIAogICAgIHZvaWQgc2ltdWxhdGVFdmVudEZvclRlc3RpbmcoU2ltdWxhdGVkRXZlbnRG
b3JUZXN0aW5nKSBvdmVycmlkZTsKIApAQCAtNDk3LDMxICs0MjMsMTEgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpIG92ZXJyaWRlOwogCi0jaWYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotICAgIEdyYXBoaWNzQ29udGV4dEdMQ1YqIGFzQ1YoKSBm
aW5hbDsKLSNlbmRpZgotCi0gICAgc3RhdGljIHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmLCBQaXhlbEJ1ZmZlciYmLCBjb25zdCBJbnRTaXplJiBj
YW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmKTsKLQotI2lmIFVTRShBTkdMRSkKLSAgICBjb25z
dGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRlZmF1bHREaXNwbGF5ID0gRUdMX0RF
RkFVTFRfRElTUExBWTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdGV4cHIgc3RhdGlj
IEVHTE5hdGl2ZURpc3BsYXlUeXBlIGxvd1Bvd2VyRGlzcGxheSA9IEVHTF9DQVNUKEVHTE5hdGl2
ZURpc3BsYXlUeXBlLCAtMSk7Ci0gICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5
VHlwZSBoaWdoUGVyZm9ybWFuY2VEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5
cGUsIC0yKTsKLSNlbmRpZgotI2VuZGlmCi0KIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluIG1fc3dhcENoYWlu
OwotICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWdPYmogeyBudWxscHRyIH07Ci0jZW5kaWYK
KwogICAgIEdDR0x1aW50IG1fdGV4dHVyZSB7IDAgfTsKIAotcHJpdmF0ZToKICAgICAvLyBDYWxs
ZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgdGhhdCBldmVudHVhbGx5IGNh
bGwgT3BlbkdMLgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBv
aW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgogICAgIGJv
b2wgbWFrZUNvbnRleHRDdXJyZW50KCkgV0FSTl9VTlVTRURfUkVUVVJOOwpAQCAtNTQ3LDI0ICs0
NTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2Fy
eShjb25zdCBJbnRSZWN0JiA9IEludFJlY3QoKSk7CiAgICAgdm9pZCBhdHRhY2hEZXB0aEFuZFN0
ZW5jaWxCdWZmZXJJZk5lZWRlZChHQ0dMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAotI2lmIFVTRShBTkdMRSkKLSAgICBib29sIHJlc2hh
cGVEaXNwbGF5QnVmZmVyQmFja2luZygpOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgYm9vbCBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpOwotICAgIGJvb2wg
YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGJhY2tp
bmcsIHZvaWQqIHBidWZmZXIpOwotICAgIHN0YXRpYyBib29sIG1ha2VDdXJyZW50KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKTsKLSAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOwotI2VuZGlmCi0jaWYgVVNF
KEFOR0xFKQotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgY29udGV4dCBzaG91bGQgYmUgbG9zdCBk
dWUgdG8gdGltZW91dC4KLSAgICBib29sIHdhaXRBbmRVcGRhdGVPbGRlc3RGcmFtZSgpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKLQotICAgIC8vIFBsYXRmb3JtIHNwZWNpZmljIGJlaGF2aW9yIGZvciBy
ZWxlYXNlUmVzb3VyY2VzKCk7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1SZWxlYXNlVGhyZWFk
UmVzb3VyY2VzKCk7Ci0jZW5kaWYKIAotI2lmICFVU0UoQU5HTEUpCiAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgVW5pcXVlUmVmPHNoOjpTaGFkZXJWYXJpYWJsZT4+IFNoYWRlclN5bWJvbE1h
cDsKIAogICAgIHN0cnVjdCBTaGFkZXJTb3VyY2VFbnRyeSB7CkBAIC02MzEsMTIgKzUyMCw4IEBA
IHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG9yaWdpbmFsU3ltYm9sSW5TaGFk
ZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlw
ZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkZXJOYW1l
SGFzaD4gbmFtZUhhc2hNYXBGb3JTaGFkZXJzOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAKLSNp
ZiBVU0UoQU5HTEUpCi0gICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xBTkdMRT4gbV9leHRlbnNpb25zOwotI2VsaWYgVVNF
KE9QRU5HTF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNp
b25zR0xPcGVuR0xFUzsKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9u
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xPcGVuR0xFUz4gbV9leHRlbnNpb25z
OwpAQCAtNjQ4LDkgKzUzMyw3IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8VmVjdG9yPGZsb2F0
Pj4gbV92ZXJ0ZXhBcnJheTsKIAotI2lmICFVU0UoQU5HTEUpCiAgICAgQU5HTEVXZWJLaXRCcmlk
Z2UgbV9jb21waWxlcjsKLSNlbmRpZgogCiAgICAgR0NHTHVpbnQgbV9mYm8geyAwIH07CiAjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNjU4LDU0ICs1NDEsMTQgQEAgcHJpdmF0ZToK
ICAgICBHQ0dMdWludCBtX2ludGVybWVkaWF0ZVRleHR1cmUgeyAwIH07CiAjZW5kaWYKIAotI2lm
ICFVU0UoQU5HTEUpICYmIFVTRShPUEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKICAgICBH
Q0dMdWludCBtX2RlcHRoQnVmZmVyIHsgMCB9OwogICAgIEdDR0x1aW50IG1fc3RlbmNpbEJ1ZmZl
ciB7IDAgfTsKICNlbmRpZgogICAgIEdDR0x1aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9
OwogCiAgICAgR0NHTHVpbnQgbV9pbnRlcm5hbENvbG9yRm9ybWF0IHsgMCB9OwotI2lmIFVTRShB
TkdMRSkKLSAgICBHQ0dMdWludCBtX2ludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0IHsgMCB9Owot
I2VuZGlmCi0gICAgc3RydWN0IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUgewotICAgICAgICBHQ0dM
dWludCBib3VuZFJlYWRGQk8geyAwIH07Ci0gICAgICAgIEdDR0x1aW50IGJvdW5kRHJhd0ZCTyB7
IDAgfTsKLSAgICAgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRTAgfTsKLQotICAgICAgICB1c2luZyBCb3VuZFRleHR1cmVNYXAgPSBIYXNo
TWFwPEdDR0xlbnVtLAotICAgICAgICAgICAgc3RkOjpwYWlyPEdDR0x1aW50LCBHQ0dMZW51bT4s
Ci0gICAgICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKLSAgICAgICAgICAgIFdURjo6VW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LAotICAgICAgICAgICAgUGFpckhhc2hU
cmFpdHM8V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+PgotICAgICAgICA+OwotICAg
ICAgICBCb3VuZFRleHR1cmVNYXAgYm91bmRUZXh0dXJlTWFwOwotICAgICAgICBHQ0dMdWludCBj
dXJyZW50Qm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gYm91bmRUZXh0dXJlKGFjdGl2ZVRl
eHR1cmVVbml0KTsgfQotICAgICAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4
dHVyZVVuaXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBi
b3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0dXJlVW5pdCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0
b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWUuZmlyc3Q7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0g
ICAgICAgIEdDR0x1aW50IGN1cnJlbnRCb3VuZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIGJvdW5k
VGFyZ2V0KGFjdGl2ZVRleHR1cmVVbml0KTsgfQotICAgICAgICBHQ0dMZW51bSBib3VuZFRhcmdl
dChHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0
byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1cmVVbml0KTsKLSAgICAgICAg
ICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5kKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7Ci0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1
cmVVbml0LCBHQ0dMdWludCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGJvdW5kVGV4dHVyZU1hcC5zZXQodGV4dHVyZVVuaXQsIHN0ZDo6bWFrZV9wYWly
KHRleHR1cmUsIHRhcmdldCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdXNpbmcgVGV4dHVyZVNl
ZWRDb3VudCA9IEhhc2hDb3VudGVkU2V0PEdDR0x1aW50LCBJbnRIYXNoPEdDR0x1aW50PiwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4+OwotICAgICAgICBUZXh0
dXJlU2VlZENvdW50IHRleHR1cmVTZWVkQ291bnQ7Ci0gICAgfTsKIAogICAgIEdyYXBoaWNzQ29u
dGV4dEdMU3RhdGUgbV9zdGF0ZTsKIApAQCAtNzE0LDE2ICs1NTcsNiBAQCBwcml2YXRlOgogICAg
IEdDR0x1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CiAgICAgR0NH
THVpbnQgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OwogCi0jaWYgVVNFKEFOR0xFKQot
ICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxp
bmcuCi0gICAgR0NHTHVpbnQgbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIHsgMCB9Owot
ICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVyZSB3aGVuIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4
dHVyZSBpcyBub24temVyby4KLSAgICBHQ0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZC
TyB7IDAgfTsKLSAgICAvLyBRdWVyaWVkIGF0IGRpc3BsYXkgc3RhcnR1cC4KLSAgICBFR0xpbnQg
bV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCB7IC0xIH07Ci0KLSNlbmRpZgotCiAgICAgLy8g
RXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAgIExpc3RIYXNoU2V0PEdD
R0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKIApAQCAtNzQ0LDI5ICs1NzcsOCBAQCBwcml2YXRl
OgogI2lmIFVTRShDQUlSTykKICAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fdmFvIHsgMCB9OwogI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAvLyBCYWNraW5nIHN0b3JlIGZvciB0aGUg
dGhlIGJ1ZmZlciB3aGljaCBpcyBldmVudHVhbGx5IHVzZWQgZm9yIGRpc3BsYXkuCi0gICAgLy8g
V2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gZmFsc2UsIHRoaXMgaXMgdGhlIGRyYXdpbmcg
YnVmZmVyIGJhY2tpbmcgc3RvcmUuCi0gICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIg
PT0gdHJ1ZSwgdGhpcyBpcyBibGl0dGVkIHRvIGR1cmluZyBkaXNwbGF5IHByZXBhcmUuCi0gICAg
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9kaXNwbGF5QnVmZmVyQmFja2luZzsKLSAgICB2
b2lkKiBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIGJvb2wgbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlv
biB7IGZhbHNlIH07Ci0gICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdCBtX2hpZ2hQ
ZXJmb3JtYW5jZUdQVVJlcXVlc3Q7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShB
VkZPVU5EQVRJT04pCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RT4gbV9jdjsKLSNlbmRpZgotI2lmIFVTRShBTkdMRSkKLSAgICBib29sIG1fdXNlRmVuY2VTeW5j
Rm9yRGlzcGxheVJhdGVMaW1pdCA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG1heFBlbmRpbmdGcmFtZXMgPSAzOwotICAgIHNpemVfdCBtX29sZGVzdEZyYW1lQ29tcGxldGlv
bkZlbmNlIHsgMCB9OwotICAgIFNjb3BlZEdMRmVuY2UgbV9mcmFtZUNvbXBsZXRpb25GZW5jZXNb
bWF4UGVuZGluZ0ZyYW1lc107Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFV
U0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwZDZkMzY3ZjFmOTU0NDViMGE3OWMx
NzRkYTg4YTNlZTUxY2I5Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjg4NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0Bn
bWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQotCi0jaWYg
VVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5oIgotI2Vsc2UK
LSNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0wuaCIKLSNlbmRpZgotI2luY2x1ZGUgIkFOR0xF
V2ViS2l0QnJpZGdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1
ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRpbmcuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24u
aD4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgot
I2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgotCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5U2hpbXMuaCIKLSNl
bGlmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgotI2VsaWYgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFk
ZXJOYW1lSGFzaCo+JiBnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKQotewotICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8
U2hhZGVyTmFtZUhhc2gqPiogc2hhcmVkTmFtZUhhc2g7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25j
ZUZsYWcsIFtdIHsKLSAgICAgICAgc2hhcmVkTmFtZUhhc2ggPSBuZXcgVGhyZWFkU3BlY2lmaWM8
U2hhZGVyTmFtZUhhc2gqPjsKLSAgICB9KTsKLQotICAgIHJldHVybiAqc2hhcmVkTmFtZUhhc2g7
Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihTaGFkZXJO
YW1lSGFzaCogc2hhZGVyTmFtZUhhc2gpCi17Ci0gICAgKmdldEN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlcigpID0gc2hhZGVyTmFtZUhhc2g7Ci19Ci0KLS8vIEhhc2ggZnVuY3Rpb24gdXNlZCBi
eSB0aGUgQU5HTEUgdHJhbnNsYXRvci9jb21waWxlciB0byBkbwotLy8gc3ltYm9sIG5hbWUgbWFu
Z2xpbmcuIFNpbmNlIHRoaXMgaXMgYSBzdGF0aWMgbWV0aG9kLCBiZWZvcmUKLS8vIGNhbGxpbmcg
Y29tcGlsZVNoYWRlciB3ZSBzZXQgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyCi0vLyB0byBw
b2ludCB0byB0aGUgbWFwIGtlcHQgYnkgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuCi0KLXN0YXRpYyB1aW50NjRfdCBuYW1lSGFzaEZvclNoYWRlcihjb25z
dCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuZ3RoKQotewotICAgIGlmICghbGVuZ3RoKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIENTdHJpbmcgbmFtZUFzQ1N0cmluZyA9IENTdHJpbmcobmFtZSk7
Ci0KLSAgICAvLyBMb29rIHVwIG5hbWUgaW4gb3VyIGxvY2FsIG1hcC4KLSAgICBTaGFkZXJOYW1l
SGFzaComIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlciA9ICpnZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIoKTsKLSAgICBTaGFkZXJOYW1lSGFzaDo6aXRlcmF0b3IgZmluZFJlc3VsdCA9
IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+ZmluZChuYW1lQXNDU3RyaW5nKTsKLSAgICBp
ZiAoZmluZFJlc3VsdCAhPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmVuZCgpKQotICAg
ICAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWU7Ci0KLSAgICB1bnNpZ25lZCBoYXNoVmFsdWUg
PSBuYW1lQXNDU3RyaW5nLmhhc2goKTsKLQotICAgIC8vIENvbnZlcnQgdGhlIDMyLWJpdCBoYXNo
IGZyb20gQ1N0cmluZzo6aGFzaCBpbnRvIGEgNjQtYml0IHJlc3VsdAotICAgIC8vIGJ5IHNoaWZ0
aW5nIHRoZW4gYWRkaW5nIHRoZSBzaXplIG9mIG91ciB0YWJsZS4gT3ZlcmZsb3cgd291bGQKLSAg
ICAvLyBvbmx5IGJlIGEgcHJvYmxlbSBpZiB3ZSdyZSBhbHJlYWR5IGhhc2hpbmcgdG8gdGhlIHNh
bWUgdmFsdWUgKGFuZAotICAgIC8vIHdlJ3JlIGhvcGluZyB0aGF0IG92ZXIgdGhlIGxpZmV0aW1l
IG9mIHRoZSBjb250ZXh0IHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSB0aGF0IG1hbnkgc3ltYm9scyku
Ci0KLSAgICB1aW50NjRfdCByZXN1bHQgPSBoYXNoVmFsdWU7Ci0gICAgcmVzdWx0ID0gKHJlc3Vs
dCA8PCAzMikgKyAoY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5zaXplKCkgKyAxKTsKLQot
ICAgIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2V0KG5hbWVBc0NTdHJpbmcsIHJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uKQotewotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAg
RXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwot
ICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRz
KHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMu
ZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOwotICAgICAgICAgICAg
Ly8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgotICAgICAgICAgICAgYXR0cnMuZGVw
dGggPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBm
YWxzZTsKLSAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgIH0KLSAgICBp
ZiAoYXR0cnMuYW50aWFsaWFzICYmICFtX2lzRm9yV2ViR0wyKSB7Ci0gICAgICAgIGlmICghZXh0
ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkgewot
ICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRDb250
ZXh0QXR0cmlidXRlcyhhdHRycyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZXh0ZW5z
aW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwot
ICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUo
KQotewotICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSNpZiAhVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVk
U2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKLSAgICBUZW1wb3JhcnlPcGVuR0xT
ZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKLSNlbmRpZgotCi0gICAg
aWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQotICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgc3RkOjpz
d2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICA6OmdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIGdsRmx1c2goKTsKLQotICAgIEFTU0VSVCht
X3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKG1f
c3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8p
OwotICAgIGVsc2UKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIDo6
Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9zdGF0ZS5ib3VuZFRhcmdldChHTF9URVhUVVJFMCkgPT0gR0xfVEVYVFVSRV8y
RCA/IG1fc3RhdGUuYm91bmRUZXh0dXJlKEdMX1RFWFRVUkUwKSA6IDApOwotICAgIDo6Z2xBY3Rp
dmVUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQpOwotICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKG1fc3RhdGUu
Ym91bmREcmF3RkJPICE9IG1fZmJvKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAg
IDo6Z2xGbHVzaCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQotewotICAgIGJvb2wgbXVzdFJl
c3RvcmVGQk8gPSBmYWxzZTsKLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMp
IHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOwotICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsK
LSAgICAgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKSB7Ci0gICAgICAgICAg
ICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOwotICAg
IGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFw
aGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lk
dGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOwotICAgIGlmICh3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAg
ICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwotICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsK
LQotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotCi0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
ZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFy
eU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwotICAgIAot
ICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKLQotICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgotICAgIEdMZmxv
YXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBHTGlu
dCBjbGVhclN0ZW5jaWwgPSAwOwotICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVF
LCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKLSAgICBH
THVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZm
ZmZmOwotICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKLSAg
ICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKLSAgICA6
OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1Jf
V1JJVEVNQVNLLCBjb2xvck1hc2spOwotICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSk7Ci0KLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0
ZXMoKTsKLQotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICA6OmdsR2V0RmxvYXR2KEdM
X0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKDEpOwotICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQ
VEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVF
KTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgfQotICAg
IGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lM
X0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgw
KTsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVy
cHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0
ZW5jaWxNYXNrQmFjaykpOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9O
VCwgMHhmZmZmZmZmZik7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ss
IDB4ZmZmZmZmZmYpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklU
OwotICAgIH0KLQotICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOwotCi0gICAgOjpnbENsZWFyQ29s
b3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xv
clszXSk7Ci0gICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29s
b3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOwotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKLSAgICAg
ICAgOjpnbERlcHRoTWFzayhkZXB0aE1hc2spOwotICAgIH0KLSAgICBpZiAoYXR0cnMuc3RlbmNp
bCkgewotICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIDo6
Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7Ci0gICAgICAgIDo6
Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7Ci0gICAgfQot
Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwot
Ci0gICAgYXV0byBlcnJvciA9IDo6Z2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvciAhPSBHTF9O
T19FUlJPUikgewotICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBPcGVuR0wgZXJy
b3IgZHVyaW5nIEdyYXBoaWNzQ29udGV4dEdMIGJ1ZmZlciBpbml0aWFsaXphdGlvbiAoJWQpLiIs
IGVycm9yKTsKLSAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQ
bGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX3No
YWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKLSAgICBBU1NFUlQobV9zaGFk
ZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKLSAgICBjb25zdCBhdXRvJiB2
ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7
Ci0gICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
ZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6U2hhZGVy
VmFyaWFibGU+IGNvbWJpbmVkVmFyeWluZ3M7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2ZXJ0ZXhT
eW1ib2wgOiB2ZXJ0ZXhFbnRyeS52YXJ5aW5nTWFwKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYg
c3ltYm9sTmFtZSA9IHZlcnRleFN5bWJvbC5rZXk7Ci0gICAgICAgIC8vIFRoZSB2YXJ5aW5nIG1h
cCBpbmNsdWRlcyB2YXJpYWJsZXMgZm9yIGVhY2ggaW5kZXggb2YgYW4gYXJyYXkgdmFyaWFibGUu
Ci0gICAgICAgIC8vIFdlIG9ubHkgd2FudCBhIHNpbmdsZSB2YXJpYWJsZSB0byByZXByZXNlbnQg
dGhlIGFycmF5LgotICAgICAgICBpZiAoc3ltYm9sTmFtZS5lbmRzV2l0aCgiXSIpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gRG9uJ3QgY291bnQgYnVpbHQgaW4gdmFyeWlu
Z3MuCi0gICAgICAgIGlmIChzeW1ib2xOYW1lID09ICJnbF9GcmFnQ29vcmQiIHx8IHN5bWJvbE5h
bWUgPT0gImdsX0Zyb250RmFjaW5nIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Qb2ludENvb3JkIikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50U3lt
Ym9sID0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmZpbmQoc3ltYm9sTmFtZSk7Ci0gICAgICAg
IGlmIChmcmFnbWVudFN5bWJvbCAhPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAuZW5kKCkpCi0g
ICAgICAgICAgICBjb21iaW5lZFZhcnlpbmdzLmFkZChzeW1ib2xOYW1lLCBmcmFnbWVudFN5bWJv
bC0+dmFsdWUpOwotICAgIH0KLQotICAgIHNpemVfdCBudW1WYXJ5aW5ncyA9IGNvbWJpbmVkVmFy
eWluZ3Muc2l6ZSgpOwotICAgIGlmICghbnVtVmFyeWluZ3MpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiB2YXJpYWJsZXM7Ci0gICAg
dmFyaWFibGVzLnJlc2VydmUoY29tYmluZWRWYXJ5aW5ncy5zaXplKCkpOwotICAgIGZvciAoY29u
c3QgYXV0byYgdmFyeWluZ1N5bWJvbCA6IGNvbWJpbmVkVmFyeWluZ3MudmFsdWVzKCkpCi0gICAg
ICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyeWluZ1N5bWJvbCk7Ci0KLSAgICBHQ0dMaW50IG1h
eFZhcnlpbmdWZWN0b3JzID0gMDsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIDo6Z2xHZXRJbnRl
Z2VydihNQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwotI2Vsc2UKLSAg
ICBpZiAobV9pc0ZvcldlYkdMMikKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZ
SU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEdD
R0xpbnQgbWF4VmFyeWluZ0Zsb2F0cyA9IDA7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9N
QVhfVkFSWUlOR19GTE9BVFMsICZtYXhWYXJ5aW5nRmxvYXRzKTsKLSAgICAgICAgbWF4VmFyeWlu
Z1ZlY3RvcnMgPSBtYXhWYXJ5aW5nRmxvYXRzIC8gNDsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1
cm4gc2g6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5nVmVjdG9y
cywgdmFyaWFibGVzKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lz
aW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0
IGZyYWdtZW50U2hhZGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5j
b250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29u
dGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKLSAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7Ci0gICAgY29uc3QgYXV0
byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIp
LT52YWx1ZTsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6R0xlbnVtPiB2ZXJ0ZXhTeW1ib2xQ
cmVjaXNpb25NYXA7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdmVydGV4RW50cnku
dW5pZm9ybU1hcCkgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVu
dHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7Ci0gICAgICAgIHZlcnRleFN5bWJvbFByZWNpc2lv
bk1hcC5hZGQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSks
IGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbik7Ci0gICAgfQotCi0gICAgZm9yIChjb25zdCBh
dXRvJiBlbnRyeSA6IGZyYWdtZW50RW50cnkudW5pZm9ybU1hcCkgewotICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7Ci0g
ICAgICAgIGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1h
cC5maW5kKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpKTsK
LSAgICAgICAgaWYgKHZlcnRleFN5bWJvbCAhPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZW5k
KCkgJiYgdmVydGV4U3ltYm9sLT52YWx1ZSAhPSBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0g
dGV4dHVyZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKLSAgICA6Omds
QWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKLSAgICA6OmdsQXR0
YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0
cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9M
X1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJMb2Nh
dGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1l
LnV0ZjgoKS5kYXRhKCkpOwotICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5k
ZXgsIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdMdWludCBmYm87Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAg
ICAgZmJvID0gYnVmZmVyOwotICAgIGVsc2UKLSAgICAgICAgZmJvID0gKGNvbnRleHRBdHRyaWJ1
dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKLSAgICBBU1NFUlQo
dGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRG
Qk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7
Ci0gICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBm
Ym87Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVy
YnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3Rh
dGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7Ci0gICAgOjpnbEJpbmRUZXh0
dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYg
Ymx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRp
b24oR0NHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1v
ZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1v
ZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5k
RnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0gICAgICAgCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0
UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRnVu
Y1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NH
THNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVzYWdlKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwg
c2l6ZSwgMCwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZm
ZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3Qgdm9pZD4gZGF0YSwgR0NHTGVu
dW0gdXNhZ2UpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0
YSwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJE
YXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1
ZlNpemUsIGRhdGEuZGF0YSk7Ci19Ci0KLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047
Ci0KLSAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIs
IEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENsZWFyQ29s
b3IociwgZywgYiwgYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
KEdDR0xiaXRmaWVsZCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDbGVhcihtYXNrKTsKLSAgICBjaGVja0dQVVN0YXR1
cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NH
TGludCBzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBH
Q0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29sb3JNYXNrKHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBo
YXNoaW5nIHdvcmtzLCB3ZQotICAgIC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1h
cCBvd25lZCBieSB0aGlzIGNvbnRleHQuCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVz
b3VyY2VzID0gbV9jb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICBTaEhhc2hGdW5jdGlvbjY0
IHByZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOwotICAg
IEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9IG5hbWVIYXNoRm9yU2hhZGVyOwotCi0gICAg
aWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVy
cyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7Ci0gICAgbV9jb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdM
RShzaGFkZXIpOwotCi0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0gcHJldmlvdXNI
YXNoRnVuY3Rpb247Ci0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMp
OwotICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsKLQotICAgIGlm
ICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0g
dHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOwotICAgIGludCB0cmFuc2xhdGVkU2hhZGVy
TGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBMT0coV2Vi
R0wsICItLS0gYmVnaW4gb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIG9y
aWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4iLCBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51dGY4
KCkuZGF0YSgpKTsKLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gdHJhbnNsYXRlZCBzaGFkZXIg
c291cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLSIsIHRy
YW5zbGF0ZWRTaGFkZXJQdHIpOwotCi0gICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0
cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7Ci0gICAgCi0gICAg
OjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLSAgICAKLSAgICBpbnQgY29tcGlsZVN0YXR1czsK
LSAgICAKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBp
bGVTdGF0dXMpOwotCi0gICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5
ID0gcmVzdWx0LT52YWx1ZTsKLQotICAgIC8vIFBvcHVsYXRlIHRoZSBzaGFkZXIgbG9nCi0gICAg
R0xpbnQgbGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xP
R19MRU5HVEgsICZsZW5ndGgpOwotCi0gICAgaWYgKGxlbmd0aCkgewotICAgICAgICBHTHNpemVp
IHNpemUgPSAwOwotICAgICAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAgICAg
IDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkp
OwotCi0gICAgICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07
Ci0gICAgICAgIGVudHJ5LmxvZyA9IGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3Ry
aW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci0gICAgfQotCi0gICAgaWYgKGNvbXBpbGVTdGF0dXMg
IT0gR0xfVFJVRSkgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIExP
RyhXZWJHTCwgIkVycm9yOiBzaGFkZXIgdHJhbnNsYXRvciBwcm9kdWNlZCBhIHNoYWRlciB0aGF0
IE9wZW5HTCB3b3VsZCBub3QgY29tcGlsZS4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBTaGFk
ZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKLQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+
dmFsdWU7Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50cnku
c291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJT
b3VyY2VDU3RyaW5nLmRhdGEoKTsKLSAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVy
U291cmNlQ1N0cmluZy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBkaXJl
Y3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNlIC0t
LVxuIiwgc2hhZGVyU291cmNlUHRyKTsKLQotICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAx
LCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKLQotICAgIDo6Z2xDb21w
aWxlU2hhZGVyKHNoYWRlcik7Ci0KLSAgICBpbnQgY29tcGlsZVN0YXR1czsKLQotICAgIDo6Z2xH
ZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAg
ICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7Ci0gICAgICAgIGVudHJ5LmlzVmFsaWQg
PSB0cnVlOwotICAgICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVy
IHN1Y2NlZWRlZC4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFs
c2U7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hh
ZGVyIGZhaWxlZC4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0
cmlidXRlcygpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRE
cmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICB9Ci0gICAgOjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChhdHRycy5hbnRp
YWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IG1fbXVsdGlzYW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
eG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRl
cygpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmRE
cmF3RkJPKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJP
ID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5l
Y2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAg
ICB9Ci0gICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYg
bV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlz
YW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShH
Q0dMZW51bSBtb2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xDdWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERlcHRoRnVuYyhm
dW5jKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xi
b29sZWFuIGZsYWcpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbERlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxh
dGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VS
VChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsK
LSAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEaXNhYmxlKGNh
cCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheShHQ0dMdWludCBpbmRleCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dM
ZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERyYXdBcnJh
eXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NH
THNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRHJh
d0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0
YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsRW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlz
aCgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbEZpbmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
bHVzaCgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNo
bWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZl
cikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBy
ZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdD
R0xpbnQgbGV2ZWwpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcm9u
dEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRl
TWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQot
ewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHTGludCBtYXhBdHRy
aWJ1dGVTaXplID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9B
VFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOwotICAgIFZlY3RvcjxHTGNo
YXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xF
TkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9
IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6Z2xH
ZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1lTGVu
Z3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3Jp
Z2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIFN0
cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOwotICAgIAotI2lmbmRlZiBOREVCVUcKLSAg
ICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwotICAgIExPRyhX
ZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgYXR0cmlidXRlICVkIGZyb20gJyVz
JyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9y
aWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotCi0gICAgaW5mby5uYW1lID0gb3Jp
Z2luYWxOYW1lOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCi17Ci0gICAgR0NHTGludCBzeW1ib2xDb3VudDsKLSAgICBhdXRvIHJl
c3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAg
aWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAg
ICAgICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250
ZXh0R0w6OkFDVElWRV9BVFRSSUJVVEVTLCAmc3ltYm9sQ291bnQpOwotICAgICAgICByZXN1bHQg
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIH0KLSAg
ICAKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+
dmFsdWU7Ci0gICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmls
dGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmls
dGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwW2luZGV4XSA6IC0xOwotCi0gICAgcmV0dXJu
IGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAg
IGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdMaW50IG1heFVuaWZvcm1T
aXplID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JN
X01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7Ci0KLSAgICBWZWN0b3I8R0xjaGFyPiBuYW1l
KG1heFVuaWZvcm1TaXplKTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRl
cyBudWxsIHRlcm1pbmF0aW9uLgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xp
bnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6Z2xHZXRBY3RpdmVVbmlm
b3JtKHByb2dyYW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAm
dHlwZSwgbmFtZS5kYXRhKCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5h
bWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIFN0cmluZyhuYW1lLmRhdGEo
KSwgbmFtZUxlbmd0aCkpOwotICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICBTdHJpbmcgdW5pZm9y
bU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwotICAgIExPRyhXZWJHTCwgIlByb2dyYW0g
JWQgaXMgbWFwcGluZyBhY3RpdmUgdW5pZm9ybSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dy
YW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgp
LmRhdGEoKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Ci0g
ICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3Jt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGlu
Zm8pCi17Ci0gICAgR0NHTGludCBzeW1ib2xDb3VudDsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCA9
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICBnZXROb25C
dWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElW
RV9VTklGT1JNUywgJnN5bWJvbENvdW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICB9Ci0gICAgCi0gICAgQWN0aXZl
U2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOwotICAgIEdD
R0x1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxV
bmlmb3JtSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5p
Zm9ybUluZGV4TWFwW2luZGV4XSA6IC0xOwotICAgIAotICAgIHJldHVybiBnZXRBY3RpdmVVbmlm
b3JtSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVjdCog
c2hhZGVycykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEF0dGFjaGVk
U2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwotfQotCi1zdGF0aWMg
U3RyaW5nIGdlbmVyYXRlSGFzaGVkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYg
KG5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB1aW50NjRfdCBudW1i
ZXIgPSBuYW1lSGFzaEZvclNoYWRlcihuYW1lLnV0ZjgoKS5kYXRhKCksIG5hbWUubGVuZ3RoKCkp
OwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJ3ZWJnbF8iLCBoZXgobnVtYmVyLCBMb3dlcmNhc2Up
KTsKLX0KLQotc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5H
TEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1i
b2xNYXAoc3ltYm9sVHlwZSk7Ci0gICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1hcC5maW5k
KG5hbWUpOwotICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBhdXRvJiBtYXBwZWROYW1lID0gc3ltYm9sRW50
cnktPnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7Ci0gICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1l
LmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBB
TkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIEdDR0xzaXplaSBjb3VudCA9IDA7Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJd
ID0geyB9OwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRl
cnMpOwotCi0gICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRl
cnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAgICAg
ICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgLy8gV2UgbWln
aHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCi0g
ICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOwotICAgIGlm
IChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgYXV0byBsaW5r
ZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlw
ZSwgbmFtZSk7Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1h
cHBlZE5hbWUudmFsdWUoKTsKLSAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hh
ZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAg
ICAgICAgaWYgKG1hcHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1
ZSgpOwotICAgIH0KLQotICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9B
VFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJl
IGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJz
IGhhdmUgYmVlbiBjb21waWxlZCwKLSAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVk
IHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgotICAgICAgICBpZiAoIW5hbWVIYXNo
TWFwRm9yU2hhZGVycykKLSAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VV
bmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Ci0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOwotCi0gICAgICAgIGF1dG8gZ2Vu
ZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKLQotICAgICAgICBzZXRDdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7Ci0KLSAgICAgICAgbV9wb3NzaWJseVVu
dXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7Ci0KLSAgICAgICAgcmV0
dXJuIGdlbmVyYXRlZE5hbWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xJ
blNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1i
b2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvIHJlc3Vs
dCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9s
VHlwZSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewot
ICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNf
c3RyKCkpCi0gICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OwotICAgIH0KLSAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVy
U3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0NHTHNp
emVpIGNvdW50OwotICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXTsKLSAgICBnZXRBdHRh
Y2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLSAgICAKLSAgICBmb3Ig
KEdDR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBvcmlnaW5h
bE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJv
bFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQotICAgICAgICAgICAgcmV0
dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFdlIG1pZ2h0IGhhdmUg
ZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgotICAgIGF1dG8g
cmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0
ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIGF1dG8gbGlua2VkU2hhZGVy
cyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxT
eW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBu
YW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBvcmln
aW5hbE5hbWUudmFsdWUoKTsKLSAgICAgICAgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJ
blNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7
Ci0gICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxO
YW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJP
TF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQXR0cmli
dXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55
IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAotICAgICAgICAvLyBhbmQgYXJlbid0IGV2ZW4g
cmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCi0KLSAgICAgICAgY29u
c3QgYXV0byYgY2FjaGVkID0gbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5maW5kKG5hbWUp
OwotICAgICAgICBpZiAoY2FjaGVkICE9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZW5k
KCkpCi0gICAgICAgICAgICByZXR1cm4gY2FjaGVkLT52YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbmFtZTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1i
b2xOYW1lKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50LCBjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChzaXplX3Qgc3ltYm9sVHlwZSA9IDA7IHN5bWJvbFR5
cGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihTSEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORyk7ICsr
c3ltYm9sVHlwZSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKLSAgICAgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ldKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0g
bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwID0g
cmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3RhdGljX2Nhc3Q8ZW51bSBBTkdMRVNoYWRlclN5bWJv
bFR5cGU+KHN5bWJvbFR5cGUpKTsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9s
RW50cnkgOiBzeW1ib2xNYXApIHsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xF
bnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBzeW1ib2xFbnRyeS5rZXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLQotICAgIFN0cmlu
ZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZ
UEVfQVRUUklCVVRFLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRp
b24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51
dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4g
LTE7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gLTE7
Ci0KLQotICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNl
OwotCi0gICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBj
cmVhdGluZyBhIGhhbmcgaWYKLSAgICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0
IGNhdXNlcyBpdCB0byBuZXZlciBjbGVhciB0aGUgZXJyb3IuCi0gICAgLy8gT3RoZXJ3aXNlLCB3
ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwgd2UgZ290IE5PX0VSUk9SLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewotICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGdsR2V0
RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci0gICAgICAgIG1vdmVk
QW5FcnJvciA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKLX0KLQot
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKLXsKLSAgICBpZiAo
IW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBOZWVkIHRvIG1vdmUg
dGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCi0g
ICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVk
IGJlaGF2aW9yIG9mIGJvdGgKLSAgICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMg
dG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9uY2UuCi0gICAgICAgIG1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMu
dGFrZUZpcnN0KCk7Ci0gICAgfQotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwotCi0gICAgcmV0dXJuIDo6Z2xHZXRF
cnJvcigpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhH
Q0dMZW51bSBuYW1lKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
SGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZm
ZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNCdWZm
ZXIoYnVmZmVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
RW5hYmxlZChHQ0dMZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2Fw
KTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVy
KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzRnJhbWVi
dWZmZXJFWFQoZnJhbWVidWZmZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAo
IXByb2dyYW0pCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6Omds
SXNQcm9ncmFtKHByb2dyYW0pOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0g
ICAgaWYgKCFyZW5kZXJidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAg
IHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKLX0KLQotR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyKQotewotICAgIGlmICghc2hhZGVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0K
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7
Ci0KLSAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
KQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0g
ICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbExpbmVXaWR0aCh3
aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBHQ0dMc2l6
ZWkgY291bnQgPSAwOwotICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKLSAg
ICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLQotICAg
IGlmIChjb3VudCA9PSAyKQotICAgICAgICBtX2xpbmtlZFNoYWRlck1hcC5zZXQocHJvZ3JhbSwg
c3RkOjptYWtlX3BhaXIoc2hhZGVyc1swXSwgc2hhZGVyc1sxXSkpOwotCi0gICAgOjpnbExpbmtQ
cm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhl
bFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsUGl4ZWxTdG9yZWko
cG5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdv
bk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFBvbHlnb25P
ZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotCi0gICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7Ci0KLSAgICBlbnRyeS5zb3VyY2UgPSBz
dHJpbmc7Ci0KLSAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBXVEZNb3ZlKGVudHJ5
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xl
bnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsRnVuYyhm
dW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVu
Y2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVm
LCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJl
ZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNr
KEdDR0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBH
Q0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFp
bCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BT
ZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NH
TGVudW0genBhc3MpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6
cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHZhbHVlKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMaW50IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZh
bHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQg
djAsIEdDR0xmbG9hdCB2MSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJy
YXkuYnVmU2l6ZSAlIDIpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAv
IDIsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xm
bG9hdCB2MikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSAzKSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBh
cnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRm
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQg
djIsIEdDR0xmbG9hdCB2MykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2
Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NF
UlQoIShhcnJheS5idWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3Jt
MWkobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYw
LCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17Ci0gICAgQVNT
RVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXku
YnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwg
R0NHTGludCB2MikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5i
dWZTaXplICUgMykpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywg
YXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBH
Q0dMaW50IHYzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJh
eS5idWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8g
NCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNp
emUgJSA0KSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0
LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgOSkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gOSwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAg
QVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDE2KSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIGFycmF5LmJ1ZlNpemUgLyAxNiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0pCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17
Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xmbG9hdCB2MCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhB
dHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMj4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjJm
dihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSwgR0NHTGZsb2F0IHYyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dM
dWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVy
dGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwg
R0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0
cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQsIDQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29s
ZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJp
ZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNl
dCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKLXsKLSAgICByZXR1cm4g
Z2V0RXh0ZW5zaW9ucygpLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJy
YXkpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRlbGV0ZVZlcnRleEFycmF5T0VTKGFycmF5KTsK
LX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXko
UGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmlz
VmVydGV4QXJyYXlPRVMoYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICBnZXRFeHRl
bnNpb25zKCkuYmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xi
b29sZWFuPiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlLmRhdGEpOwotfQot
Ci1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwot
Ci0gICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0g
ICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRG
bG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdl
dEZsb2F0dihwbmFtZSwgdmFsdWUuZGF0YSk7Ci19Ci0KLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQotewotICAgIFVOVVNFRF9Q
QVJBTShwbmFtZSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwotICAgIC8vIEZJWE1FIDE0MTE3ODog
QmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBn
bDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5n
IE9wZW5HTCBFUyAzLjAuCi0gICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsK
LSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0NHTGludDY0
IHZhbHVlID0gMDsKLSAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdl
IG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBp
bml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgotICAgIC8v
IDo6Z2xHZXRJbnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHZh
bHVlOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVu
dCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGF0dGFjaG1l
bnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQotICAgICAgICBhdHRhY2htZW50ID0gREVQ
VEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCi0g
ICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0
YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0xlbnVtIHBuYW1lKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIDo6Z2xHZXRQ
cm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9s
Q291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCog
dmFsdWUpCi17Ci0gICAgQVNTRVJUKEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1lIHx8IEFDVElW
RV9VTklGT1JNUyA9PSBwbmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChw
cm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFw
LmVuZCgpKSB7Ci0gICAgICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBlKHBu
YW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLnNldChwcm9ncmFtLCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMoKSk7Ci0gICAg
QWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pLT52YWx1ZTsKLQotICAgIC8vIFJldHJpZXZlIHRo
ZSBhY3RpdmUgYXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEgbWFwcGlu
ZyBvZgotICAgIC8vIG91ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhlIHJlYWwg
dW5maWx0ZXJlZCBpbmRleGVzIGluc2lkZSBPcGVuR0wuCi0gICAgR0NHTGludCBhdHRyaWJ1dGVD
b3VudCA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklCVVRF
UywgJmF0dHJpYnV0ZUNvdW50KTsKLSAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1
dGVDb3VudDsgKytpKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0
aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKLSAgICAgICAgaWYgKGluZm8ubmFtZS5z
dGFydHNXaXRoKCJnbF8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHN5bWJv
bENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuYXBwZW5kKGkpOwotICAg
IH0KLSAgICAKLSAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMuCi0gICAgR0NHTGludCB1
bmlmb3JtQ291bnQgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX1VO
SUZPUk1TLCAmdW5pZm9ybUNvdW50KTsKLSAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCB1bmlm
b3JtQ291bnQ7ICsraSkgewotICAgICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGdldEFj
dGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGksIGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1l
LnN0YXJ0c1dpdGgoImdsXyIpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAg
ICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBlbmQo
aSk7Ci0gICAgfQotICAgIAotICAgICp2YWx1ZSA9IHN5bWJvbENvdW50cy5jb3VudEZvclR5cGUo
cG5hbWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xl
ZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBHQ0dMc2l6ZWkgY291bnQsIGNv
bnN0IFN0cmluZyYgbG9nKQotewotICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRlckluZm9M
b2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgpKTsKLQotICAgIEpTQzo6WWFycjo6UmVndWxhckV4
cHJlc3Npb24gcmVnRXhwKCJ3ZWJnbF9bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl0rIik7Ci0KLSAg
ICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExvZzsKLSAgICAKLSAgICAvLyBBTkdMRSBpbnNlcnRz
IGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0aGUgc2hhZGVyIHNvdXJjZSB0aGF0Ci0gICAgLy8g
Y2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNvbXBpbGVycy4gVGhlcmUgaXMgbm8gcG9pbnQgc2hv
d2luZwotICAgIC8vIHRoaXMgd2FybmluZyB0byB0aGUgdXNlciBzaW5jZSB0aGV5IGRpZG4ndCB3
cml0ZSB0aGUgY29kZSB0aGF0Ci0gICAgLy8gaXMgY2F1c2luZyBpdC4KLSAgICBzdGF0aWMgY29u
c3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhbmdsZVdhcm5pbmcgeyAiV0FSTklORzogMDoxOiBl
eHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxuIl9zIH07Ci0g
ICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFydHNXaXRoKGFuZ2xlV2FybmluZykgPyBhbmdsZVdh
cm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOwotICAgIGludCBtYXRjaGVkTGVuZ3RoID0gMDsKLQot
ICAgIGRvIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcmVnRXhwLm1hdGNoKGxvZywgc3RhcnRGcm9t
LCAmbWF0Y2hlZExlbmd0aCk7Ci0gICAgICAgIGlmIChzdGFydCA9PSAtMSkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFy
dEZyb20sIHN0YXJ0IC0gc3RhcnRGcm9tKSk7Ci0gICAgICAgIHN0YXJ0RnJvbSA9IHN0YXJ0ICsg
bWF0Y2hlZExlbmd0aDsKLQotICAgICAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWRTeW1ib2wgPSBs
b2cuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaGVkTGVuZ3RoKTsKLSAgICAgICAgY29uc3QgU3RyaW5n
JiBtYXBwZWRTeW1ib2wgPSBtYXBwZWRTeW1ib2xOYW1lKHNoYWRlcnMsIGNvdW50LCBtYW5nbGVk
U3ltYm9sKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRGVtYW5nbGluZzogJXMgdG8gJXMiLCBtYW5n
bGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCksIG1hcHBlZFN5bWJvbC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChtYXBwZWRTeW1ib2wpOwotICAgIH0gd2hpbGUgKHN0
YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4obG9nLmxlbmd0aCgpKSk7Ci0KLSAgICBwcm9jZXNz
ZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFy
dEZyb20pKTsKLQotICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMi
LCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gcHJv
Y2Vzc2VkTG9nLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIEFT
U0VSVChwcm9ncmFtKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFBy
b2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIGlmICgh
bGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgR0xzaXplaSBzaXplID0g
MDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAgOjpnbEdldFByb2dyYW1J
bmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgIEdDR0xz
aXplaSBjb3VudDsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07Ci0gICAgZ2V0QXR0
YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICByZXR1cm4g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBH
Q0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRh
cmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBHQ0dMaW50IHZh
bHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
dmFsdWU7Ci0KLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBERUxFVEVf
U1RBVFVTOgotICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAgIDo6Z2xHZXRTaGFkZXJpdihz
aGFkZXIsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENPTVBJTEVf
U1RBVFVTOgotICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQot
ICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxp
ZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgotICAgICAgICBp
ZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgICAgdmFsdWUg
PSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6Ci0gICAgICAgIHZhbHVlID0gZ2V0U2hhZGVyU291
cmNlKHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7Ci0gICAgfQotICAgIHJldHVybiB2
YWx1ZTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZv
TG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsgCi0KLSAgICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSBy
ZXN1bHQtPnZhbHVlOwotICAgIGlmICghZW50cnkuaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIGVu
dHJ5LmxvZzsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2KHNo
YWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVj
dG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRl
ciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xv
ZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAg
IHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKLX0KLQotR0NHTGZsb2F0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUpCi17Ci0gICAgR0NHTGZsb2F0IHZhbHVlID0gMC5mOwotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6OmdsR2V0VGV4UGFyYW1l
dGVyZnYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdD
R0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgOjpn
bEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZh
bHVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMZmxv
YXQ+IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50
PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRh
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0x1aW50
PiB2YWx1ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotfQotCi1HQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAg
U3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1C
T0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2Nh
dGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1l
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUdDR0xzaXplaXB0ciBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBH
Q0dMZW51bSBwbmFtZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIEdMdm9pZCogcG9pbnRlciA9IDA7Ci0gICAgOjpnbEdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiAhVVNFKE9QRU5HTF9F
UykKLSAgICBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykKLSAgICAgICAgdHlwZSA9IEdMX0hB
TEZfRkxPQVRfQVJCOwotI2VuZGlmCi0KLSAgICBpZiAobV91c2luZ0NvcmVQcm9maWxlKSAgewot
ICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhh
dCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCi0g
ICAgICAgIC8vIHRvIGFkYXB0IHRoZW0sIGFzIHdlIGRvIGluIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJEKCkuCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNh
c2UgQUxQSEE6Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkVEIHRvIGJhY2sgR0xf
QUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAgICAgICAgICAgIGZvcm1hdCA9IFJFRDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKLSAgICAg
ICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRyB0byBiYWNrIEdMX0xVTUlOQU5DRV9BTFBIQSwg
c28gZG8gaXQgaGVyZSBhcyB3ZWxsLgotICAgICAgICAgICAgZm9ybWF0ID0gUkc7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4
ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZl
ciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgotICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmRh
dGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91
bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVz
c2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQg
Ym9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0
YSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOwotICAgIG1f
c3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NH
TGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRh
dGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOwot
ICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0
dXJlKCkpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVCdWZmZXIoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuQnVmZmVycygxLCAmbyk7
Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZy
YW1lYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGds
Q3JlYXRlUHJvZ3JhbSgpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2Vu
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBl
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBH
TF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKLX0KLQotUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQg
byA9IDA7Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdsRGVsZXRl
QnVmZmVycygxLCAmYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChm
cmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewotICAgICAgICAvLyBNYWtlIHN1
cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCi0g
ICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgotICAgICAgICBiaW5k
RnJhbWVidWZmZXIoRlJBTUVCVUZGRVIsIDApOwotICAgIH0KLSAgICBnbERlbGV0ZUZyYW1lYnVm
ZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYWRlclBy
b2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAgZ2xEZWxldGVQcm9ncmFt
KHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5k
ZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVSZW5kZXJi
dWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVT
aGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
VGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVN
YXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgewotICAgICAgICByZXR1cm4g
a2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKLSAgICB9KTsKLSAgICBnbERlbGV0ZVRl
eHR1cmVzKDEsICZ0ZXh0dXJlKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVtb3Zl
QWxsKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50aGVz
aXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikKLXsKLSAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1
cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCB0bwotICAgIC8vIHByZXNl
cnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRvIGdldEVycm9yIHdpbGwgZ2V0
Ci0gICAgLy8gYW55IGVycm9ycyBmcm9tIGdsRXJyb3IgYmVmb3JlIHRoZSBlcnJvciB3ZSBhcmUg
c3ludGhlc2l6aW5nLgotICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAg
IG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZvcmNlQ29udGV4dExvc3QoKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDog
Y29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9z
dCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgp
Ci17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAg
ICAgICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4dCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKLXsKLSAgICBm
b3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGll
bnQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdB
cnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNv
dW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3QXJy
YXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwotICAgIGNo
ZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdF
bGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdl
dEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlw
ZSwgb2Zmc2V0LCBwcmltY291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5k
ZXgsIEdDR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJp
YkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSAm
JiBFTkFCTEUoV0VCR0wyKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZl
UmVzdGFydEluZGV4KEdDR0x1aW50IGluZGV4KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xQcmltaXRpdmVSZXN0YXJ0SW5kZXgo
aW5kZXgpOwotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZl
ckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotICAgIFVOVVNFRF9QQVJBTSh1c2Fn
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0
aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNyY0Rh
dGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQotewotICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShkc3RCeXRlT2Zmc2V0KTsKLSAgICBVTlVT
RURfUEFSQU0oc3JjRGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGxlbmd0aCk7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5H
TF9FU18zKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEo
R0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVh
ZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bENvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3
cml0ZU9mZnNldCwgc2l6ZSk7Ci19Ci0jZWxzZQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyLCBHQ0dM
aW50cHRyLCBHQ0dMc2l6ZWlwdHIpCi17Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKLXsKLSNpZiBIQVZFKE9QRU5HTF80KSB8
fCBIQVZFKE9QRU5HTF9FU18zKQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBHQ0dMdm9pZCogcHRyID0gOjpnbE1hcEJ1ZmZlclJhbmdlKHRhcmdl
dCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIEdyYXBoaWNzQ29udGV4dEdMOjpNQVBfUkVBRF9CSVQp
OwotICAgIGlmICghcHRyKQotICAgICAgICByZXR1cm47Ci0gICAgbWVtY3B5KGRhdGEuZGF0YSwg
cHRyLCBkYXRhLmJ1ZlNpemUpOwotICAgIGlmICghOjpnbFVubWFwQnVmZmVyKHRhcmdldCkpCi0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJB
TShvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLSAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotI2VuZGlmCi19Ci0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3Jj
WDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQg
ZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xi
aXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gw
KTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTApOwotICAgIFVOVVNFRF9QQVJBTShzcmNYMSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WDApOwotICAgIFVO
VVNFRF9QQVJBTShkc3RZMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFgxKTsKLSAgICBVTlVTRURf
UEFSQU0oZHN0WTEpOwotICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKLSAgICBVTlVTRURfUEFSQU0o
ZmlsdGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9y
bUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOwotICAg
IFVOVVNFRF9QQVJBTSh0ZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwotICAgIFVO
VVNFRF9QQVJBTShsYXllcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlu
dmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xl
bnVtPiBhdHRhY2htZW50cykKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVT
RURfUEFSQU0oYXR0YWNobWVudHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZm
ZXIoR0NHTGVudW0gc3JjKQotewotICAgIFVOVVNFRF9QQVJBTShzcmMpOwotfQotCi0jaWYgSEFW
RShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IGRhdGEpCi17Ci0j
aWYgVVNFKE9QRU5HTF9FUykKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAg
IFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZlNpemUpOwotICAgIFVO
VVNFRF9QQVJBTShwYXJhbXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
dGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQs
IGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKLSAgICBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsK
LX0KLSNlbHNlCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1h
dGl2KEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPEdDR0xpbnQ+KQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNp
emVpKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQo
R0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0s
IEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17
Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdD
R0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXQpOwotICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5VU0VEX1BBUkFNKHhvZmZzZXQp
OwotICAgIFVOVVNFRF9QQVJBTSh5b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oem9mZnNldCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURf
UEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotfQotCi1HQ0dMaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9n
cmFtKTsKLSAgICBVTlVTRURfUEFSQU0obmFtZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMdWludCB2MCkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9Q
QVJBTSh2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQotewotICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFS
QU0odjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odjApOwotICAg
IFVOVVNFRF9QQVJBTSh2MSk7Ci0gICAgVU5VU0VEX1BBUkFNKHYyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWlu
dCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKLXsKLSAgICBVTlVT
RURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHYxKTsKLSAgICBVTlVTRURfUEFSQU0odjIpOwotICAgIFVOVVNFRF9QQVJBTSh2Myk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJB
TShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAg
IFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRh
dGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odHJhbnNw
b3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVT
RURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVO
VVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
ZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0
cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAg
IFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMaW50IHosIEdDR0xpbnQgdykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVO
VVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHop
OwotICAgIFVOVVNFRF9QQVJBTSh3KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dCwgND4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50
IHosIEdDR0x1aW50IHcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURf
UEFSQU0oeCk7Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh6KTsKLSAg
ICBVTlVTRURfUEFSQU0odyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwg
ND4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFN
KHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdD
R0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTShp
bmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsK
LSAgICBVTlVTRURfUEFSQU0oc3RyaWRlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVu
dW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBVTlVTRURfUEFSQU0obW9k
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsKLSAgICBVTlVTRURfUEFSQU0oZW5kKTsKLSAg
ICBVTlVTRURfUEFSQU0oY291bnQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVT
RURfUEFSQU0ob2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGJ1ZnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZmZXIs
IEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykKLXsK
LSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7
Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShi
dWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0o
dmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJm
aShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBH
Q0dMaW50IHN0ZW5jaWwpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkZXB0aCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHN0ZW5jaWwpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVRdWVyeSgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBVTlVT
RURfUEFSQU0ocXVlcnkpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCBxdWVyeSkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0ocXVlcnkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShH
Q0dMZW51bSB0YXJnZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci19Ci0KLVBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHBuYW1lKTsKLQotICAgIHJldHVybiAwOwotfQotCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aShQbGF0Zm9ybUdMT2JqZWN0IHF1
ZXJ5LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkpOwotICAgIFVO
VVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQotewotICAgIHJldHVybiAw
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRm
b3JtR0xPYmplY3Qgc2FtcGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyKQotewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBs
ZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewotICAgIFVOVVNF
RF9QQVJBTSh1bml0KTsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qg
c2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFt
ZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
IHBhcmFtKQotewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0o
cG5hbWUpOwotICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Ci19Ci0KLUdDR0xmbG9hdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBz
YW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICByZXR1cm4gMC5mOwotfQotCi1HQ0dMaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2Jq
ZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQotCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBs
ZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0xz
eW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9u
LCBHQ0dMYml0ZmllbGQgZmxhZ3MpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbmRpdGlvbik7Ci0g
ICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKLQotICAgIHJldHVybiAwOwotfQotCi1HQ0dMYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHN5bmMpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTeW5jKEdDR0xzeW5jIHN5bmMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHN5bmMpOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWlu
dDY0IHRpbWVvdXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwotICAgIFVOVVNFRF9QQVJB
TShmbGFncyk7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOwotCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdDR0xzeW5jIHN5bmMs
IEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHN5bmMpOwotICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0gICAgVU5VU0VEX1BBUkFNKHRp
bWVvdXQpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaShH
Q0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7
Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICByZXR1cm4gMDsKLX0KLQotUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2so
KQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNF
RF9QQVJBTShpZCk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGlkKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0oaWQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9y
bUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBy
aW1pdGl2ZU1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFu
c2Zvcm1GZWVkYmFjaygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh2YXJ5aW5ncyk7Ci0gICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlck1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0p
OwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NH
THVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1
ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5n
ZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZl
ciwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQotewotICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNp
emUpOwotfQotCi1WZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB1bmlmb3JtTmFtZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVO
VVNFRF9QQVJBTSh1bmlmb3JtTmFtZXMpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotVmVjdG9y
PEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRp
Y2VzLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVuaWZv
cm1JbmRpY2VzLnNpemUoKSwgMCk7Ci0jaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xf
RVNfMykKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2
KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBw
bmFtZSwgcmVzdWx0LmRhdGEoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsK
LSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0luZGV4
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1l
KQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9y
bUJsb2NrTmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KQotewotICAgIFVOVVNFRF9QQVJBTShwcm9n
cmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOwotICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
QmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0JpbmRpbmcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURf
UEFSQU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVp
Z2h0KTsKLSAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50
IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFy
YW1zKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5p
Zm9ybUJsb2NrSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHBhcmFtcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NH
TGludCwgR0NHTGVudW0sIEdDR0xlbnVtICwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwg
R0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwg
R0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVt
LCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NH
TGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFn
ZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFn
ZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNE
KEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQot
ewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1h
Z2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNp
emVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0
cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlz
QU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29u
c3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMc2l6
ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
T1BFUkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnQgdW5wYWNrQWxpZ25tZW50KQotewotICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQgPT0g
MSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1bnBh
Y2tBbGlnbm1lbnQgPT0gOCk7Ci0gICAgVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4gemVybzsK
LSAgICB1bnNpZ25lZCBzaXplID0gMDsKLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDAp
IHsKLSAgICAgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7Ci0gICAgICAgIHBhcmFtcy5hbGln
bm1lbnQgPSB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgICAgIEdDR0xlbnVtIGVycm9yID0gY29tcHV0
ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJhbXMs
ICZzaXplLCBudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNz
Q29udGV4dEdMOjpOT19FUlJPUikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJy
b3IpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHplcm8g
PSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4oc2l6ZSk7Ci0gICAgICAgIGlmICghemVy
bykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKLSAgICB9Ci0gICAgdGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIG1ha2VHQ0dMU3Bhbih6ZXJvLmdldCgpLCBzaXplKSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKaW5kZXggZTY2
ZTAwYWRiMjg3NWFkZjY5YTE5N2ZjYzY5MjMxNmRhNmY5NmU2ZS4uZDI5OWExOWZhODY2Mzk3NTUy
ZGQ2ZGU3ODgwY2NhNDMzODJmMjhhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMTWFuYWdlci5jcHAKQEAgLTI4LDkgKzI4LDEzIEBACiAjaWYgRU5BQkxFKFdFQkdM
KQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIgogCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAKKyNp
ZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgorI2Vsc2UK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2VuZGlmCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlciYgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkKQEAgLTU2LDcgKzYwLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQo
KQogfQogI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRD
b250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TCogY29udGV4dCkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgaWYgKCFjb250ZXh0KQpA
QCAtNjYsNyArNzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6YWRk
Q29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dAogICAgIG1fY29udGV4dHMu
YXBwZW5kKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
cjo6cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250ZXh0KFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0wqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFtX2NvbnRleHRzLmNvbnRhaW5z
KGNvbnRleHQpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmgKaW5kZXggMGVmODZkYzZkZTdmMjFkNWU4ZTkxMjBlOWEzMmIwYThi
MWYxZjczMS4uZDE0ODM0MTBkMDIzZjgzMDM2ZDk3ODU2NDM1ZmFlNTU4NGIwNDY3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaApAQCAtMzYsMTUgKzM2
LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgdW5zaWduZWQgTWF4Q29udGV4dHMg
PSAxNjsKIAorI2lmIFVTRShBTkdMRSkKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7Cisj
ZWxzZQogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYKIAogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKICAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsKIHB1YmxpYzoKKyNpZiBVU0UoQU5HTEUp
CisgICAgdXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCA9IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU7CisjZWxzZQorICAgIHVzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgPSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDsKKyNlbmRpZgorCiAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMTWFuYWdlciYgc2hhcmVkTWFuYWdlcigpOwogICAgIAotICAgIHZvaWQgYWRkQ29u
dGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dChH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCopOworICAgIHZvaWQgYWRkQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMKik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0wqKTsKICAgICAKICAgICB2b2lkIHJlY3ljbGVDb250ZXh0SWZOZWNlc3Nhcnko
KTsKICAgICBib29sIGhhc1Rvb01hbnlDb250ZXh0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dHMuc2l6ZSgpID49IE1heENvbnRleHRzOyB9CkBAIC01OSw3ICs2OSw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyKCkgPSBkZWZhdWx0Owog
Ci0gICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKj4gbV9jb250ZXh0czsKKyAgICBW
ZWN0b3I8UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCo+IG1fY29udGV4dHM7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCmluZGV4IDA1
NzU0NDQ4YjkwM2UxNDk5M2VkMzFiMGNiZDYxZTg2OTRhOWVlOTkuLjk3NmUzYWJlNWJiM2FjNDBh
ZjhmMjBjOWVlNGVlOGEyNTUzYjBhNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIuY3BwCkBAIC04NywxMiArODcsMTAgQEAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlcj4gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpj
cmVhdGUoR3IKIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6fkdyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlcigpID0gZGVmYXVsdDsKIAogR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyOjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIoR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKLSAgICA6IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKFdU
Rk1vdmUoYXR0cmlidXRlcykpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJC
YXNlKFdURk1vdmUoYXR0cmlidXRlcykpCiB7CiB9CiAKLS8vIEZJWE1FOiBCZWxvdyBmdW5jdGlv
bmFsaXR5IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIg
dG8gc2ltcGxpZnkgdGhlIGJhc2UgY2xhc3MuCi0KIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTD4g
Y3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9
IGZhbHNlOwpAQCAtMTI1LDMxNCArMTIzLDcgQEAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMPiBj
cmVhdGVXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0woY29uc3QgR3JhcGhpY3NDb250ZXgKICAg
ICByZXR1cm4gY29udGV4dDsKIH0KIAotI2lmIFVTRShBTkdMRSkKLUdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMgYXR0cmlidXRlcykKLSAgICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCi17Ci0j
aWYgRU5BQkxFKFdFQkdMMikKLSAgICBtX2lzRm9yV2ViR0wyID0gYXR0cmlidXRlcy53ZWJHTFZl
cnNpb24gPT0gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsKLSNlbmRpZgot
I2lmIFVTRShOSUNPU0lBKQotICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lh
OjpHQ0dMQU5HTEVMYXllcj4oKnRoaXMpOwotI2Vsc2UKLSAgICBtX3RleG1hcExheWVyID0gbWFr
ZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlzKTsKLSNlbmRpZgot
ICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVF9VTlVT
RUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0KLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLSAgICBh
dHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2Vk
IGR1cmluZyB2YWxpZGF0aW9uLgotCi0gICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldCgpOwotICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVy
IGludG8uCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIGdsOjpCaW5k
VGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJm
KHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBn
bDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1
cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gRkJPLgot
ICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBn
bDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAg
Z2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJl
VGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2w6OlRl
eFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOwotCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUp
OwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX2ludGVybWVkaWF0ZVRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRl
cmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLQotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCAw
KTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIEFTU0VS
VChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYg
KGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8g
PSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIGdsOjpH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBp
ZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBn
bDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICBnbDo6
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG1fc3RhdGUu
Ym91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKLSAgICAgICAgaWYg
KGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgZ2w6
OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0KLSAg
ICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLX0KLSNlbHNlCi1HcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQotewot
I2lmIFVTRShOSUNPU0lBKQotICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lh
OjpHQ0dMTGF5ZXI+KCp0aGlzKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBMYXllciA9IG1ha2VVbmlx
dWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7Ci0jZW5kaWYKLQotICAg
IGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVF9VTlVTRUQo
c3VjY2Vzcywgc3VjY2Vzcyk7Ci0KLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLSAgICBhdHRy
aWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1
cmluZyB2YWxpZGF0aW9uLgotCi0gICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50
by4KLSAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLQotICAgIC8vIENyZWF0ZSBhbiBGQk8uCi0gICAg
OjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6Omds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9N
SU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICA6OmdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURH
RSk7Ci0KLSAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0g
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7
Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
OjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NM
QU1QX1RPX0VER0UpOwotCi0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwot
I2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCi0gICAgQVNTRVJUKG1f
c3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAoYXR0
cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9t
dWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1f
c3RhdGUuYm91bmRSZWFkRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKLSAgICAgICAgOjpnbEdlblJl
bmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChh
dHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIDo6Z2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCi0gICAgICAgIGdsQmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwot
ICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9m
Ym87Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCi0g
ICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwotICAgICAg
ICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLQotI2lmICFVU0UoT1BFTkdMX0VT
KQotICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7Ci0KLSAgICBp
ZiAoR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjApIHsKLSAgICAgICAgbV91
c2luZ0NvcmVQcm9maWxlID0gdHJ1ZTsKLQotICAgICAgICAvLyBGcm9tIHZlcnNpb24gMy4yIG9u
IHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgc28gcmVxdWVzdCB0aGF0IG91cHV0IHRv
IHRoZSBzaGFkZXIgY29tcGlsZXIuCi0gICAgICAgIC8vIE9wZW5HTCB2ZXJzaW9uIDMuMiB1c2Vz
IEdMU0wgdmVyc2lvbiAxLjUwLgotICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlk
Z2UoU0hfR0xTTF8xNTBfQ09SRV9PVVRQVVQpOwotCi0gICAgICAgIC8vIEZyb20gdmVyc2lvbiAz
LjIgb24gd2UgdXNlIHRoZSBPcGVuR0wgQ29yZSBwcm9maWxlLCBhbmQgd2UgbmVlZCBhIFZBTyBm
b3IgcmVuZGVyaW5nLgotICAgICAgICAvLyBBIFZBTyBjb3VsZCBiZSBjcmVhdGVkIGFuZCBib3Vu
ZCBieSBlYWNoIGNvbXBvbmVudCB1c2luZyBHTCByZW5kZXJpbmcgKFRleHR1cmVNYXBwZXIsIFdl
YkdMLCBldGMpLiBUaGlzIGlzCi0gICAgICAgIC8vIGEgc2ltcGxlciBzb2x1dGlvbjogdGhlIGZp
cnN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNyZWF0ZWQgb24gYSBHTENvbnRleHQgd2lsbCBj
cmVhdGUgYW5kIGJpbmQgYSBWQU8gZm9yIHRoYXQgY29udGV4dC4KLSAgICAgICAgR0NHTGludCBj
dXJyZW50VkFPID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6VkVSVEVYX0FS
UkFZX0JJTkRJTkcpOwotICAgICAgICBpZiAoIWN1cnJlbnRWQU8pIHsKLSAgICAgICAgICAgIG1f
dmFvID0gY3JlYXRlVmVydGV4QXJyYXkoKTsKLSAgICAgICAgICAgIGJpbmRWZXJ0ZXhBcnJheSht
X3Zhbyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGb3IgbG93ZXIgdmVy
c2lvbnMgcmVxdWVzdCB0aGUgY29tcGF0aWJpbGl0eSBvdXRwdXQgdG8gdGhlIHNoYWRlciBjb21w
aWxlci4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfQ09N
UEFUSUJJTElUWV9PVVRQVVQpOwotCi0gICAgICAgIC8vIEdMX1BPSU5UX1NQUklURSBpcyBuZWVk
ZWQgaW4gbG93ZXIgdmVyc2lvbnMuCi0gICAgICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRF
KTsKLSAgICB9Ci0jZWxzZQotICAgIC8vIEFkanVzdCB0aGUgc2hhZGVyIHNwZWNpZmljYXRpb24g
ZGVwZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMgKGkuZS4gV2ViR0wyIHN1cHBvcnQpIHdhcyByZXF1
ZXN0ZWQuCi0jaWYgRU5BQkxFKFdFQkdMMikKLSAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRC
cmlkZ2UoU0hfRVNTTF9PVVRQVVQsIChhdHRyaWJ1dGVzLndlYkdMVmVyc2lvbiA9PSBHcmFwaGlj
c0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyKSA/IFNIX1dFQkdMMl9TUEVDIDogU0hfV0VC
R0xfU1BFQyk7Ci0jZWxzZQotICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9F
U1NMX09VVFBVVCwgU0hfV0VCR0xfU1BFQyk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgLy8gQU5H
TEUgaW5pdGlhbGl6YXRpb24uCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2Vz
OwotICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOwotCi0gICAg
QU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VmFy
eWluZ1ZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkFS
WUlOR19WRUNUT1JTKTsKLSAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICBBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJl
SW1hZ2VVbml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTKTsKLSAgICBBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0ZSQUdNRU5U
X1VOSUZPUk1fVkVDVE9SUyk7Ci0KLSAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBF
Uy4KLSAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0KLSAgICBHQ0dMaW50
IHJhbmdlWzJdIHsgfTsKLSAgICBHQ0dMaW50IHByZWNpc2lvbiA9IDA7Ci0gICAgZ2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpGUkFHTUVOVF9TSEFERVIs
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpISUdIX0ZMT0FULCByYW5nZSwgJnByZWNpc2lvbik7
Ci0gICAgQU5HTEVSZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID0gKHJhbmdlWzBdIHx8
IHJhbmdlWzFdIHx8IHByZWNpc2lvbik7Ci0KLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhB
TkdMRVJlc291cmNlcyk7Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLX0KLSNl
bmRpZgotCi0jaWYgVVNFKEFOR0xFKQotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCgpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2Vy
OjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAgICBib29sIHN1Y2Nlc3Mg
PSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29t
cG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3Np
dG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRy
aWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgZ2w6
OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAg
ICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAg
ICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkgewotI2lmICFVU0UoQU5HTEUpICYmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmICht
X2RlcHRoQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoQnVmZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIGdsOjpEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIGdsOjpEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotI2Vu
ZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxldGVWZXJ0
ZXhBcnJheShtX3Zhbyk7Ci0jZW5kaWYKLX0KLSNlbHNlCi1HcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwotICAgIGJv
b2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7Ci0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgOjpnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAg
ICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgYXV0byBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewot
ICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRkJPKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKSB7Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgaWYgKG1fZGVw
dGhCdWZmZXIpCi0gICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhC
dWZmZXIpOwotCi0gICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYKLSAgICAgICAg
aWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0gICAgOjpnbERlbGV0ZUZy
YW1lYnVmZmVycygxLCAmbV9mYm8pOwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAg
ICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0jZW5kaWYK
LQotI2lmIFVTRShDQUlSTykKLSAgICBpZiAobV92YW8pCi0gICAgICAgIGRlbGV0ZVZlcnRleEFy
cmF5KG1fdmFvKTsKLSNlbmRpZgotfQotI2VuZGlmIC8vIFVTRShBTkdMRSkKLQotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSNpZiBVU0UoTklD
T1NJQSkKLSAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
I2Vsc2UKLSAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMo
KQotewotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0dMRVMyQ29tcGxpYW50
KCkgY29uc3QKLXsKLSNpZiBVU0UoQU5HTEUpCi0gICAgcmV0dXJuIG1faXNGb3JXZWJHTDI7Ci0j
ZWxpZiBVU0UoT1BFTkdMX0VTKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKLX0KLQotUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0
R0xUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJ
QSkKICAgICByZXR1cm4gJm1fbmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIoKTsKQEAgLTQ0MSwz
OCArMTMyLDggQEAgUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAogI2VuZGlmCiB9CiAKLSNpZiBQTEFURk9STShHVEspICYmICFVU0Uo
QU5HTEUpCi1FeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1fZXh0ZW5zaW9ucykgewotI2lmIFVTRShP
UEVOR0xfRVMpCi0gICAgICAgIC8vIGdsR2V0U3RyaW5naSBpcyBub3QgYXZhaWxhYmxlIG9uIEdM
RVMyLgotICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnNHTE9wZW5H
TEVTPih0aGlzLCAgZmFsc2UpOwotI2Vsc2UKLSAgICAgICAgLy8gRnJvbSBPcGVuR0wgMy4yIG9u
IHdlIHVzZSB0aGUgQ29yZSBwcm9maWxlLCBhbmQgdGhlcmUgd2UgbXVzdCB1c2UgZ2xHZXRTdHJp
bmdpLgotICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnNHTE9wZW5H
TD4odGhpcywgR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjApOwotI2VuZGlm
Ci0gICAgfQotICAgIHJldHVybiAqbV9leHRlbnNpb25zOwotfQotI2VuZGlmCi0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCi17Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQgPT0gU2ltdWxh
dGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKQotICAgICAgICBtX2ZhaWxOZXh0
U3RhdHVzQ2hlY2sgPSB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
cmVwYXJlRm9yRGlzcGxheSgpCi17Ci19Ci0KICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotUmVm
UHRyPE1lZGlhU2FtcGxlPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRDb21wb3NpdGVk
UmVzdWx0c1RvTWVkaWFTYW1wbGUoKQorUmVmUHRyPE1lZGlhU2FtcGxlPiBHcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkK
IHsKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgIGlmIChhdXRvIHBpeGVsQnVmZmVyID0gcmVhZENv
bXBvc2l0ZWRSZXN1bHRzKCkpCkBAIC00ODIsMTEgKzE0Myw2IEBAIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlCiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCi17Ci0gICAgcmV0dXJuIHJl
YWRSZW5kZXJpbmdSZXN1bHRzKCk7Ci19Ci0KICNpZiBFTkFCTEUoVklERU8pCiBib29sIEdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6Y29weVRleHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5
ZXImIHBsYXllciwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMZW51bSBvdXRw
dXRUYXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51
bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaAppbmRl
eCBlNDY2MmI2ODNlYTQ1YjZmMTk2NmIzMTk3MzM5MzMwM2FhZjg2MDk1Li43ZjYyMjVhMWEzOTli
ZWIyYmY5OTMwOWQ0ZTc4ODMwODEzOTczMzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlci5oCkBAIC0yNywxOCArMjcsMzQgQEAKIAogI2lmIEVOQUJMRShX
RUJHTCkKIAorI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFOR0xF
LmgiCisjZWxzZQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgewor
I2lmIFVTRShBTkdMRSkKK3VzaW5nIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2Ug
PSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOworI2Vsc2UKK3VzaW5nIEdyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlckJhc2UgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKKyNlbmRpZgorCitj
bGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIgOiBwdWJs
aWMgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IGNyZWF0ZShXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAgfkdyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlcigpOwogCisgICAgLy8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
QmFzZSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IGZpbmFsOwogI2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGNvcHlUZXh0dXJlRnJvbU1lZGlh
KE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgZmluYWw7
CiAjZW5kaWYKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9NZWRpYVNhbXBsZSgpIGZpbmFsOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBHcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzJiYpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyQU5HTEUuY3BwCmluZGV4IDA4NTM5YTdkOTI5ODExNDVkYzA2MDAxYjU3NGNhOGM5YTcx
Zjg5NTUuLmQxMThiMDNiZjMzMDgyZDRlYjRkMTUzMWY1NGEyZmFhOGRmZjMxNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCiAjaW5jbHVkZSAi
QU5HTEVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXIuaCIKIAogI2lmIFVTRShOSUNPU0lBKQogI2luY2x1ZGUgIk5pY29zaWFHQ0dMQU5HTEVMYXll
ci5oIgpAQCAtNDAsNyArNDEsMTA1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRm
b3JtRGlzcGxheSgpIGNvbnN0CitHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDog
R3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcykKK3sKKyNpZiBFTkFCTEUoV0VCR0wyKQorICAg
IG1faXNGb3JXZWJHTDIgPSBhdHRyaWJ1dGVzLndlYkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRl
eHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyOworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisgICAg
bV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xBTkdMRUxheWVyPigqdGhp
cyk7CisjZWxzZQorICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJH
Q0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOworI2VuZGlmCisgICAgYm9vbCBzdWNjZXNzID0gbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsK
KworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0
cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisK
KyAgICBHTGVudW0gdGV4dHVyZVRhcmdldCA9IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7
CisgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50by4KKyAgICBnbDo6R2VuVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQs
IG1fdGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVY
VFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1
cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4
UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFy
Z2V0LCAwKTsKKworICAgIC8vIENyZWF0ZSBhbiBGQk8uCisgICAgZ2w6OkdlbkZyYW1lYnVmZmVy
cygxLCAmbV9mYm8pOworICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1f
ZmJvKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBnbDo6R2VuVGV4dHVy
ZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJl
VGFyZ2V0LCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRl
eFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFy
Z2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICBnbDo6R2Vu
VGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAgZ2w6OkJpbmRUZXh0dXJl
KHRleHR1cmVUYXJnZXQsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmko
dGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisg
ICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOworI2VuZGlmCisKKyAgICAvLyBD
cmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJP
ID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMp
IHsKKyAgICAgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJP
ID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBCaW5kIGNhbnZhcyBGQk8uCisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9IG1fZmJvOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8
IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAm
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKworICAgIGdsOjpDbGVhckNvbG9yKDAsIDAs
IDAsIDApOworfQorCitHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp+R3JhcGhpY3NDb250ZXh0R0xB
TkdMRSgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5h
Z2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIGlm
IChtX3RleHR1cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1
cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7
CisjZW5kaWYKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisK
KyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkRlbGV0ZVJlbmRl
cmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRy
aWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsOjpEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAg
fSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgeworICAg
ICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbDo6RGVsZXRlUmVu
ZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKyAgICBnbDo6RGVs
ZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyNl
bmRpZgorfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAogewogI2lmIFVTRShOSUNPU0lBKQog
ICAgIHJldHVybiBtX25pY29zaWFMYXllci0+cGxhdGZvcm1EaXNwbGF5KCk7CkBAIC00OSw3ICsx
NDgsNyBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cGxhdGZvcm1EaXNwbGF5KCkgY29ucwogI2VuZGlmCiB9CiAKLVBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0xDb25maWcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtQ29u
ZmlnKCkgY29uc3QKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cGxhdGZvcm1Db25maWcoKSBjb25zdAogewogI2lmIFVTRShOSUNPU0lBKQog
ICAgIHJldHVybiBtX25pY29zaWFMYXllci0+cGxhdGZvcm1Db25maWcoKTsKQEAgLTU4LDcgKzE1
NywyOCBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0CiAjZW5kaWYKIH0KIAotYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyNpZiBVU0UoTklD
T1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
I2Vsc2UKKyAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisj
ZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygp
Cit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2V0Q29udGV4dFZpc2liaWxp
dHkoYm9vbCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlRm9y
RGlzcGxheSgpCit7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURp
c3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0
ZXMoKTsKICAgICBjb25zdCBhdXRvIHNpemUgPSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgp
OwpAQCAtODIsNyArMjAyLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFw
ZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2Vz
KCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
LmNwcAppbmRleCBmNDRjN2EwOTM0YWEwYjJlMzI0YWIzODM4Yjg4OGRiZDEwN2IwYWM3Li5lZDZi
OWNlMmU3MTUxMmVhZmFjOGE4NTNmMDAyM2Q2ZmUzYzM0NzRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9y
bUxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6VGV4
dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250
ZXh0KQorVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyJiBjb250ZXh0KQogICAg
IDogbV9jb250ZXh0KGNvbnRleHQpCiB7CiAgICAgYXV0byBzaGFyaW5nQ29udGV4dCA9IFBsYXRm
b3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXIuaAppbmRleCBjNzRlNzU1NDIxZTBjMTRkNjcxN2JkZjliMDYzYTQ3ZDg4NjRm
MmNkLi43M2M2NTBmMGFkMThlNDNlYmFmMmVlMGE3NzhmOTZiMjVmN2JiNjUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdD
R0xQbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oCkBAIC0yMSw3ICsyMSw3IEBA
CiAKICNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgIVVTRShOSUNP
U0lBKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVy
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKQEAgLTM0LDcgKzM0LDcg
QEAgY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKIGNsYXNzIFRleHR1cmVN
YXBwZXJHQ0dMUGxhdGZvcm1MYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRm
b3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKKyAgICBUZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyJik7CiAgICAgdmly
dHVhbCB+VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyKCk7CiAKICAgICBib29sIG1ha2VD
b250ZXh0Q3VycmVudCgpOwpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJp
dmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgbV9jb250ZXh0OworICAgIEdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciYgbV9jb250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxBTkdMRUNvbnRleHQ+IG1fZ2xDb250ZXh0OwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCmluZGV4IDEyMTUwYjFkNTBl
NWJjODkzNzRlYWE4MTFlMjMyYjNjYzUwZjMxNTEuLjNiNGI3NTgwMjdmNjk2NGUwMDllYjJlNTcy
MGQ0YTNjMWJjY2VkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKQEAg
LTQ4LDcgKzQ4LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpleHRy
YWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1
bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMR0w6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1h
Z2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFz
U2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmICghaW1hZ2VQaXhlbHMg
fHwgaW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBjYW52YXNTaXplLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJD
b3JlVGhyZWFkLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhy
ZWFkLm1tCmluZGV4IDk1NDRiNTFjMjc4ZGY1NjllYTRhYjBiZmVmN2VmNzQ0YWM1MmM3MzUuLjZk
NzcwN2Q0MGMzMmYyODQyOWMzZDMyNDUxNWE1Y2M2OTc3NjFiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KQEAgLTMwLDcgKzMwLDcg
QEAKIAogI2ltcG9ydCAiQ29tbW9uVk0uaCIKICNpbXBvcnQgIkZsb2F0aW5nUG9pbnRFbnZpcm9u
bWVudC5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbXBvcnQgIkdy
YXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlJ1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgogI2ltcG9ydCAiVGhyZWFkR2xvYmFsRGF0YS5oIgpA
QCAtNzcsMTMgKzc3LDEzIEBAIHZvaWQgUmVsZWFzZVdlYlRocmVhZEdsb2JhbFN0YXRlKCkKICAg
ICAvLyBJbiBzaW5nbGUtdGhyZWFkZWQgZW52aXJvbm1lbnRzIHdlIGRvIG5vdCBuZWVkIHRvIHVu
c2V0IHRoZSBjb250ZXh0LCBhcyB0aGVyZSBzaG91bGQgbm90IGJlIGFjY2VzcyBmcm9tCiAgICAg
Ly8gbXVsdGlwbGUgdGhyZWFkcy4KICAgICBBU1NFUlQoV2ViVGhyZWFkSXNFbmFibGVkKCkpOwot
ICAgIHVzaW5nIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOworICAgIHVz
aW5nIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I7CiAgICAgLy8gRm9yIHdl
YiB0aHJlYWQsIGp1c3QgcmVsZWFzZSB0aGUgY29udGV4dCBhcyB3ZSBrbm93IHdlIHdpbGwgc2Vl
IGNhbGxzIHRvIGl0IGFnYWluLgogICAgIC8vIEZvciBub24td2ViIHRocmVhZHMsIGUuZy4gdGhp
cmQtcGFydHkgY2xpZW50IHRocmVhZHMsIHdlIGRvbid0IGtub3cgaWYgd2UgZXZlciBzZWUgYW5v
dGhlciBjYWxsIGZyb20gdGhlCiAgICAgLy8gdGhyZWFkLCBzbyB3ZSBhbHNvIHJlbGVhc2UgdGhl
IHRocmVhZCByZXNvdXJjZXMuCiAgICAgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgcmVs
ZWFzZUJlaGF2aW9yID0KICAgICAgICAgV2ViVGhyZWFkSXNDdXJyZW50KCkgPyBSZWxlYXNlVGhy
ZWFkUmVzb3VyY2VCZWhhdmlvcjo6UmVsZWFzZUN1cnJlbnRDb250ZXh0IDogUmVsZWFzZVRocmVh
ZFJlc291cmNlQmVoYXZpb3I6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZXM7Ci0gICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMocmVsZWFzZUJl
aGF2aW9yKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzKHJlbGVhc2VCZWhhdmlvcik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wuY3BwCmluZGV4IGFjOTU5NTIwYTJlM2RmYWQ5ZmNkODJiMzkyZjEwYTlhNWE2MDQ4NDAuLjg0
YjJlNjg0NWQwNzQ5Y2RhYTFlNzhiODUzMGQ4ZjhlYTVhMGUwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMLmNwcApAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OnBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yCiAg
ICAgICAgICAgICAvLyBIZXJlIHdlIGRvIG5vdCB0cnkgdG8gcGxheSBiYWNrIHBlbmRpbmcgY29t
bWFuZHMgZm9yIGltYWdlQnVmZmVyLiBDdXJyZW50bHkgdGhpcyBjYWxsIGlzIG9ubHkgbWFkZSBm
b3IgZW1wdHkKICAgICAgICAgICAgIC8vIGltYWdlIGJ1ZmZlcnMgYW5kIHRoZXJlJ3Mgbm8gZ29v
ZCB3YXkgdG8gYWRkIGRpc3BsYXkgbGlzdHMuCiAgICAgICAgICAgICBpZiAocGl4ZWxCdWZmZXIp
Ci0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMo
Y29udGV4dEF0dHJpYnV0ZXMsIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXItPmJh
Y2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICAgICAgICAgIEdy
YXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBXVEZNb3Zl
KCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpLmNsZWFyUmVjdCh7IEludFBvaW50KCksIGltYWdlQnVmZmVyLT5iYWNrZW5k
U2l6ZSgpIH0pOwogICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSAiZmx1c2giIGltcGxlbWVu
dGF0aW9uIGluIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgb3ZlcmxvYWRzIG9yZGVyaW5nIGFuZCBl
ZmZlY3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Nj
b3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNw
cAppbmRleCA1YTZjZTY1ZTc0NDdkMjRlMWU3NzM2MGYyZDhjZmU2NGVhODhiMzJhLi4wZGE3Yjk1
ZDE0ZTlhZGZjZGQzNjY5Mzk5MzNkODAwZjAwYmY4ZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2Vi
R0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5j
bHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCIKICNpbmNsdWRlICJTdHJlYW1Db25uZWN0
aW9uV29ya1F1ZXVlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oPgogI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KIApAQCAtNTYsNyArNTYsNyBA
QCB2b2lkIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6ZnJlZVdlYkdMUmVu
ZGVyaW5nUmVzb3VyY2VzKCkKICAgICBpZiAoc19yZXF1ZXN0cykKICAgICAgICAgcmV0dXJuOwog
ICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW10g
ewotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFzZVRocmVh
ZFJlc291cmNlcyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UmVsZWFzZVRocmVh
ZFJlc291cmNlQmVoYXZpb3I6OlRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMpOwor
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVz
b3VyY2VzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OlJlbGVhc2VUaHJlYWRSZXNv
dXJjZUJlaGF2aW9yOjpUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTsKICAgICB9
KTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="470478"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445317</attachid>
            <date>2021-11-29 11:56:41 -0800</date>
            <delta_ts>2021-11-29 23:00:05 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211129215638.patch</filename>
            <type>text/plain</type>
            <size>573143</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5hMjc3NmJmMzcwMzNkNDc5NGRjNTk0YTJlNDdlZjNkNmNk
ZmI4ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MDUsNiArMTQwNSw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0FOR0xFSGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGls
aXRpZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4
MDExODYuLjE1ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
N2I2ZDU2MTQ2OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVj
MmQ1MzE4YWIzOTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEz
Niw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvaXNvL0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09WVFRDdWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTky
OTQ5ODk1MjBjMjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVy
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlNGQ5ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJl
ZTAyNmE2YTlkMTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBA
CiAJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAv
KiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAq
LzsgfTsKIAkJN0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRl
eHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYw
OTRERDI3MEM0NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAv
KiBBTkdMRVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJm
b3JtYW5jZUdQVVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFu
Y2VHUFVSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIz
MDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRl
eHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVE
Mjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYw
Q0UgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0No
ZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAy
MTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBH
cmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVG
MjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBB
MThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEw
MzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFB
QyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xDVkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ix
NjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4
MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1
Nyw4IEBACiAJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhD
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCOTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAw
NjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0
QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJ
CTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJ
CQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJ
CQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
ICovLAorCQkJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmggKi8sCiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xF
U2V0dGluZy5jcHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFy
eUFOR0xFU2V0dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3
QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgg
Ki8sCiAJCQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAw
MDA2MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2
OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBA
QAogCQkJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJ
CTdCOEVENUVGMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEw
MzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdC
MTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICov
LAotCQkJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCAqLywKKwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8q
IEltYWdlUm90YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdG
RjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4
MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0
MjYyLDE2IEBACiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4
dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3Jh
cGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3
MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdCOTVDRkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIx
MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAv
KiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4
MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0
MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5
RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGlj
c0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5
MTVmYTVmNzRkYzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2
MzQ1NTlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8g
UmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRh
KEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25l
ZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50
UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGlu
dCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0R0xTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNi
NGQ3ZTljZWUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBH
Q0dMdWludCBib3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVu
aXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4
dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwg
R0NHTGVudW0+LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJh
aXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5k
VGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0K
KyAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91
bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0
dXJlLCBHQ0dMZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0
KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIElu
dEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1
aW50Pj47CisgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYw
ZmI1ZWUxYWMzOTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2
NDBmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNp
bmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dM
QU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
KQorRXh0ZW5zaW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUqIGNvbnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhm
YWxzZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5k
ZXggMGE2MWVmYzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRi
OWY2MTVjM2IzYTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0z
MiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMu
Ci0gICAgZXhwbGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
KTsKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVu
c2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRl
bnNpb25zR0xBTkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4
ICs2NCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRl
bnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAg
Ly8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFj
ayB0byBHcmFwaGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUq
IG1fY29udGV4dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0
aW5nLXBvaW50IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAg
ICBib29sIG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBk
ZmEyYjdhNTA5Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmgiCiAKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJl
c3Npb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFW
Rk9VTkRBVElPTikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBk
ZWZpbml0aW9uIHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAg
LTc2LDggKzcxLDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpCiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEp
CiAgICAgICAgIEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3Jt
Q29uZmlnKCksIEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQor
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBz
d2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyAr
OTksNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2lu
Z1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1Rh
cmdldCkgewogICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZv
ckRyYXdpbmdUYXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJl
aGF2aW9yIHJlbGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNl
QmVoYXZpb3IpCiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAg
LTE2MSw3ICsxNTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xf
UmVsZWFzZVRocmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFp
bnRSZXN1bHRzKCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpA
QCAtMTg3LDE0ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBw
aXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1
dGVzKCkKIHsKICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygp
LmFscGhhID8gR0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11
c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hE
ZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChH
THVpbnQgaW50ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3Bl
ZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAg
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+
IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBnbDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwg
bnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBw
cmVjaXNpb25UeXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lz
aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48
R0NHTGludCwgMj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xl
bnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNo
YWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAg
ICAgICAgIGludGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihn
ZXRFeHRlbnNpb25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZz
ZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQg
eW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0wKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwg
R0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewogICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VT
aXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNl
dCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQg
eW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBH
Q0dMY2xhbXBmIHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGds
OjpEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oekZhcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRo
KEdDR0xjbGFtcGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVw
dGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVw
dGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lv
bnMpCiAgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+
KHRoaXMpOwogICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpy
ZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0
YS5kYXRhLCBmYWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRu
UGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJ
bXBsKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBs
ZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0
YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMs
IEdDR0xzaXplaSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZm
ZXJPYmplY3QpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYK
IH0KIAotLy8gVGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZv
bGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygp
OwogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZv
cm1zIGFyZSBub3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQog
ICAgICAgICByZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFT
U0VSVCghbV9sYXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVS
ZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5i
b3VuZFJlYWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpA
QCAtNTg3LDcgKzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhl
bHNGb3JQYWludFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBt
X2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1
cm47CkBAIC02NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0
dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTY4Miw3ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVU
ZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNT
RVJUKHNoYWRlcik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8K
ICAgICBnbDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC03MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0CiB9CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGds
OjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xj
bGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBn
cmVlbiwgR0NHTGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVu
dW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dM
ZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dM
ZW51bSBtb2RlQWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9
CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShH
Q0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xl
bnVtIGRzdEFscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBh
cmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEs
IEdDR0xlbnVtIGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJH
QgogICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0
ciBzaXplLCBHQ0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRh
dGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xT
cGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdD
R0x2b2lkPiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0
YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciBy
ZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVh
ZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NH
TGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0
aXZSb2J1c3RBTkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXpl
LCBudWxscHRyLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODQ4LDcgKzg0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
IGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgs
IGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRl
ciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAg
Z2w6OlRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6
ZSwgcGl4ZWxzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQq
PihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50
IHhvZmYKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIHBpeGVscy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50
IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4
OTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
aW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+
KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5
MDcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1
YkltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZz
ZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0Qo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBw
bmFtZSkKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVV
bmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4m
IHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4g
cmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpA
QCAtOTI5LDcgKzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwpAQCAtOTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6
OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNs
YW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTk0NSw3ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNv
bG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVh
cihHQ0dMYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05
NjIsNyArOTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KEdDR0xpbnQgcykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdy
ZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwg
R0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNv
bXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEw
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEw
MzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAg
ICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVu
YyhmdW5jKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdD
R0xib29sZWFuIGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhH
Q0dMYm9vbGVhbiBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxh
Zyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAg
QVNTRVJUKHNoYWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMTwogICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAg
IGdsOjpEaXNhYmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODks
NyArMTA4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5
cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBm
aXJzdCwgR0NHTHNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xlCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2Fw
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0NHTHVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50
IGluZGV4KQogICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1
c2goKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExMzksNyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNo
KCkKICAgICBnbDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBs
ZXZlbCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMTU2LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE2NCw3ICsxMTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3Miw3ICsxMTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVN
aXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9W
QUxVRSk7CkBAIC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwg
aW5mbyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1J
bXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDRwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJv
Z3JhbSwgaW5kZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4
Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZv
cm1HTE9iamVjdCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwg
bWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBp
ZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAg
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0
cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJu
IG1vdmVkQW5FcnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEVycm9yKCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsK
ICAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCkBAIC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0xMzA3LDcgKzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0
cmluZyhHQ0dMZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1v
ZGUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTMxNSw3ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2Rl
KTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKICAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0xMzM0LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXAp
OwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZl
cihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQog
ewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEz
NDUsNyArMTMzOSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0Zy
YW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJ
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpA
QCAtMTM1Niw3ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1By
b2dyYW0ocHJvZ3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgcmVuZGVyYnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBy
ZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
QEAgLTEzODksNyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNU
ZXh0dXJlKHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0
aCh3aWR0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQgcGFyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFt
KQogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9h
dCB1bml0cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dM
ZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYg
dmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAs
NyArMTQyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdl
KEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVy
YWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
Y2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0x
NDUxLDcgKzE0NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJT
b3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0g
ZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBt
YXNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE0NTksNyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywg
R0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGlu
dCByZWYsIEdDR0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLAogICAgIGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQ3NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE1hc2soR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0
ZShmYWNlLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdD
R0xlbnVtCiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShm
YWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xm
bG9hdCB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsx
NTAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2
YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyAr
MTUxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbAogICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAg
ICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0y
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsK
ICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAog
ICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2
MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXpl
ICUgMykpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyAr
MTU3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlm
b3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJh
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50
IHYxCiAgICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
IHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bgogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXku
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCwgR0NHTGludCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAzLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xp
bnQgdjIsIEdDR0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBH
Q0dMaW50IHYzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQog
ewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
CiAgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1N
YXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAg
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAg
ICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MTY3NSw3ICsxNjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRl
eEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAg
ICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZgogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxv
YXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBn
bDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgND4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cK
ICAgICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRl
eCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBH
Q0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNp
emUsCiAgICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1h
bGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTc3Myw3ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVy
dGV4QXR0cmliSVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
CiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE3OTQsNyArMTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTgwNiw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0
ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTE4MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGds
OjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4MjgsNyArMTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJv
b2xlYW4+CiAgICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNp
emUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0g
MDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAg
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xF
KHBuYW1lLCB2YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdD
R0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBu
YW1lKQorR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dM
ZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgpCiB7CiAgICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYs
NyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTg5MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBj
b25zdCBTdHJpbmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAg
VU5VU0VEX1BBUkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sCiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogCkBAIC0xOTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmko
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChz
aGFkZXIpOwogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTcz
LDEyICsxOTY3LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVk
SW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxh
dGZvcm1HTE9iamVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAg
IEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTk4Nyw3ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlv
biwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9n
cmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3
ICsyMDE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVp
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5k
YXRhKTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogCkBAIC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAg
IHJldHVybiBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CiB9CiAKLUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQg
aW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5k
ZXgsIEdDR0wKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAg
IHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICBy
ZXR1cm4gbzsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlUHJvZ3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVByb2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVh
dGVQcm9ncmFtKCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
ICAgIHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIw
ODMsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
aGFkZXIoR0NHTGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9
PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURF
Uik7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRleHR1cmUoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVh
dGVUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRl
bGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAg
ICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6
RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVy
KQogICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6
OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2
MSw3ICsyMTU1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LnJlbW92ZUFsbCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQg
dG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRv
CiAgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0
RXJyb3Igd2lsbCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50
aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zm9yY2VDb250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNl
Q29udGV4dExvc3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNw
YXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIy
MjMsNyArMjIxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0
ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIy
Niw3IEBAIEdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJ
bmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3Jt
QmxvY2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yMjUyLDcgKzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTAogCiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0
dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGds
OjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6
OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRRdWVyeU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogCiAvLyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVl
ZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5z
Zm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAg
ICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVk
YmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0
IHRyYW5zZm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xP
YmplY3QgdHJhbnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9y
bUZlZWRiYWNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1G
ZWVkYmFjaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MzM0LDcgKzIzMjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNm
b3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJh
bnNmb3JtRmVlZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1G
ZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2Rl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjM1MCw3ICsyMzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dM
ZW51bSBidWZmZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyhwcm9ncmFtLCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3Mu
ZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0g
MDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAg
Z2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZT
aXplKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBp
bmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsCiAgICAgZ2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNy
Y1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50
IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dM
Yml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNDAzLDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpC
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NH
TGludCBsYXllcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0
dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVM
YXllcih0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0
YXJnZXQsIGF0dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVi
dWZmZXIodGFyZ2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRC
dWZmZXIoR0NHTGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNy
Yyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlclRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIC0xOwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMK
ICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yNDc2LDcgKzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlm
b3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSwgR0NHTHVpbnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
NDg0LDcgKzI0NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3Jt
M3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYw
LCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dQogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gMiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCgh
KGRhdGEuYnVmU2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MjUxOCw3ICsyNTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9y
bTN1aXYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1CiAgICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSA2KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyAr
MjUzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgy
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgz
eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlv
biwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZT
aXplIC8gOCwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xl
YW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAg
ICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJh
bnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQo
IShkYXRhLmJ1ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yNTcyLDcgKzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlm
b3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRh
dGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDEyKSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyAr
MjU3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dM
dWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShp
bmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+
IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyAr
MjU5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0
aXYoaW5kZXgsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQg
eSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwg
R0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4
LCBHQ0dMdQogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMu
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1l
bnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50
IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcK
ICAgICBnbDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3Qg
R0NHTGVudW0+IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6
OkRyYXdCdWZmZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIs
IGRyYXdidWZmZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZh
bHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZm
ZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRo
LCBHQ0dMaW50IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsCiAgICAgZ2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3Rl
bmNpbCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
ICAgICBnbDo6RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJu
IGdsOjpJc1F1ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVl
KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
U2FtcGxlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0
ZVNhbXBsZXIoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAg
ICBnbDo6RGVsZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIp
CiAgICAgcmV0dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcy
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJp
KHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAK
LUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NH
TGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dM
c3luYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9u
LCBHQ0dMYml0ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZp
ZWxkIGZsYQogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQog
Ci1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5
bmMpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMg
c3luYykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMo
c3luYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NH
THN5bmMgc3luYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dM
c3luYyBzeW5jKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xz
eW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywg
R0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4
OSw3ICsyNzgzLDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdh
aXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNs
aWVudFdhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdz
LCBHQ0dMaW50NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5
bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
Nzk3LDcgKzI3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhH
Q0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3lu
YyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBw
bmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1G
ZWVkYmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVl
ZGJhY2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVk
YmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgyMyw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgzMSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6
QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0K
IAotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5p
Zm9ybU5hbWVzKQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRV
bmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB1bmlmb3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBw
YXJhbXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJs
b2NraXZSb2J1c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFt
cy5idWZTaXplLCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xzaXplaSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRp
RHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZp
cnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjg1OSw3ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVs
dGlEcmF3QXJyYXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291
bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJz
dHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBt
b2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBH
Q0dMc2l6ZWkgZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTCiAgICAgZ2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5k
YXRhLCBjb3VudHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
ODgwLDcgKzI4NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdF
bGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURy
YXdFbGVtZW50c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCks
IGRyYXdjb3VudCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9m
ZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3
Y291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjg5Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVs
dGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6
TXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwg
cG9pbnRlcnMuZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQog
ewogICAgIHNpemVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVD
b21wbGV0aW9uRmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKQEAgLTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVs
YXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVk
RXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1
cmUpIHsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29t
cGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVm
ZmVyKSwgaW1hZ2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RG
TW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZl
ci5jb250ZXh0KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAg
ICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRp
cGx5aW5nLCB3aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byBy
ZXN1bHRzID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1
bHRzICYmICFyZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1
bHRzLT5mb3JtYXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0
cy0+Zm9ybWF0KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAg
Ly8gRklYTUU6IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJv
d0J5dGVzIGFuZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXpl
ID0gcmVzdWx0cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6
ZS53aWR0aCgpICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRh
dGEoKTsKKyAgICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAx
KSAqIHJvd1N0cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChu
ZXcgdWludDhfdFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9w
ICs9IHJvd1N0cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5
KHRlbXAuZ2V0KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0
b20sIHRvcCwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCks
IHJvd1N0cmlkZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHNGb3JQYWludGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRlMzBiY2JjNDc3NDViYjhiNDIxNTI3YmZkMzQ5YmFkNjc3YmQwNjcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29z
aWEgeworY2xhc3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBI
b3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNz
IFBpeGVsQnVmZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBo
aWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7Cisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
OworICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGlj
IEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0
KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0
KTsKKyAgICBlbnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAg
ICAgLy8gUmVsZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRl
eHQsCisgICAgICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRl
LiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisg
ICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNh
bXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAg
dm9pZCBwcmVwYXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlv
biB3aXRob3V0IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAg
aW50IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2lu
ZyB0aHJvdWdoIEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdM
T2JqZWN0KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dz
IHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkg
ZmluYWw7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRp
b24oUGxhdGZvcm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkg
ZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCkgZmluYWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVu
ZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUs
IEdDR0xjbGFtcGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51
bSBtb2RlKSBmaW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBt
b2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdD
R0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRG
dW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNy
Y0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAg
dm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEsIEdDR0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEpIGZpbmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVu
dW0gdGFyZ2V0KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4s
IEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVh
ckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdD
R0xpbnQgcykgZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dM
Ym9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFs
OworICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0g
bW9kZSkgZmluYWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7Cisg
ICAgdm9pZCBkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0
aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9p
ZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7
CisgICAgdm9pZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0Fy
cmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFs
OworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxl
KEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lk
IGZsdXNoKCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dM
ZW51bSB0YXJnZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBi
b29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7Cisg
ICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSog
Y291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmli
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAg
ICB2b2lkIGdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4g
dmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZp
bmFsOworICAgIHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxv
YXQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBw
bmFtZSkgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5n
IGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJp
KFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0
U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5h
bDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIFN0cmluZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0
IGdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CisgICAgR0NHTGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7
CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRV
bmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTHVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdD
R0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBt
b2RlKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBm
aW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAg
IEdDR0xib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVh
biBpc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgo
R0NHTGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qp
IGZpbmFsOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pIGZpbmFsOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCByZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUs
IEdDR0xib29sZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAg
IHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFs
OworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1
aW50IG1hc2spIGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7Cisg
ICAgdm9pZCBzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAg
dm9pZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAg
dm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwg
R0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVs
cykgZmluYWw7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
aW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgp
IGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gdikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGludCB4LCBHQ0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2
b2lkIHVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJv
Z3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NH
THVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NH
TGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBH
Q0dMZmxvYXQgeikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHks
IEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmlu
YWw7CisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdD
R0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
c29yKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmlu
YWw7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICBHQ0dMYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZv
aWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVU
YXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NH
THNpemVpcHRyKSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdD
R0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAs
IEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51
bSBmaWx0ZXIpIGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0
ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0
dGFjaG1lbnRzKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7
CisgICAgdm9pZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXpl
aSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5h
bDsKKyAgICB2b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9p
ZCB0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNl
dCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRy
IG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dM
aW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNz
ZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmlu
YWw7CisgICAgR0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZp
bmFsOworICAgIHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3Vp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAg
ICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCB1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwg
R0NHTGludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBH
Q0dMdWludCB6LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2
KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1
aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdi
dWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xm
bG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVF1ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2Jq
ZWN0IHF1ZXJ5KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmpl
Y3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0g
dGFyZ2V0KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0
dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2Ft
cGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlz
U2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNh
bXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAg
ICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRl
cmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBh
cmFtKSBmaW5hbDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRT
YW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
KSBmaW5hbDsKKyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dM
Yml0ZmllbGQgZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykg
ZmluYWw7CisgICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51
bSBjbGllbnRXYWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0
IHRpbWVvdXQpIGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVs
ZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2ko
R0NHTHN5bmMsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1Ry
YW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmlu
ZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkg
ZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2
ZU1vZGUpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAg
ICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lk
IHBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9y
bUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAg
dm9pZCBiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZp
bmFsOworICAgIFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsK
KyAgICBWZWN0b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsK
KyAgICBTdHJpbmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9p
ZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykg
ZmluYWw7CisgICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRl
OworICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBtdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRz
LCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZUJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZm
ZXIoKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsK
KyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdl
dEV4dGVuc2lvbnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsK
KyAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZp
bmFsOworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisgICAgdm9p
ZCBwcmVwYXJlRm9yRGlzcGxheSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBmb3JjZUNvbnRleHRM
b3N0KCk7CisgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOworICAgIHZvaWQgZGlzcGF0Y2hDb250
ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CisjZW5kaWYK
KyAgICB1bnNpZ25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKTsKKworICAgIGNvbnN0
ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVG
QVVMVF9ESVNQTEFZOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNvbnN0ZXhwciBzdGF0aWMg
RUdMTmF0aXZlRGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZl
RGlzcGxheVR5cGUsIC0xKTsKKyAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlU
eXBlIGhpZ2hQZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlw
ZSwgLTIpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xF
KEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxs
IHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAg
ICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5z
aW9uc0dMIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50
IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKKyAgICAv
LyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGlj
aCBjb3VsZCBvcgorICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBh
YmlsaXRpZXMgb2YgdGhlIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQg
dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKTsKKyAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgdm9pZCByZWFkblBp
eGVsc0ltcGwoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpKiBsZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dz
LCBHQ0dMdm9pZCogZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCk7CisKKyAg
ICAvLyBEaWQgdGhlIG1vc3QgcmVjZW50IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUg
aW4gYW4gYWNjZXB0YWJsZSBzdGF0ZT8KKyAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsK
KworICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcHJlcGFy
ZVRleHR1cmVJbXBsKCk7CisgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsKKyAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3Rl
bmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CisgICAg
c3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXks
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOworI2VuZGlmCisgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgorICAgIGJvb2wgd2Fp
dEFuZFVwZGF0ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gUGxh
dGZvcm0gc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICBzdGF0
aWMgdm9pZCBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKKworICAgIEdDR0x1aW50
IG1fdGV4dHVyZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKKyAgICBHQ0dMdWlu
dCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsQ29s
b3JGb3JtYXQgeyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCB7IDAgfTsKKyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OworICAgIEdDR0x1
aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OworICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdp
bmdCdWZmZXI6dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCisgICAgR0NHTHVpbnQgbV9wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIHsgMCB9OworICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVy
ZSB3aGVuIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KKyAgICBH
Q0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKKyAgICAvLyBRdWVyaWVk
IGF0IGRpc3BsYXkgc3RhcnR1cC4KKyAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRh
cmdldCB7IC0xIH07CisgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigp
LgorICAgIExpc3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKyAgICBib29s
IG1faXNGb3JXZWJHTDIgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3Vu
dCB7IDAgfTsKKyAgICBib29sIG1fZmFpbE5leHRTdGF0dXNDaGVjayB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3VzZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKKyAgICBzaXplX3QgbV9v
bGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKKyAgICBTY29wZWRHTEZlbmNlIG1fZnJh
bWVDb21wbGV0aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOworICAgIEdyYXBoaWNzQ29udGV4
dEdMU3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+
IG1fZXh0ZW5zaW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIEdyYXBoaWNzQ29udGV4
dEdMSU9TdXJmYWNlU3dhcENoYWluIG1fc3dhcENoYWluOworICAgIEVHTERpc3BsYXkgbV9kaXNw
bGF5T2JqIHsgbnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0T2JqIHsgbnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcg
bV9jb25maWdPYmogeyBudWxscHRyIH07CisgICAgLy8gQmFja2luZyBzdG9yZSBmb3IgdGhlIHRo
ZSBidWZmZXIgd2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5LgorICAgIC8vIFdo
ZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3aW5nIGJ1
ZmZlciBiYWNraW5nIHN0b3JlLgorICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09
IHRydWUsIHRoaXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7CisgICAgdm9p
ZCogbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24g
eyBmYWxzZSB9OworICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9oaWdoUGVy
Zm9ybWFuY2VHUFVSZXF1ZXN0OworI2VuZGlmCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorICAgIEdDR0x1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisgICAgR0NHTHVpbnQg
bV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsgMCB9OworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisg
ICAgc3RkOjp1bmlxdWVfcHRyPE5pY29zaWE6OkdDR0xMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Cisj
ZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKKyNlbmRpZgorCisgICAgZnJpZW5k
IGNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOworI2lmIFVTRShOSUNPU0lBKQorICAgIGZyaWVuZCBj
bGFzcyBOaWNvc2lhOjpHQ0dMTGF5ZXI7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAg
ZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyNlbmRpZgorfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXggY2Nj
YjU3MjRhNGNkOTJmZjBiZjhlNzM4M2M1ZDlmZTY4OWQ3N2I4Ni4uNGQ1OWNiMTJjNWU0NDc1Mzdk
ZTBhZWUyMTBkZTAwMmNiZDc5ZmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5j
cHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0
ZXMsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50
VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0
QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVCghcGl4ZWxC
dWZmZXIuc2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAppbmRleCBmNzlmMjJlMzEzZWExMTczODljNWY0MDlkZDBmNDk0
YWUxNWFlYjkzLi5hZjRjMTdkNTFmYTU5ZjQ2ODhkZjQzOTY1MzUxOGY1Y2EwZGFhZjIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3Vy
Y2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50
U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBj
b25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAg
ICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFz
U2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKaW5kZXggMjU1NWZm
MDgzMjhlMzQ2OWNkN2E0YTI5N2RiZWY3OTBmNjMwNTI4OC4uZTQwOTVhMmIxOWUyNGQxZGI4MDlj
MTgyZjY0MzJiZGMwY2I3ODZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApAQCAt
MjcsMTIgKzI3LDE4IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIK
ICNpbmNsdWRlICJJT1N1cmZhY2UuaCIKIAorI2lmIEVOQUJMRShWSURFTykKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTsKK30KKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgeworY2xhc3MgV0VCQ09S
RV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRH
TEFOR0xFIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMQ29j
b2E+IGNyZWF0ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAg
fkdyYXBoaWNzQ29udGV4dEdMQ29jb2EoKTsKQEAgLTQ5LDE0ICs1NSwyNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwog
I2VuZGlmCiAKLSAgICAvLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBvdmVycmlkZXMuCisgICAg
Ly8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICBi
b29sIGNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgYm9vbCBmbGlwWSkgZmluYWw7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
R3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOworI2VuZGlmCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3Vs
dHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBo
aWNzQ29udGV4dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYp
OwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3
MmM3N2VjYjIxOWUzOS4uMDI5Y2MzZmFlNDdmODcwMjNjNWMzMDIyNWUwMjU5YTA0MWYwZDY2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5k
aWYKIAogI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxh
dGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJs
ZSgpID09IHRydWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJl
YWRlZCBtYW5uZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxz
ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1
dCBhbHdheXMgc2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIg
YW5kIG51bGxwdHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUqIGN1cnJlbnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGlj
dGFibGUoKQogewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxp
emVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAg
ICAgfQogCiAgICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNr
ZW5kLiIsIGF0dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRp
dmVEaXNwbGF5VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
ZmF1bHREaXNwbGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNl
TWV0YWwpIHsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9Q
TEFURk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0
YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAg
ICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0Vf
QU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9X
RVJfQU5HTEUpOwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpsb3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYg
KHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJl
ZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRl
cy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxh
eUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5h
dGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlz
cGxheTsKKyAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpoaWdoUGVyZm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFw
aGljc0NvbnRleHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xB
TkdMRShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVu
Y3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29h
IHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJz
KQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRy
cykKIHsKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVu
c2lvbik7CiAgICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0g
ICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRo
cm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkg
b24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3Rz
IGFyZSBub3Qgc2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVy
cywgc28KICAgICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0
bGluZy4gT3BlbkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21l
IHNvcnQgb2YgaW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAot
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIs
IHRoaXMpOworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
ICglcCkuIiwgdGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVu
dCgpKSB7CkBAIC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAh
PSB0aGlzKTsKICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9H
KFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlz
KTsKKyAgICBMT0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICgl
cCkuIiwgdGhpcyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgp
IGNvbnN0CkBAIC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6
OmlzVmFsaWQoKSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRm
b3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXND
aGVjaykgewogICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0
ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRT
dGF0dXMgPSAwOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0
VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIGlmICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUy
MCw3ICs1MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIGlmIChtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcg
KzUyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQoKQogICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5n
KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNr
aW5nKCkKIHsKICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0
eSgpKTsKICAgICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxs
b2NhdGluZyBhIG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVz
c3VyZS4KQEAgLTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAg
ICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBh
dXRvIGJhY2tpbmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoKQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShi
YWNraW5nKSwgcGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5n
LCB2b2lkKiBwYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCog
cGJ1ZmZlcikKIHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJp
bmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4
dHVyZVRhcmdldCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNU
QU5HTEVfQVJCKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtl
Q3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VS
RkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNo
bWVudFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwg
R0NHTHVpbnQgcGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewog
ICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19j
YXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2
NywyNCArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZh
Y2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1faXNGb3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNp
bXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsK
LSAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdl
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdl
cigpLmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJl
KSB7Ci0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JE
aXNwbGF5KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXko
KQogewogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0
LDE1ICs3MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRp
c3BsYXkoKQogCiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGlj
c0NvbnRleHRHTENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1f
Y3YuZ2V0KCk7CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHMoKQogewogICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVm
ZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIu
aGFuZGxlKQpAQCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxN
ZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvTWVkaWFTYW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFp
bi5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRp
c3BsYXlCdWZmZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZv
cm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3Jt
RwogfQogI2VuZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZp
ZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdP
Ymo7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxF
KFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRl
ICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSA8cGFsL3NwaS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi9TY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNp
bmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0
dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNp
emU7IgotICAgICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBp
bnQgdV9mbGlwWTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4o
KSIKLSAgICAieyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAx
LjApOyIKLSAgICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41
ICsgLjU7IgotICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFs
aXplZFBvc2l0aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2
X3lUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2
VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19Owot
Ci1zdGF0aWMgY29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
IHsKLSAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1
X3lUZXh0dXJlU2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29y
ZGluYXRlOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAg
InZvaWQgbWFpbigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9z
aXRpb24sIDAsIDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bv
c2l0aW9uICogLjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAg
ICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIK
LSAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95
VGV4dHVyZVNpemU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXpl
ZFBvc2l0aW9uICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHBy
IGF1dG8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVu
aWZvcm0gc2FtcGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JN
YXRyaXg7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2
YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0g
ICAgInsiCi0gICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1
X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0
ZXh0dXJlMkQodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIg
ICAgeXV2LmEgPSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1h
dHJpeDsiCi0gICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdt
ZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3Jt
IHNhbXBsZXIyRFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1h
dHJpeDsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZh
cnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAg
ICAieyIKLSAgICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVj
dCh1X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2Ig
PSB0ZXh0dXJlMkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIK
LSAgICAiICAgIHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVf
Y29sb3JNYXRyaXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2Ugewot
ICAgIFVua25vd24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJh
bnNmZXJGdW5jdGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBr
SVRVX1JfNjAxXzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQ
M19ENjUsCi0gICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJh
bmdlRnJvbVBpeGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBp
eGVsRm9ybWF0KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4Ogot
ICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhB
VkUoQ09SRVZJREVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlm
Ci0gICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
X0FSR0IyMTAxMDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBD
YkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZ
cENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0
NFlwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NF
RF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxS
YW5nZTo6RnVsbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5r
bm93bjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5j
dGlvbkZyb21TdHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQot
ICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAg
ICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENG
RXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkp
Ci0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0g
ICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1Az
KCkgJiYgQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkK
LSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2Fu
TG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVW
aWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0
cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0
dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVy
RnVuY3Rpb25DVjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAg
ICAgR0xmbG9hdCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxv
YXQgY2I7Ci0gICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07
Ci0KLSAgICBjb25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZs
b2F0IGIpCi0gICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkK
LSAgICAgICAgOiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAg
IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xm
bG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0K
LX07Ci0KLXN0cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBibGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRD
b2xvciB3aGl0ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xv
ciByZWQgICAgIHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBn
cmVlbiAgIHswLCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVl
ICAgIHswLCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAg
IHswLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsx
LCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAx
LCAwfTsKLX07Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0
XVs0XTsKLQotICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNi
Q29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25z
dCBHTGZsb2F0KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0g
ICAgfQotCi0gICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9h
dENvbG9yJikgY29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4
KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZm
aWNpZW50KQotICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlD
YkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiAr
IEtnICogRyArIEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0g
ICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFs
dWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlz
IGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0
aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6
Ci0gICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAq
ICgxIC0gS2IpKSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtn
KSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8g
V2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBb
MTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEg
cmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZh
bHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFu
Z2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2Vm
ZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0
IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5m
IC8gMjE5LmY7Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVs
UmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlT
Y2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNy
U2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10g
PSAwOwotCi0gICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0g
PSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZm
aWNpZW50IC8gY2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZm
aWNpZW50KTsKLSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGlu
Z0ZhY3RvcjsKLSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBj
YkNvZWZmaWNpZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsK
LQotICAgIHJvd3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11b
Ml0gPSAwOwotICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5h
bCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4
XQotICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0
byBbMTYsIDI0MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7
ICsrcm93TnVtYmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAg
ICAgICAgYXV0byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAg
ICAgYXV0byYgeiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAg
ICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJh
bmdlOjpWaWRlbykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQot
Y29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxv
YXRDb2xvciYgY29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAg
ICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsg
cm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVsw
XSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAq
IGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJn
Yi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5i
ICsgcm93c1syXVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRv
UkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRy
YW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9
IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1h
dHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20g
dGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAg
Ly8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0
YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4x
MTRmLCAwLjI5OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxs
TWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAx
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwg
MCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
eWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRy
aWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2
IDIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJU
LjcwOS0yLTE5OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5Vmlk
ZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25z
dGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVs
bCwgMC4wNzIyLCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwg
MjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAg
IDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQs
IDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRh
LCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFn
ZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBm
dWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTks
ICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAg
ICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIu
NzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRo
ZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8v
IGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAu
MDU5MywgMC4yNjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAx
MjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxh
Y2sgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIw
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVu
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMx
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2Vu
dGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwg
MCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0g
ICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01Q
VEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVl
Lm9yZy9kb2N1bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXgg
c21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07
Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQw
TVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNN
UFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0
MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVs
bG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNv
bG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRl
MjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwg
IDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJl
ZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJT
TVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAx
LCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpj
eWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsK
LSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8s
IFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAg
ICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJh
bnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAg
IG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1h
dHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVu
Y3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlv
bkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMu
Z2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNW
OjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQo
KS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjpr
U01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQot
ICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQg
d2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxS
YW5nZTo6VW5rbm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0g
ICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBt
YXRyaWNlcy5nZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8g
QXNzdW1lIHVua25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRl
cmF0b3IgPT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmlj
ZXMuZ2V0KCkuZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7
Ci0KLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJl
dHVybiBpdGVyYXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4
dCkgfTsKLSAgICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rl
c3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFOjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmIG93bmVyKQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0
aWJsZSBjb250ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBk
b2VzIG5vdAotICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5Lgot
ICAgIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09O
VEVYVF9DTElFTlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAy
LAotICAgICAgICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUs
Ci0gICAgICAgIEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19F
TkFCTEVEX0FOR0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJ
TkRfR0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAg
ICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0
Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25m
aWcoKTsKLSAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5
LCBjb25maWcsIG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlm
IChjb250ZXh0ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAg
YXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRl
eHQpOwotICAgIH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQp
IHsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9y
ZWN0YW5nbGUiKTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3Rl
eHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBH
TF9OT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdM
aW50IHZlcnRleFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0g
ICAgR0xpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUik7Ci0gICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAg
IGF1dG8gcHJvZ3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyLCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4
U2hhZGVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAg
ICAgIGdsOjpEZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNl
IGFyZSB3cml0dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQg
dnNMZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5n
dGgoKSA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBH
TGludCBmc0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
MkQubGVuZ3RoKCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgo
KTsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBz
X3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUy
RCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4
dHVyZVJlY3RhbmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAm
dmVydGV4U2hhZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJh
Z21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBn
bDo6Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNo
YWRlcik7Ci0gICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2w6OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlz
IGNoZWNrZWQgYWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24g
YmVuZWZpdC4KLQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5C
dWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVs
ZXRlQnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0
aWNlc1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsK
LSAgICBnbDo6QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0
aWNlcywgR0xfU1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAg
ICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1
ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGlu
dCBzdGF0dXMgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFt
LCBHTF9MSU5LX1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMp
IHsKLSAgICAgICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZS
b2J1c3RBTkdMRSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAm
dnNTdGF0dXMpOwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRT
aGFkZXJpdlJvYnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwg
bnVsbHB0ciwgJmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFKCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIs
IHRoaXMsIHN0YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjb250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xl
YW51cC5yZWxlYXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBt
X2Rpc3BsYXkgPSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25m
aWcgPSBjb25maWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0g
ICAgbV9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7
Ci0gICAgbV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9u
KHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4
Iik7Ci0gICAgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRp
b24oeXV2UHJvZ3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2Nh
dGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXpl
Iik7Ci0gICAgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1M
b2NhdGlvbih5dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlv
bkF0dHJpYnV0ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJh
X3Bvc2l0aW9uIik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdo
aWxlIHRoZSBwcm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0o
eXV2UHJvZ3JhbSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRp
b25BdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQ
b3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAg
IGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2Us
IFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQy
MGYnIHBpeGVsIGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3Jt
YXRzLgotICAgIE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1h
dFR5cGUoaW1hZ2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVf
NDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShD
T1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVs
Rm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9S
YW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZv
cm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJl
ZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFz
dXJmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVk
ID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0Rmxp
cFkKLSAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1
cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7
Ci0gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRo
ZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhp
cyBpcyBhIG5vLW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2Nv
bnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXks
IG1fY29udGV4dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9
IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4
ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmlu
aXRpYWxpemVkIGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAv
LyBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xf
VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUs
IG51bGxwdHIpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0g
ICAgfSk7Ci0gICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0g
ICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBn
bDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0
YXR1cyA9IGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBp
ZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1
cmUuIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0
ZXh0dXJlcyBmb3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9T
dXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0
ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxh
bmVXaWR0aCA9IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRv
IHV2UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwot
Ci0gICAgR0xlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5U
ZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtl
U2NvcGVFeGl0KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1
dlRleHR1cmUpOwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsK
LSAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3Jl
OjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZp
ZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1
dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEp
OwotICAgIGlmICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2
SGFuZGxlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFu
ZGxlXSB7Ci0gICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNl
KGRpc3BsYXksIHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7
Ci0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNs
ZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4
dHVyZXMoMSwgJnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9
IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2Nv
bmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwg
R0xfUkVELCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJm
YWNlLCAwKTsKLSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBh
dXRvIHlIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwg
eUhhbmRsZV0gewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNw
bGF5LCB5SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBw
YXJhbWV0ZXJzLgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwg
MCk7Ci0gICAgZ2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0g
ICAgZ2w6OlVuaWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlw
WTo6WWVzID8gMSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYo
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWln
aHQpOwotCi0gICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxG
b3JtYXQpOwotICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9t
U3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50
KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBj
b2xvck1hdHJpeCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24o
cmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29s
b3JNYXRyaXhVbmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAg
ICAvLyBEbyB0aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5H
TEVTLCAwLCA2KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1
cmZhY2VTZWVkID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91
dHB1dFRleHR1cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1f
bGFzdEZsaXBZID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
QU5HTEUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQz
MDFmMTI1MWI3MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5o
IgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0v
LyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9m
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBp
bnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5H
TEUgQ29jb2EuCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUo
Q1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBGbGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4
dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RU
ZXh0dXJlU2VlZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmIG1fb3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9k
aXNwbGF5IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9j
b25maWcgeyBudWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIg
eyAwIH07Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAg
ICBHQ0dMaW50IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQg
bV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlw
WVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2Nh
dGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7
IC0xIH07Ci0gICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9
OwotCi0gICAgRmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2lu
dGVyPElPU3VyZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJm
YWNlU2VlZCB7IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dM
dWludCwgdW5zaWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVy
ZVNlZWQ7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBo
aWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJ
T04pCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckND
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVy
ZTJEIHsKKyAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVj
MiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7Igor
ICAgICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVD
b29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZvaWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFf
cG9zaXRpb24sIDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBh
X3Bvc2l0aW9uICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAi
ICAgICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55
OyIKKyAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIK
KyAgICAiICAgIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisg
ICAgIn0iX3MKK307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRl
eHR1cmVSZWN0YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAi
dW5pZm9ybSB2ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIg
dl95VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29y
ZGluYXRlOyIKKyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlv
biA9IHZlYzQoYV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQ
b3NpdGlvbiA9IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09
IDEpIgorICAgICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXpl
ZFBvc2l0aW9uLnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVk
UG9zaXRpb24gKiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5h
dGUgPSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9
OworCitjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0
dXJlOyIKKyAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3Jt
IG1hdDQgdV9jb2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRp
bmF0ZTsiCisgICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2
b2lkIG1haW4oKSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5y
ID0gdGV4dHVyZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAi
ICAgIHl1di5nYiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRl
KS5yZzsiCisgICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5
dXYgKiB1X2NvbG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBh
dXRvIHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsi
CisgICAgInVuaWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0g
bWF0NCB1X2NvbG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGlu
YXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZv
aWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIg
PSB0ZXh0dXJlMkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAg
ICAiICAgIHl1di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29v
cmRpbmF0ZSkucmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0Nv
bG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3Mg
UGl4ZWxSYW5nZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKwor
ZW51bSBjbGFzcyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9S
XzcwOV8yLAorICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtE
Q0lfUDMsCisgICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhl
bFJhbmdlIHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQorewor
ICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
NDQ0QVlwQ2JDcjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoK
KyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAg
IGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisg
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFu
Z2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVv
UmFuZ2U6CisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMp
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVv
UmFuZ2U6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVW
SURFT19DT01QUkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25D
ViB0cmFuc2ZlckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAg
aWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247
CisgICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9S
XzcwOV8yKSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8y
OworICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVf
Ul82MDFfNCkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFf
NDsKKyAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01Q
VEVfMjQwTV8xOTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRF
XzI0ME1fMTk5NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9EQ0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1h
dHJpeF9EQ0lfUDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1Az
OworICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1Az
X0Q2NSgpICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2
NSkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYg
KGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgp
ICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAp
KQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENv
bG9yIHsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0
IHI7CisgICAgICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAg
ICAgIH0gcmdiOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAg
ICAgICAgICAgR0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0g
eWNiY3I7CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBH
TGZsb2F0IGcsIEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7Cisg
ICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBH
TGZsb2F0IHNjYWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8g
c2NhbGUgfQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJz
KEdMZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVl
IDogLXZhbHVlOworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVx
dWFsVG8oY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4
RGVsdGEpOworICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25z
dGV4cHIgR0xmbG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHTGZsb2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR0xmbG9hdENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JN
YXRyaXggeworICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1h
dHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmlj
aWVudCk7CisKKyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRD
b2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4
cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JD
b2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAg
ICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhl
IGZvcm06CisgICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0g
KEIgLSBZKSAvICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAt
IEtyKSkKKyAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBp
biBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0g
MQorICAgIC8vCisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBh
bmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3Ip
KSAqIENyCisgICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkg
LSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3Ig
LyBLZykgKiBDcgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRl
byByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwg
YW5kIENiICYgQ3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0
aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFu
ZCBDciBhbGwgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9m
IDI1Ni4KKworICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0g
Y3JDb2VmZmljaWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4
ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2Nh
bGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIy
NC5mOworCisgICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0g
PSAwOworICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29l
ZmZpY2llbnQpOworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2Fs
aW5nRmFjdG9yOworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEg
LSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAg
cm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
ICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsK
KworICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2Jj
clNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJd
ID0gMDsKKyAgICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJv
d3NbM11bMV0gPSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOwor
CisgICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252
ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2Yg
dmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJv
d051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8m
IHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAg
ICAgYXV0byYgeSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAg
YXV0byYgdyA9IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Cisg
ICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0g
eCAqIDE2IC8gMjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1h
dHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEdMZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsg
cm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93
c1swXVszXSwKKyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAq
IGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAg
ICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5n
ICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0
YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1
bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0
aW9uKQoreworICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0
IFlDYkNyTWF0cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBt
YXRyaWNlczsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8v
IE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYw
MSByZXYgNCBzcGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1S
RUMtQlQuNjAxCisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRy
aXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIg
c3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4x
MTRmLCAwLjI5OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1
LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
ci42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUw
LCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fz
c2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1
LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAx
NzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFu
LCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21w
b25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBz
Oi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywg
MC4wNzIyLCAwLjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEu
NWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChy
NzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDEx
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAx
LjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisK
KyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNr
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJs
YWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41
ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIz
NywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBH
TGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBN
YXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4y
MDIwLTIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVD
LUJULjIwMjAKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0
cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwg
MC4wNTkzLCAwLjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4
ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQs
ICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpy
ZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAx
NiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxs
b3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsK
KworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwg
ICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAx
MSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAv
IDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgY3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJv
bSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAg
ICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNv
bnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJh
bmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1h
dHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEy
IH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYy
LCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAx
MTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Ymx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICog
R0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRh
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
Ojp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3Jl
ZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21w
dGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3
NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUg
MjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRp
c3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFj
ZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYw
MV80KSwgcjYwMVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShN
YXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQp
LCByNjAxRnVsbE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5
KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3
MDlWaWRlb01hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBp
eGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1
bGxNYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVv
TWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5n
ZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRy
aXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpW
aWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlk
ZW9NYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0
ME1GdWxsTWF0cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tl
ZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4K
KyAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdl
ID09IFBpeGVsUmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVs
bDsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5j
dGlvbnMgYXJlIHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQo
KSkKKyAgICAgICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1hdHJpY2VzLmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBH
cmFwaGljc0NvbnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRl
eHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBp
ZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9k
aXNwbGF5LCBtX2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJm1feXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZtX2ZyYW1lYnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2Nv
bnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYShHcmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3du
ZXIpCit7CisgICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0
ZSB3aXRoIG93bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5l
c3Mgb3IgV2ViR0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAg
IG93bmVyLm1faXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdM
X0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAg
IEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZB
TFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlV
TSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdM
RGlzcGxheSBkaXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmln
IGNvbmZpZyA9IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0
ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmos
IGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50
KGRpc3BsYXksIGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6bWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVz
dHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29s
IHVzZVRleHR1cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBH
TF9URVhUVVJFXzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlT
VCkKKyAgICBpZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVz
dEV4dGVuc2lvbkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAg
ICAgaWYgKGdsOjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNo
YWRlcihHTF9WRVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpD
cmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9
IGdsOjpDcmVhdGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAg
ICAgZ2w6OkRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgfSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJl
IGNvbXBpbGUtdGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
VmVydGV4U2hhZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8g
c195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRl
clNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195
dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUy
RCA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRl
clNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7
CisgICAgZ2w6OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVy
U291cmNlLCAmZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7
CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hT
aGFkZXIoeXV2UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1
dlByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgLy8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0
aWNhbCBwYXJhbGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRl
eEJ1ZmZlciA9IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7Cisg
ICAgYXV0byB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4
QnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIp
OworICAgIH0pOworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwg
MSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgeXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZG
RVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBH
THVpbnQgZnJhbWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1l
YnVmZmVyKTsKKyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Zy
YW1lYnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVm
ZmVyKTsKKyAgICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dy
YW1pdlJvYnVzdEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAm
c3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7
CisgICAgICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09N
UElMRV9TVEFUVVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3Rh
dHVzID0gMDsKKyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFk
ZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFp
bGVkIHRvIGxpbms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0
dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2Uo
KTsKKyAgICB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZl
ckNsZWFudXAucmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250
ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1
ZmZlciA9IHl1dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7
CisgICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7Cisg
ICAgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0
aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAg
IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVy
ZVNpemUiKTsKKyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0
cmliTG9jYXRpb24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlz
IGRlbGV0ZWQgYnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGlu
IHVzZS4KKyAgICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6
VmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdM
X0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1
cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJl
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgRmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9u
bHkgc3VwcG9ydHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUg
c3VwcG9ydGluZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0g
Q1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9y
bWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8v
IE5PTElOVAorICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9Q
SVhFTF9GT1JNQVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhl
bEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxS
YW5nZQorI2VuZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBB
c2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywg
Rm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1
ZmZlckdldElPU3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChz
dXJmYWNlKTsKKyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFj
ZSA9PSBtX2xhc3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1
cmZhY2VTZWVkCisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBt
X293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0
ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVk
IHRvIGl0LCBhbmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNp
bmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRo
KGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFn
ZSk7CisKKyAgICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBU
aGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBl
YXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVy
cm9yIGlzIG5vdCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFr
ZVNjb3BlRXhpdChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQs
IHR5cGVdIHsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRl
eHR1cmUpOworICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGds
OjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0
ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUy
RChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91
dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRv
IGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCk7CisKKyAgICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8g
c291cmNlLgorICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUo
c3VyZmFjZSwgMCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRP
ZlBsYW5lKHN1cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3Vy
ZmFjZUdldEhlaWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0
dXJlVGFyZ2V0ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAg
R0x1aW50IHV2VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OworICAgIGF1dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0g
eworICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7Cisg
ICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2
aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRh
Y2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xf
SU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhl
aWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNj
b3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29y
ZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOwor
ICAgIH0pOworCisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMo
MSwgJnlUZXh0dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQo
W3lUZXh0dXJlXSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOwor
ICAgIH0pOworICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6Qmlu
ZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZl
ckFuZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJn
ZXQsIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5
UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhh
bmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRl
c3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0p
OworCisgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVu
aWZvcm0xaShtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFp
KG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2
RmxpcFlVbmlmb3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAg
Z2w6OlVuaWZvcm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgs
IHlQbGFuZUhlaWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdl
ID0gcGl4ZWxSYW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFu
c2ZlckZ1bmN0aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0
PENGU3RyaW5nUmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JH
Qk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlv
bik7CisgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biwgMSwgR0xfRkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJh
d2luZy4KKyAgICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9s
YXN0U3VyZmFjZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNl
U2VlZDsKKyAgICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50
ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAg
ICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0
ZTM5NjBiNmQ3MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx3dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHcmFwaGljc0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxl
bWVudGF0aW9uIGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBw
YXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENv
Y29hLgorY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZD
b2NvYSgpIGZpbmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBGbGlwWSkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
KEdyYXBoaWNzQ29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2Vl
ZChHQ0dMdWludCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVT
ZWVkLmdldCh0ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBt
X293bmVyOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7
IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51
bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsg
bnVsbHB0ciB9OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9Owor
ICAgIFBsYXRmb3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGlu
dCBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3Jt
TG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biB7IC0xIH07CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAt
MSB9OworICAgIEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9Owor
ICAgIEdDR0xpbnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAg
IEZsaXBZIG1fbGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1
cmZhY2VSZWY+IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQg
eyAwIH07CisKKyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVu
c2lnbmVkLCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOwor
fTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCmlu
ZGV4IGI4MzJhMTg2YTQyYzhiZTMyMmE0YzcwODFmNzVkY2Q0OTBjMjdmODguLjU5M2VkNDRmODBj
OGU4MzEwN2NiYzIyZTZlZWM5YjY1ODc3YTJhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwyMiArMjMsMzA5
OCBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBF
TkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIK
KyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNp
bmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgorI2lu
Y2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8
d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lv
bnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBv
eHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1z
LmgiCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJPcGVu
R0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0UoTklDT1NJQSkKKyNpZiBVU0UoQU5HTEUpCisj
aW5jbHVkZSAiTmljb3NpYUdDR0xBTkdMRUxheWVyLmgiCisjZWxzZQorI2luY2x1ZGUgIk5pY29z
aWFHQ0dMTGF5ZXIuaCIKKyNlbmRpZgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
c3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlcigpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwor
ICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWROYW1lSGFz
aDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBzaGFyZWROYW1l
SGFzaCA9IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OworICAgIH0pOworCisg
ICAgcmV0dXJuICpzaGFyZWROYW1lSGFzaDsKK30KKworc3RhdGljIHZvaWQgc2V0Q3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkKK3sKKyAg
ICAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFzaDsKK30K
KworLy8gSGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2NvbXBpbGVy
IHRvIGRvCisvLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBt
ZXRob2QsIGJlZm9yZQorLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXIKKy8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0aGUgY3Vy
cmVudCBpbnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KKworc3RhdGljIHVpbnQ2
NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmluZyBuYW1l
QXNDU3RyaW5nID0gQ1N0cmluZyhuYW1lKTsKKworICAgIC8vIExvb2sgdXAgbmFtZSBpbiBvdXIg
bG9jYWwgbWFwLgorICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyID0gKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOworICAgIFNoYWRlck5hbWVI
YXNoOjppdGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5m
aW5kKG5hbWVBc0NTdHJpbmcpOworICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlci0+ZW5kKCkpCisgICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZTsK
KworICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOworCisgICAg
Ly8gQ29udmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8gYSA2NC1i
aXQgcmVzdWx0CisgICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUgb2Ygb3Vy
IHRhYmxlLiBPdmVyZmxvdyB3b3VsZAorICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlmIHdlJ3Jl
IGFscmVhZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCisgICAgLy8gd2UncmUgaG9w
aW5nIHRoYXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKKyAgICAvLyBkb24n
dCBoYXZlIHRoYXQgbWFueSBzeW1ib2xzKS4KKworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGhhc2hW
YWx1ZTsKKyAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXItPnNpemUoKSArIDEpOworCisgICAgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVy
LT5zZXQobmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChh
dHRyaWJ1dGVzKQoreworI2lmIFVTRShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gbWFr
ZVVuaXF1ZTxOaWNvc2lhOjpHQ0dMTGF5ZXI+KCp0aGlzKTsKKyNlbHNlCisgICAgbV90ZXhtYXBM
YXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7
CisjZW5kaWYKKworICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0
ZXMoKTsKKyAgICBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkg
aGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9uLgorCisgICAgLy8gQ3JlYXRlIGEgdGV4dHVy
ZSB0byByZW5kZXIgaW50by4KKyAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Cisg
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworICAgIC8vIENyZWF0
ZSBhbiBGQk8uCisgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1
cmUpOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRp
YXRlVGV4dHVyZSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faW50ZXJt
ZWRpYXRlVGV4dHVyZSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6Omds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIDApOworI2VuZGlmCisKKyAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8u
CisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEdlbkZyYW1l
YnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX3N0YXRlLmJv
dW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAg
ICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAg
ICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisg
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91
bmRSZWFkRkJPID0gbV9mYm87CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgaWYgKGF0dHJp
YnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhC
dWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAgIGlm
IChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGds
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKworI2lm
ICFVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRf
U0laRSk7CisKKyAgICBpZiAoR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjAp
IHsKKyAgICAgICAgbV91c2luZ0NvcmVQcm9maWxlID0gdHJ1ZTsKKworICAgICAgICAvLyBGcm9t
IHZlcnNpb24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgc28gcmVxdWVz
dCB0aGF0IG91cHV0IHRvIHRoZSBzaGFkZXIgY29tcGlsZXIuCisgICAgICAgIC8vIE9wZW5HTCB2
ZXJzaW9uIDMuMiB1c2VzIEdMU0wgdmVyc2lvbiAxLjUwLgorICAgICAgICBtX2NvbXBpbGVyID0g
QU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF8xNTBfQ09SRV9PVVRQVVQpOworCisgICAgICAgIC8v
IEZyb20gdmVyc2lvbiAzLjIgb24gd2UgdXNlIHRoZSBPcGVuR0wgQ29yZSBwcm9maWxlLCBhbmQg
d2UgbmVlZCBhIFZBTyBmb3IgcmVuZGVyaW5nLgorICAgICAgICAvLyBBIFZBTyBjb3VsZCBiZSBj
cmVhdGVkIGFuZCBib3VuZCBieSBlYWNoIGNvbXBvbmVudCB1c2luZyBHTCByZW5kZXJpbmcgKFRl
eHR1cmVNYXBwZXIsIFdlYkdMLCBldGMpLiBUaGlzIGlzCisgICAgICAgIC8vIGEgc2ltcGxlciBz
b2x1dGlvbjogdGhlIGZpcnN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNyZWF0ZWQgb24gYSBH
TENvbnRleHQgd2lsbCBjcmVhdGUgYW5kIGJpbmQgYSBWQU8gZm9yIHRoYXQgY29udGV4dC4KKyAg
ICAgICAgR0NHTGludCBjdXJyZW50VkFPID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6VkVSVEVYX0FSUkFZX0JJTkRJTkcpOworICAgICAgICBpZiAoIWN1cnJlbnRWQU8pIHsK
KyAgICAgICAgICAgIG1fdmFvID0gY3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICAgICAgICAgIGJp
bmRWZXJ0ZXhBcnJheShtX3Zhbyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBGb3IgbG93ZXIgdmVyc2lvbnMgcmVxdWVzdCB0aGUgY29tcGF0aWJpbGl0eSBvdXRwdXQgdG8g
dGhlIHNoYWRlciBjb21waWxlci4KKyAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJp
ZGdlKFNIX0dMU0xfQ09NUEFUSUJJTElUWV9PVVRQVVQpOworCisgICAgICAgIC8vIEdMX1BPSU5U
X1NQUklURSBpcyBuZWVkZWQgaW4gbG93ZXIgdmVyc2lvbnMuCisgICAgICAgIDo6Z2xFbmFibGUo
R0xfUE9JTlRfU1BSSVRFKTsKKyAgICB9CisjZWxzZQorICAgIC8vIEFkanVzdCB0aGUgc2hhZGVy
IHNwZWNpZmljYXRpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMgKGkuZS4gV2ViR0wyIHN1
cHBvcnQpIHdhcyByZXF1ZXN0ZWQuCisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICBtX2NvbXBpbGVy
ID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfRVNTTF9PVVRQVVQsIChhdHRyaWJ1dGVzLndlYkdMVmVy
c2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyKSA/IFNIX1dFQkdM
Ml9TUEVDIDogU0hfV0VCR0xfU1BFQyk7CisjZWxzZQorICAgIG1fY29tcGlsZXIgPSBBTkdMRVdl
YktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCwgU0hfV0VCR0xfU1BFQyk7CisjZW5kaWYKKyNlbmRp
ZgorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWlsdEluUmVzb3VyY2Vz
IEFOR0xFUmVzb3VyY2VzOworICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNv
dXJjZXMpOworCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyA9IGdldEludGVn
ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgQU5H
TEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyk7CisgICAgQU5HTEVS
ZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpNQVhfVkFSWUlOR19WRUNUT1JTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICBBTkdMRVJlc291
cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyk7CisKKyAgICAvLyBBbHdheXMgc2V0IHRv
IDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7
CisKKyAgICBHQ0dMaW50IHJhbmdlWzJdIHsgfTsKKyAgICBHQ0dMaW50IHByZWNpc2lvbiA9IDA7
CisgICAgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpG
UkFHTUVOVF9TSEFERVIsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpISUdIX0ZMT0FULCByYW5n
ZSwgJnByZWNpc2lvbik7CisgICAgQU5HTEVSZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdo
ID0gKHJhbmdlWzBdIHx8IHJhbmdlWzFdIHx8IHByZWNpc2lvbik7CisKKyAgICBtX2NvbXBpbGVy
LnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKK30KKworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRH
TE9wZW5HTCgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRN
YW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAg
IGlmIChtX3RleHR1cmUpCisgICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJl
KTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRl
eHR1cmUpCisgICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CisjZW5kaWYKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChh
dHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xE
ZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgewor
I2lmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIGlmIChtX2RlcHRoQnVmZmVyKQorICAgICAgICAg
ICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKworICAgICAgICBp
ZiAobV9zdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZtX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1
ZmZlcikKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisgICAgfQorICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJv
KTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgOjpnbERlbGV0ZVRleHR1cmVz
KDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworI2VuZGlmCisKKyNpZiBVU0UoQ0FJUk8pCisg
ICAgaWYgKG1fdmFvKQorICAgICAgICBkZWxldGVWZXJ0ZXhBcnJheShtX3Zhbyk7CisjZW5kaWYK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkK
K3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPm1ha2VDb250
ZXh0Q3VycmVudCgpOworI2Vsc2UKKyAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2hlY2tHUFVTdGF0dXMoKQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c0dMRVMyQ29tcGxpYW50KCkgY29uc3QKK3sKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIHJldHVy
biB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworI2lmIFBMQVRG
T1JNKEdUSykKK0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbiYgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKSB7CisjaWYgVVNF
KE9QRU5HTF9FUykKKyAgICAgICAgLy8gZ2xHZXRTdHJpbmdpIGlzIG5vdCBhdmFpbGFibGUgb24g
R0xFUzIuCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3Bl
bkdMRVM+KHRoaXMsICBmYWxzZSk7CisjZWxzZQorICAgICAgICAvLyBGcm9tIE9wZW5HTCAzLjIg
b24gd2UgdXNlIHRoZSBDb3JlIHByb2ZpbGUsIGFuZCB0aGVyZSB3ZSBtdXN0IHVzZSBnbEdldFN0
cmluZ2kuCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3Bl
bkdMPih0aGlzLCBHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCk7CisjZW5k
aWYKKyAgICB9CisgICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Cit9CisjZW5kaWYKKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkKK3sKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2ltdWxhdGVFdmVudEZvclRlc3Rpbmco
U2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nIGV2ZW50KQoreworICAgIGlmIChldmVudCA9PSBTaW11
bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1cmUpCisgICAgICAgIG1fZmFpbE5l
eHRTdGF0dXNDaGVjayA9IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnByZXBhcmVGb3JEaXNwbGF5KCkKK3sKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCit7CisgICAg
cmV0dXJuIHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvbikKK3sKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsK
KworICAgIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbiYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lv
bnMoKTsKKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBpZiAoZXh0ZW5zaW9ucy5z
dXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7CisgICAgICAgICAgICBleHRl
bnNpb25zLmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKKyAgICAg
ICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KKyAgICAgICAgICAgIGF0
dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBhdHRycy5zdGVu
Y2lsID0gZmFsc2U7CisgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICB9
CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiAhbV9pc0ZvcldlYkdMMikgeworICAgICAgICBp
ZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
IikpIHsKKyAgICAgICAgICAgIGF0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgICAgICAgICAg
c2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUiKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVU
ZXh0dXJlKCkKK3sKKyAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworCisj
aWYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5n
IHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CisgICAgVGVtcG9yYXJ5
T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7CisjZW5kaWYK
KworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykKKyAgICAgICAgcmVzb2x2
ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAg
IHN0ZDo6c3dhcChtX3RleHR1cmUsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIDo6Z2xGcmFtZWJ1ZmZl
clRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VY
VCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEZsdXNoKCk7CisKKyAgICBB
U1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAg
IGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKKyAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRE
cmF3RkJPKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgcmV0dXJuOworI2VuZGlmCisK
KyAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fc3RhdGUuYm91bmRUYXJnZXQoR0xfVEVYVFVSRTApID09IEdMX1RF
WFRVUkVfMkQgPyBtX3N0YXRlLmJvdW5kVGV4dHVyZShHTF9URVhUVVJFMCkgOiAwKTsKKyAgICA6
OmdsQWN0aXZlVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0KTsKKyAgICBBU1NFUlQo
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmICht
X3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKKyAgICA6OmdsRmx1c2goKTsKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKK3sKKyAgICBib29s
IG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50
aWFsaWFzKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyk7CisgICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykgeworICAg
ICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBhdXRvIHJlc3VsdCA9IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMo
KTsKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgaWYgKHdpZHRoID09IG1fY3Vy
cmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdodCA+PSAwKTsKKyAgICBpZiAod2lkdGgg
PCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgp
OworCisgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAgICBtX2N1cnJlbnRIZWlnaHQgPSBo
ZWlnaHQ7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIFRlbXBvcmFyeU9wZW5H
TFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKKyAgICBU
ZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsK
KyAgICAKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gcmVzaGFwZUZCT3MoSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7CisKKyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAg
ICBHTGZsb2F0IGNsZWFyQ29sb3JbXSA9IHsgMCwgMCwgMCwgMCB9LCBjbGVhckRlcHRoID0gMDsK
KyAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAwOworICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9
IHsgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSB9LCBkZXB0aE1hc2sgPSBHTF9U
UlVFOworICAgIEdMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmYsIHN0ZW5jaWxNYXNrQmFj
ayA9IDB4ZmZmZmZmZmY7CisgICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZG
RVJfQklUOworICAgIDo6Z2xHZXRGbG9hdHYoR0xfQ09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29s
b3IpOworICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIDo6Z2xHZXRCb29sZWFu
dihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7CisgICAgOjpnbENvbG9yTWFzayhHTF9U
UlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKKworICAgIGF1dG8gYXR0cnMgPSBjb250
ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0dHJzLmRlcHRoKSB7CisgICAgICAgIDo6Z2xH
ZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7CisgICAgICAgIDo6Z2xHZXRCb29s
ZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOworICAgICAgICA6OmdsRGVwdGhN
YXNrKEdMX1RSVUUpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsK
KyAgICB9CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2
KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsQ2xl
YXJTdGVuY2lsKDApOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1B
U0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2spKTsKKyAgICAgICAgOjpn
bEdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8
R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFy
YXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKKyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUoR0xfQkFDSywgMHhmZmZmZmZmZik7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lM
X0JVRkZFUl9CSVQ7CisgICAgfQorCisgICAgOjpnbENsZWFyKGNsZWFyTWFzayk7CisKKyAgICA6
OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJd
LCBjbGVhckNvbG9yWzNdKTsKKyAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JN
YXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7CisgICAgaWYgKGF0dHJzLmRlcHRo
KSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKGNsZWFyRGVw
dGgpOworICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7CisgICAgfQorICAgIGlmIChh
dHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsK
KyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIHN0ZW5jaWxNYXNrKTsK
KyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgc3RlbmNpbE1hc2tCYWNr
KTsKKyAgICB9CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7CisKKyAgICBhdXRvIGVycm9yID0gOjpnbEdldEVycm9yKCk7CisgICAgaWYgKGVy
cm9yICE9IEdMX05PX0VSUk9SKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYkdMLCAiRmF0YWw6
IE9wZW5HTCBlcnJvciBkdXJpbmcgR3JhcGhpY3NDb250ZXh0R0wgYnVmZmVyIGluaXRpYWxpemF0
aW9uICglZCkuIiwgZXJyb3IpOworICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICA6OmdsRmx1c2goKTsKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmcoUGxhdGZvcm1HTE9iamVjdCB2ZXJ0
ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOworICAgIEFT
U0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOworICAgIGNv
bnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0ZXhTaGFk
ZXIpLT52YWx1ZTsKKyAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOworCisgICAgSGFzaE1hcDxTdHJpbmcs
IHNoOjpTaGFkZXJWYXJpYWJsZT4gY29tYmluZWRWYXJ5aW5nczsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIHZlcnRleFN5bWJvbCA6IHZlcnRleEVudHJ5LnZhcnlpbmdNYXApIHsKKyAgICAgICAgY29u
c3QgU3RyaW5nJiBzeW1ib2xOYW1lID0gdmVydGV4U3ltYm9sLmtleTsKKyAgICAgICAgLy8gVGhl
IHZhcnlpbmcgbWFwIGluY2x1ZGVzIHZhcmlhYmxlcyBmb3IgZWFjaCBpbmRleCBvZiBhbiBhcnJh
eSB2YXJpYWJsZS4KKyAgICAgICAgLy8gV2Ugb25seSB3YW50IGEgc2luZ2xlIHZhcmlhYmxlIHRv
IHJlcHJlc2VudCB0aGUgYXJyYXkuCisgICAgICAgIGlmIChzeW1ib2xOYW1lLmVuZHNXaXRoKCJd
IikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBEb24ndCBjb3VudCBidWls
dCBpbiB2YXJ5aW5ncy4KKyAgICAgICAgaWYgKHN5bWJvbE5hbWUgPT0gImdsX0ZyYWdDb29yZCIg
fHwgc3ltYm9sTmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciIHx8IHN5bWJvbE5hbWUgPT0gImdsX1Bv
aW50Q29vcmQiKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgYXV0byYg
ZnJhZ21lbnRTeW1ib2wgPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAuZmluZChzeW1ib2xOYW1l
KTsKKyAgICAgICAgaWYgKGZyYWdtZW50U3ltYm9sICE9IGZyYWdtZW50RW50cnkudmFyeWluZ01h
cC5lbmQoKSkKKyAgICAgICAgICAgIGNvbWJpbmVkVmFyeWluZ3MuYWRkKHN5bWJvbE5hbWUsIGZy
YWdtZW50U3ltYm9sLT52YWx1ZSk7CisgICAgfQorCisgICAgc2l6ZV90IG51bVZhcnlpbmdzID0g
Y29tYmluZWRWYXJ5aW5ncy5zaXplKCk7CisgICAgaWYgKCFudW1WYXJ5aW5ncykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBzdGQ6OnZlY3RvcjxzaDo6U2hhZGVyVmFyaWFibGU+IHZhcmlh
YmxlczsKKyAgICB2YXJpYWJsZXMucmVzZXJ2ZShjb21iaW5lZFZhcnlpbmdzLnNpemUoKSk7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiB2YXJ5aW5nU3ltYm9sIDogY29tYmluZWRWYXJ5aW5ncy52YWx1
ZXMoKSkKKyAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2YXJ5aW5nU3ltYm9sKTsKKworICAg
IEdDR0xpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSAwOworI2lmIFVTRShPUEVOR0xfRVMpCisgICAg
OjpnbEdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7
CisjZWxzZQorICAgIGlmIChtX2lzRm9yV2ViR0wyKQorICAgICAgICA6OmdsR2V0SW50ZWdlcnYo
R0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgR0NHTGludCBtYXhWYXJ5aW5nRmxvYXRzID0gMDsKKyAgICAgICAgOjpnbEdldElu
dGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgJm1heFZhcnlpbmdGbG9hdHMpOworICAgICAg
ICBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1heFZhcnlpbmdGbG9hdHMgLyA0OworICAgIH0KKyNlbmRp
ZgorICAgIHJldHVybiBzaDo6Q2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRzKG1heFZh
cnlpbmdWZWN0b3JzLCB2YXJpYWJsZXMpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRm
b3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc2hhZGVy
U291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOworICAgIEFTU0VSVChtX3NoYWRlclNv
dXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOworICAgIGNvbnN0IGF1dG8mIHZlcnRl
eEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKKyAg
ICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFn
bWVudFNoYWRlciktPnZhbHVlOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHNoOjpHTGVudW0+IHZl
cnRleFN5bWJvbFByZWNpc2lvbk1hcDsKKworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiB2
ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBw
ZWROYW1lID0gZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKKyAgICAgICAgdmVydGV4U3lt
Ym9sUHJlY2lzaW9uTWFwLmFkZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1l
Lmxlbmd0aCgpKSwgZW50cnkudmFsdWUuZ2V0KCkucHJlY2lzaW9uKTsKKyAgICB9CisKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRyeS51bmlmb3JtTWFwKSB7CisgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUuZ2V0KCkubWFw
cGVkTmFtZTsKKyAgICAgICAgY29uc3QgYXV0byYgdmVydGV4U3ltYm9sID0gdmVydGV4U3ltYm9s
UHJlY2lzaW9uTWFwLmZpbmQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5s
ZW5ndGgoKSkpOworICAgICAgICBpZiAodmVydGV4U3ltYm9sICE9IHZlcnRleFN5bWJvbFByZWNp
c2lvbk1hcC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVlICE9IGVudHJ5LnZhbHVlLmdldCgp
LnByZWNpc2lvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVy
ZShHQ0dMZW51bSB0ZXh0dXJlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJl
OworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJU
KHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwor
ICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQo
cHJvZ3JhbSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNI
QURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOworICAgIExPRyhXZWJHTCwgIjo6Ymlu
ZEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgOjpnbEJpbmRBdHRyaWJMb2NhdGlvbihw
cm9ncmFtLCBpbmRleCwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRh
cmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR0x1aW50IGZibzsKKyAgICBpZiAoYnVm
ZmVyKQorICAgICAgICBmYm8gPSBidWZmZXI7CisgICAgZWxzZQorICAgICAgICBmYm8gPSAoY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwor
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIpOworICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGZibyAhPSBt
X3N0YXRlLmJvdW5kRHJhd0ZCTykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRh
cmdldCwgZmJvKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5k
UmVhZEZCTyA9IGZibzsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHJlbmRl
cmJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7
Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5zZXRCb3VuZFRl
eHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4dHVyZSwgdGFyZ2V0KTsKKyAgICA6
OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwg
R0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUo
R0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhhKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEVxdWF0aW9u
U2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVudW0gZGZhY3RvcikK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOworfSAgICAgICAKKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBH
Q0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCB2b2lkPiBk
YXRhLCBHQ0dMZW51bSB1c2FnZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZz
ZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhKTsKK30KKworR0NHTGVudW0gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElE
X09QRVJBVElPTjsKKworICAgIHJldHVybiA6OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCh0
YXJnZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdD
R0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmIGIsIEdDR0xjbGFtcGYgYSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENsZWFyKG1hc2spOworICAgIGNo
ZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
U3RlbmNpbChHQ0dMaW50IHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbENsZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwgR0NHTGJvb2xl
YW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29sZWFuIGFscGhhKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb2xv
ck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAg
IEFTU0VSVChzaGFkZXIpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFR1cm4gb24gbmFtZSBtYXBwaW5nLiBEdWUgdG8gdGhlIHdheSBB
TkdMRSBuYW1lIGhhc2hpbmcgd29ya3MsIHdlCisgICAgLy8gcG9pbnQgYSBnbG9iYWwgaGFzaG1h
cCB0byB0aGUgbWFwIG93bmVkIGJ5IHRoaXMgY29udGV4dC4KKyAgICBTaEJ1aWx0SW5SZXNvdXJj
ZXMgQU5HTEVSZXNvdXJjZXMgPSBtX2NvbXBpbGVyLmdldFJlc291cmNlcygpOworICAgIFNoSGFz
aEZ1bmN0aW9uNjQgcHJldmlvdXNIYXNoRnVuY3Rpb24gPSBBTkdMRVJlc291cmNlcy5IYXNoRnVu
Y3Rpb247CisgICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0gbmFtZUhhc2hGb3JTaGFk
ZXI7CisKKyAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKKyAgICAgICAgbmFtZUhhc2hN
YXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsKKyAgICBzZXRDdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFkZXJzLmdldCgpKTsKKyAg
ICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisKKyAgICBTdHJpbmcg
dHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9ucy0+Z2V0VHJhbnNsYXRlZFNoYWRl
clNvdXJjZUFOR0xFKHNoYWRlcik7CisKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24g
PSBwcmV2aW91c0hhc2hGdW5jdGlvbjsKKyAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdM
RVJlc291cmNlcyk7CisgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51bGxwdHIp
OworCisgICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZyA9IHRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIHRyYW5zbGF0ZWRT
aGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5kYXRhKCk7CisgICAgaW50IHRyYW5z
bGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5sZW5ndGgoKTsKKwor
ICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuJXNc
bi0tLSBlbmQgb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIGdldFNoYWRlclNvdXJjZShz
aGFkZXIpLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiB0cmFuc2xh
dGVkIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCB0cmFuc2xhdGVkIHNoYWRlciBzb3Vy
Y2UgLS0tIiwgdHJhbnNsYXRlZFNoYWRlclB0cik7CisKKyAgICA6OmdsU2hhZGVyU291cmNlKHNo
YWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoKTsK
KyAgICAKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIAorICAgIGludCBjb21w
aWxlU3RhdHVzOworICAgIAorICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RB
VFVTLCAmY29tcGlsZVN0YXR1cyk7CisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTaGFkZXJTb3VyY2VF
bnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgLy8gUG9wdWxhdGUgdGhlIHNoYWRl
ciBsb2cKKyAgICBHTGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIs
IEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisKKyAgICBpZiAobGVuZ3RoKSB7CisgICAg
ICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3Ro
KTsKKyAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBp
bmZvLmRhdGEoKSk7CisKKyAgICAgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyBz
aGFkZXIsIDAgfTsKKyAgICAgICAgZW50cnkubG9nID0gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFk
ZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKKyAgICB9CisKKyAgICBpZiAoY29t
cGlsZVN0YXR1cyAhPSBHTF9UUlVFKSB7CisgICAgICAgIGVudHJ5LmlzVmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IHNoYWRlciB0cmFuc2xhdG9yIHByb2R1Y2VkIGEg
c2hhZGVyIHRoYXQgT3BlbkdMIHdvdWxkIG5vdCBjb21waWxlLiIpOworICAgIH0KK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoTWFwPFBsYXRmb3JtR0xP
YmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZChzaGFkZXIpOworCisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1h
cC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5
ID0gcmVzdWx0LT52YWx1ZTsKKworICAgIGNvbnN0IENTdHJpbmcmIHNoYWRlclNvdXJjZUNTdHJp
bmcgPSBlbnRyeS5zb3VyY2UudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZVB0
ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOworICAgIGludCBzaGFkZXJTb3VyY2VMZW5n
dGggPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmxlbmd0aCgpOworCisgICAgTE9HKFdlYkdMLCAiLS0t
IGJlZ2luIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgZGlyZWN0IHNoYWRl
ciBzb3VyY2UgLS0tXG4iLCBzaGFkZXJTb3VyY2VQdHIpOworCisgICAgOjpnbFNoYWRlclNvdXJj
ZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZzaGFkZXJTb3VyY2VMZW5ndGgpOworCisg
ICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKworICAgIGludCBjb21waWxlU3RhdHVzOwor
CisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3Rh
dHVzKTsKKworICAgIGlmIChjb21waWxlU3RhdHVzID09IEdMX1RSVUUpIHsKKyAgICAgICAgZW50
cnkuaXNWYWxpZCA9IHRydWU7CisgICAgICAgIExPRyhXZWJHTCwgIkRpcmVjdCBjb21waWxhdGlv
biBvZiBzaGFkZXIgc3VjY2VlZGVkLiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVudHJ5Lmlz
VmFsaWQgPSBmYWxzZTsKKyAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IGRpcmVjdCBjb21waWxh
dGlvbiBvZiBzaGFkZXIgZmFpbGVkLiIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBhdHRycyA9
IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8g
PT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9z
dGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNvbHZl
TXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgIH0KKyAgICA6OmdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgaWYg
KGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBhdHRycyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7CisKKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9z
dGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5i
b3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOworICAgIH0KKyAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEN1bGxGYWNlKG1vZGUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
RGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0
aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3Zl
KHByb2dyYW0pOworICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bERpc2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51
bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKKyAgICBjaGVja0dQVVN0
YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVu
dW0gY2FwKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xFbmFibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmluaXNoKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsRmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZsdXNoKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsRmx1c2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0
dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSwgR0NHTGludCBsZXZlbCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQodGFy
Z2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBtX3N0YXRl
LnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbEZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcCh0
YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRy
aWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdM
aW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwg
R0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CisgICAg
VmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXplKTsgLy8gR0xfQUNUSVZFX0FUVFJJ
QlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisgICAgR0xzaXplaSBu
YW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7
CisgICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgbWF4QXR0cmlidXRlU2l6
ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOworICAgIGlmICghbmFt
ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFN0cmluZyBvcmlnaW5h
bE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FU
VFJJQlVURSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7CisgICAgCisjaWZuZGVm
IE5ERUJVRworICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7
CisgICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSBhdHRyaWJ1dGUg
JWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgp
LmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisKKyAgICBpbmZv
Lm5hbWUgPSBvcmlnaW5hbE5hbWU7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNp
emUgPSBzaXplOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBHQ0dMaW50IHN5bWJvbENvdW50Owor
ICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9n
cmFtKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVu
ZCgpKSB7CisgICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChwcm9ncmFtLCBH
cmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX0FUVFJJQlVURVMsICZzeW1ib2xDb3VudCk7CisgICAg
ICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7
CisgICAgfQorICAgIAorICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRz
ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJv
bENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJv
bENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXBbaW5kZXhdIDogLTE7CisK
KyAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBs
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGlu
Zm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0xpbnQg
bWF4VW5pZm9ybVNpemUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNU
SVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKKworICAgIFZlY3RvcjxH
TGNoYXI+IG5hbWUobWF4VW5pZm9ybVNpemUpOyAvLyBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVO
R1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0g
MDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdl
dEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0
aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdp
bmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgU3RyaW5n
KG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIFN0
cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7CisgICAgTE9HKFdlYkdM
LCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSB1bmlmb3JtICVkIGZyb20gJyVzJyB0byAn
JXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFs
TmFtZS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgIAorICAgIGluZm8ubmFtZSA9IG9yaWdp
bmFsTmFtZTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0
aXZlSW5mbyYgaW5mbykKK3sKKyAgICBHQ0dMaW50IHN5bWJvbENvdW50OworICAgIGF1dG8gcmVz
dWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICBp
ZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7CisgICAg
ICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChwcm9ncmFtLCBHcmFwaGljc0NvbnRl
eHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291bnQpOworICAgICAgICByZXN1bHQgPSBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIH0KKyAgICAK
KyAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+dmFs
dWU7CisgICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmlsdGVy
ZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVk
VG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhdIDogLTE7CisgICAgCisgICAgcmV0dXJuIGdl
dEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJhd0luZGV4LCBpbmZvKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHNpemVpIG1heENvdW50LCBHQ0dMc2l6ZWkqIGNvdW50LCBQbGF0Zm9y
bUdMT2JqZWN0KiBzaGFkZXJzKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
R2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Cit9
CisKK3N0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIYXNoZWROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIHVp
bnQ2NF90IG51bWJlciA9IG5hbWVIYXNoRm9yU2hhZGVyKG5hbWUudXRmOCgpLmRhdGEoKSwgbmFt
ZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIndlYmdsXyIsIGhleChudW1iZXIs
IExvd2VyY2FzZSkpOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAgPSByZXN1bHQt
PnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKKyAgICBhdXRvIHN5bWJvbEVudHJ5ID0gc3lt
Ym9sTWFwLmZpbmQobmFtZSk7CisgICAgaWYgKHN5bWJvbEVudHJ5ID09IHN5bWJvbE1hcC5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8mIG1hcHBlZE5hbWUg
PSBzeW1ib2xFbnRyeS0+dmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKKyAgICByZXR1cm4gU3RyaW5n
KG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSk7Cit9CisKK1N0cmluZyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgR0NHTHNpemVpIGNvdW50ID0gMDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7CisKKyAgICBmb3IgKEdDR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3Vy
Y2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWRO
YW1lKQorICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAg
ICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIg
bGlua2luZy4KKyAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQocHJvZ3Jh
bSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgeworICAgICAg
ICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOworICAgICAgICBhdXRvIG1hcHBl
ZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0
LCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAg
ICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOworICAgICAgICBtYXBwZWROYW1lID0gbWFwcGVk
U3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUs
IG5hbWUpOworICAgICAgICBpZiAobWFwcGVkTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBw
ZWROYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZ
TUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQXR0
cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUg
YW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAorICAgICAgICAvLyBhbmQgYXJlbid0IGV2
ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCisgICAgICAgIGlm
ICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQorICAgICAgICAgICAgbmFtZUhhc2hNYXBGb3JTaGFk
ZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsKKyAgICAgICAgc2V0Q3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7CisKKyAgICAg
ICAgYXV0byBnZW5lcmF0ZWROYW1lID0gZ2VuZXJhdGVIYXNoZWROYW1lKG5hbWUpOworCisgICAg
ICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsKKworICAgICAgICBt
X3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLnNldChnZW5lcmF0ZWROYW1lLCBuYW1lKTsKKwor
ICAgICAgICByZXR1cm4gZ2VuZXJhdGVkTmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFtZTsK
K30KKworc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmln
aW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdM
RVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJv
bE1hcChzeW1ib2xUeXBlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3lt
Ym9sTWFwKSB7CisgICAgICAgIGlmIChuYW1lID09IHN5bWJvbEVudHJ5LnZhbHVlLmdldCgpLm1h
cHBlZE5hbWUuY19zdHIoKSkKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS5rZXk7Cisg
ICAgfQorICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
QU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBHQ0dMc2l6ZWkgY291bnQ7CisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdOwor
ICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworICAg
IAorICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBh
dXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVy
c1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCisgICAg
ICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgLy8gV2Ug
bWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcu
CisgICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOworICAg
IGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKKyAgICAgICAgYXV0byBs
aW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKKyAgICAgICAgYXV0byBvcmlnaW5hbE5hbWUg
PSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuZmlyc3QsIHN5
bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAgICAgICAgICAg
cmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgICAgICBvcmlnaW5hbE5hbWUgPSBvcmln
aW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xU
eXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVy
biBvcmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoc3ltYm9sVHlwZSA9PSBT
SEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHkoKSkgeworICAgICAg
ICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkgYmUgcmVxdWVzdGVk
IGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCisgICAgICAgIC8vIGFuZCBh
cmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIgcHJvZ3JhbS4KKwor
ICAgICAgICBjb25zdCBhdXRvJiBjYWNoZWQgPSBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFw
LmZpbmQobmFtZSk7CisgICAgICAgIGlmIChjYWNoZWQgIT0gbV9wb3NzaWJseVVudXNlZEF0dHJp
YnV0ZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWQtPnZhbHVlOworICAgIH0K
KworICAgIHJldHVybiBuYW1lOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBzaXplX3QgY291
bnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBmb3IgKHNpemVfdCBzeW1ib2xUeXBlID0g
MDsgc3ltYm9sVHlwZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KFNIQURFUl9TWU1CT0xfVFlQRV9W
QVJZSU5HKTsgKytzeW1ib2xUeXBlKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgeworICAgICAgICAgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcnNbaV0pOworICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uc3QgU2hhZGVyU3ltYm9sTWFwJiBz
eW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzdGF0aWNfY2FzdDxlbnVtIEFOR0xF
U2hhZGVyU3ltYm9sVHlwZT4oc3ltYm9sVHlwZSkpOworICAgICAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgeworICAgICAgICAgICAgICAgIGlmIChuYW1l
ID09IHN5bWJvbEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWUuY19zdHIoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gbmFtZTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAtMTsK
KworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKKwor
CisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURF
Ul9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOworICAgIExPRyhXZWJHTCwgIjo6Z2xHZXRB
dHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBt
YXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAg
ICAgIHJldHVybiAtMTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiAtMTsKKworCisgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgbW92ZWRBbkVy
cm9yID0gZmFsc2U7CisKKyAgICAvLyBTZXQgYW4gYXJiaXRyYXJ5IGxpbWl0IG9mIDEwMCBoZXJl
IHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgorICAgIC8vIGEgcHJvYmxlbSBkcml2ZXIgaGFz
IGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIG5ldmVyIGNsZWFyIHRoZSBlcnJvci4KKyAgICAvLyBP
dGhlcndpc2UsIHdlIHdvdWxkIGp1c3QgbG9vcCB1bnRpbCB3ZSBnb3QgTk9fRVJST1IuCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIEdDR0xlbnVtIGVy
cm9yID0gZ2xHZXRFcnJvcigpOworICAgICAgICBpZiAoZXJyb3IgPT0gTk9fRVJST1IpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKKyAg
ICAgICAgbW92ZWRBbkVycm9yID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbW92ZWRBbkVy
cm9yOworfQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJyb3IoKQor
eworICAgIGlmICghbV9zeW50aGV0aWNFcnJvcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIE5l
ZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0
IGluIGNhc2UKKyAgICAgICAgLy8gdGhhdCBlcnJvciBpcyBhbHJlYWR5IHRoZXJlLCBzaW5jZSB0
aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgYm90aAorICAgICAgICAvLyBnbEdldEVycm9yIGFuZCBn
ZXRFcnJvciBpcyB0byBvbmx5IHJlcG9ydCBlYWNoIGVycm9yIGNvZGUgb25jZS4KKyAgICAgICAg
bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgICAgIHJldHVybiBtX3N5bnRo
ZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsKKyAgICB9CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisKKyAgICByZXR1
cm4gOjpnbEdldEVycm9yKCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIFN0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKG5hbWUpKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBt
b2RlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJu
IDo6Z2xJc0J1ZmZlcihidWZmZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElz
RW5hYmxlZChjYXApOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIGlmICgh
ZnJhbWVidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6
OmdsSXNGcmFtZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQor
eworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAg
cmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1
ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVChyZW5kZXJidWZmZXIpOwor
fQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKK30KKworR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybUdMT2Jq
ZWN0IHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0aCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
TGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlu
a1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFt
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKwor
ICAgIEdDR0xzaXplaSBjb3VudCA9IDA7CisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJd
ID0geyB9OworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRl
cnMpOworCisgICAgaWYgKGNvdW50ID09IDIpCisgICAgICAgIG1fbGlua2VkU2hhZGVyTWFwLnNl
dChwcm9ncmFtLCBzdGQ6Om1ha2VfcGFpcihzaGFkZXJzWzBdLCBzaGFkZXJzWzFdKSk7CisKKyAg
ICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xQ
aXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4g
aW52ZXJ0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IEFTU0VSVChzaGFkZXIpOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsKKworICAgIGVudHJ5
LnNvdXJjZSA9IHN0cmluZzsKKworICAgIG1fc2hhZGVyU291cmNlTWFwLnNldChzaGFkZXIsIFdU
Rk1vdmUoZW50cnkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywg
R0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFj
ZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbE1hc2sobWFzayk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBt
YXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xl
bnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbE9w
KGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFp
bCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFs
dWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0
LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMWYobG9j
YXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5kYXRhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMmYobG9jYXRpb24sIHYw
LCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJh
eS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9h
dCB2MSwgR0NHTGZsb2F0IHYyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJU
KCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkuYnVm
U2l6ZSAvIDMsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEs
IEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGYobG9jYXRpb24sIHYw
LCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQor
eworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm00ZnYobG9jYXRp
b24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bnQ+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJh
eS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0yaShs
b2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
K3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0
aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBH
Q0dMaW50IHYxLCBHQ0dMaW50IHYyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwg
djIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQoreworICAgIEFTU0VS
VCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1
ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdD
R0xpbnQgdjIsIEdDR0xpbnQgdjMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2
MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQoreworICAgIEFT
U0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5
LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEo
YXJyYXkuYnVmU2l6ZSAlIDQpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgYXJyYXku
YnVmU2l6ZSAvIDQsIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAg
IEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA5KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRp
b24sIGFycmF5LmJ1ZlNpemUgLyA5LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJh
eSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMTYpKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKHBy
b2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIx
ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmRl
eCwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIx
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dM
dWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVy
dGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwg
R0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2
MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQ0dMdWludCBpbmRleCwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjRmdihpbmRl
eCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlw
ZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBv
ZmZzZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1h
bGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3
cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQorewor
ICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1H
TE9iamVjdCBhcnJheSkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZGVsZXRlVmVydGV4QXJyYXlP
RVMoYXJyYXkpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNW
ZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQoreworICAgIHJldHVybiBnZXRFeHRl
bnNpb25zKCkuaXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorewor
ICAgIGdldEV4dGVuc2lvbnMoKS5iaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NH
TFNwYW48R0NHTGJvb2xlYW4+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUu
ZGF0YSk7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50
IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gdmFsdWU7CisKKyAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwg
JnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1
ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZS5kYXRhKTsKK30KKworR0NHTGludDY0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7CisgICAgLy8gRklY
TUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVy
IHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNv
bnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KKyAgICAvLyA6OmdsR2V0SW50ZWdlcjY0dihwbmFt
ZSwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludDY0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRl
eCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBHQ0dMaW50NjQgdmFsdWUgPSAwOworICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJs
aW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3Jl
YXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAz
LjAuCisgICAgLy8gOjpnbEdldEludGVnZXI2NGlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKKyAg
ICByZXR1cm4gdmFsdWU7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCisgICAgICAgIGF0dGFj
aG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhl
ciB3b3Jrcy4KKyAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQo
dGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9
CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7Cisg
ICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldE5vbkJ1aWx0SW5B
Y3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50KiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoQUNUSVZFX0FUVFJJQlVURVMgPT0gcG5h
bWUgfHwgQUNUSVZFX1VOSUZPUk1TID09IHBuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgKnZhbHVlID0gcmVzdWx0LT52YWx1ZS5jb3Vu
dEZvclR5cGUocG5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zaGFkZXJQ
cm9ncmFtU3ltYm9sQ291bnRNYXAuc2V0KHByb2dyYW0sIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50
cygpKTsKKyAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSktPnZhbHVlOworCisgICAgLy8g
UmV0cmlldmUgdGhlIGFjdGl2ZSBhdHRyaWJ1dGVzLCBidWlsZCBhIGZpbHRlcmVkIGNvdW50LCBh
bmQgYSBtYXBwaW5nIG9mCisgICAgLy8gb3VyIGludGVybmFsIGF0dHJpYnV0ZXMgaW5kZXhlcyB0
byB0aGUgcmVhbCB1bmZpbHRlcmVkIGluZGV4ZXMgaW5zaWRlIE9wZW5HTC4KKyAgICBHQ0dMaW50
IGF0dHJpYnV0ZUNvdW50ID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElW
RV9BVFRSSUJVVEVTLCAmYXR0cmlidXRlQ291bnQpOworICAgIGZvciAoR0NHTGludCBpID0gMDsg
aSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgQWN0aXZlSW5mbyBpbmZvOworICAg
ICAgICBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGksIGluZm8pOworICAgICAgICBpZiAo
aW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5hcHBl
bmQoaSk7CisgICAgfQorICAgIAorICAgIC8vIERvIHRoZSBzYW1lIGZvciB1bmlmb3Jtcy4KKyAg
ICBHQ0dMaW50IHVuaWZvcm1Db3VudCA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFt
LCBBQ1RJVkVfVU5JRk9STVMsICZ1bmlmb3JtQ291bnQpOworICAgIGZvciAoR0NHTGludCBpID0g
MDsgaSA8IHVuaWZvcm1Db3VudDsgKytpKSB7CisgICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAg
ICAgICAgZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaSwgaW5mbyk7CisgICAgICAgIGlm
IChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4
TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgKnZhbHVlID0gc3ltYm9sQ291bnRzLmNv
dW50Rm9yVHlwZShwbmFtZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0sIEdDR0xzaXpl
aSBjb3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCit7CisgICAgTE9HKFdlYkdMLCAiT3JpZ2luYWwg
U2hhZGVySW5mb0xvZzpcbiVzIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworCisgICAgSlNDOjpZYXJy
OjpSZWd1bGFyRXhwcmVzc2lvbiByZWdFeHAoIndlYmdsX1swMTIzNDU2Nzg5YWJjZGVmQUJDREVG
XSsiKTsKKworICAgIFN0cmluZ0J1aWxkZXIgcHJvY2Vzc2VkTG9nOworICAgIAorICAgIC8vIEFO
R0xFIGluc2VydHMgYSAiI2V4dGVuc2lvbiIgbGluZSBpbnRvIHRoZSBzaGFkZXIgc291cmNlIHRo
YXQKKyAgICAvLyBjYXVzZXMgYSB3YXJuaW5nIGluIHNvbWUgY29tcGlsZXJzLiBUaGVyZSBpcyBu
byBwb2ludCBzaG93aW5nCisgICAgLy8gdGhpcyB3YXJuaW5nIHRvIHRoZSB1c2VyIHNpbmNlIHRo
ZXkgZGlkbid0IHdyaXRlIHRoZSBjb2RlIHRoYXQKKyAgICAvLyBpcyBjYXVzaW5nIGl0LgorICAg
IHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFuZ2xlV2FybmluZyB7ICJXQVJO
SU5HOiAwOjE6IGV4dGVuc2lvbiAnR0xfQVJCX2dwdV9zaGFkZXI1JyBpcyBub3Qgc3VwcG9ydGVk
XG4iX3MgfTsKKyAgICBpbnQgc3RhcnRGcm9tID0gbG9nLnN0YXJ0c1dpdGgoYW5nbGVXYXJuaW5n
KSA/IGFuZ2xlV2FybmluZy5nZXQoKS5sZW5ndGgoKSA6IDA7CisgICAgaW50IG1hdGNoZWRMZW5n
dGggPSAwOworCisgICAgZG8geworICAgICAgICBpbnQgc3RhcnQgPSByZWdFeHAubWF0Y2gobG9n
LCBzdGFydEZyb20sICZtYXRjaGVkTGVuZ3RoKTsKKyAgICAgICAgaWYgKHN0YXJ0ID09IC0xKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vi
c3RyaW5nKHN0YXJ0RnJvbSwgc3RhcnQgLSBzdGFydEZyb20pKTsKKyAgICAgICAgc3RhcnRGcm9t
ID0gc3RhcnQgKyBtYXRjaGVkTGVuZ3RoOworCisgICAgICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xl
ZFN5bWJvbCA9IGxvZy5zdWJzdHJpbmcoc3RhcnQsIG1hdGNoZWRMZW5ndGgpOworICAgICAgICBj
b25zdCBTdHJpbmcmIG1hcHBlZFN5bWJvbCA9IG1hcHBlZFN5bWJvbE5hbWUoc2hhZGVycywgY291
bnQsIG1hbmdsZWRTeW1ib2wpOworICAgICAgICBMT0coV2ViR0wsICJEZW1hbmdsaW5nOiAlcyB0
byAlcyIsIG1hbmdsZWRTeW1ib2wudXRmOCgpLmRhdGEoKSwgbWFwcGVkU3ltYm9sLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKG1hcHBlZFN5bWJvbCk7CisgICAg
fSB3aGlsZSAoc3RhcnRGcm9tIDwgc3RhdGljX2Nhc3Q8aW50Pihsb2cubGVuZ3RoKCkpKTsKKwor
ICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIGxvZy5sZW5n
dGgoKSAtIHN0YXJ0RnJvbSkpOworCisgICAgTE9HKFdlYkdMLCAiVW5tYW5nbGVkIFNoYWRlcklu
Zm9Mb2c6XG4lcyIsIHByb2Nlc3NlZExvZy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAg
IHJldHVybiBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0p
Cit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAg
ICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBHTHNp
emVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKKyAgICA6Omds
R2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOwor
CisgICAgR0NHTHNpemVpIGNvdW50OworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXTsK
KyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKwor
ICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIGNvdW50LCBTdHJpbmcoaW5m
by5kYXRhKCksIHNpemUpKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
KQoreworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisK
K0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcmkoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAg
IEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIAorICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBj
YXNlIERFTEVURV9TVEFUVVM6CisgICAgY2FzZSBTSEFERVJfVFlQRToKKyAgICAgICAgOjpnbEdl
dFNoYWRlcml2KHNoYWRlciwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ09NUElMRV9TVEFUVVM6CisgICAgICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCisgICAgICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT52
YWx1ZS5pc1ZhbGlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6
CisgICAgICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAg
ICAgICB2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgdmFsdWUgPSBn
ZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHZhbHVlOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNo
YWRlcik7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIGNvbnN0IFNoYWRlclNvdXJjZUVudHJ5
JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisgICAgaWYgKCFlbnRyeS5pc1ZhbGlkKQorICAgICAg
ICByZXR1cm4gZW50cnkubG9nOworCisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICA6OmdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworICAgIGlmICgh
bGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgR0xzaXplaSBzaXplID0g
MDsKKyAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgOjpnbEdldFNoYWRlcklu
Zm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgIHJldHVybiBnZXRVbm1h
bmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGNvbnN0
IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7IAorCisgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291cmNlOworfQorCitHQ0dMZmxvYXQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMZmxvYXQgdmFsdWUgPSAwLmY7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xH
ZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1
ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVy
aShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEdDR0xpbnQgdmFsdWUg
PSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAg
ICByZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPEdDR0xmbG9hdD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlv
biwgdmFsdWUuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPEdDR0xpbnQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24s
IHZhbHVlLmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48R0NHTHVpbnQ+IHZhbHVlKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBV
TlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Cit9CisKK0dD
R0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJv
Z3JhbSk7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
LTE7CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwg
U0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOworICAgIExPRyhXZWJHTCwgIjo6Z2V0
VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworR0NHTHNpemVp
cHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVp
bnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0x2b2lkKiBwb2ludGVyID0gMDsKKyAgICA6
OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdDR0xzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4ocG9pbnRlcikpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2ZmLCBHQ0dM
aW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworI2lmICFV
U0UoT1BFTkdMX0VTKQorICAgIGlmICh0eXBlID09IEhBTEZfRkxPQVRfT0VTKQorICAgICAgICB0
eXBlID0gR0xfSEFMRl9GTE9BVF9BUkI7CisjZW5kaWYKKworICAgIGlmIChtX3VzaW5nQ29yZVBy
b2ZpbGUpICB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBzb21lIGZvcm1hdCB2YWx1ZXMgdXNlZCBp
biBXZWJHTCB0aGF0IGFyZSBkZXByZWNhdGVkIHdoZW4gdXNpbmcgYSBjb3JlIHByb2ZpbGUsIHNv
IHdlIG5lZWQKKyAgICAgICAgLy8gdG8gYWRhcHQgdGhlbSwgYXMgd2UgZG8gaW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoKS4KKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsK
KyAgICAgICAgY2FzZSBBTFBIQToKKyAgICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRUQg
dG8gYmFjayBHTF9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgorICAgICAgICAgICAgZm9y
bWF0ID0gUkVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFVNSU5BTkNFX0FM
UEhBOgorICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdMX1JHIHRvIGJhY2sgR0xfTFVNSU5B
TkNFX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCisgICAgICAgICAgICBmb3JtYXQgPSBS
RzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRl
YWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJz
IHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUuCisgICAgOjpnbFRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMuZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEuZGF0
YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3Vu
ZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRh
dGEuZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJl
bnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5CdWZm
ZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOwor
ICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHVpbnQgbyA9IDA7
CisgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwor
UGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdD
R0xlbnVtIHR5cGUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ2xDcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRf
U0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOworfQorCitQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKKyAgICBtX3N0YXRl
LnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOworICAgIHJldHVybiBvOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVy
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7
CisgICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7CisgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9y
IGRyYXdpbmcKKyAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCisg
ICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwgMCk7CisgICAgfQorICAgIGdsRGVs
ZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAgICBnbERl
bGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlLmJv
dW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7CisgICAg
ICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOworICAgIH0pOworICAg
IGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5yZW1vdmVBbGwodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQoreworICAgIC8vIE5lZWQgdG8g
bW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCisg
ICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJy
b3Igd2lsbCBnZXQKKyAgICAvLyBhbnkgZXJyb3JzIGZyb20gZ2xFcnJvciBiZWZvcmUgdGhlIGVy
cm9yIHdlIGFyZSBzeW50aGVzaXppbmcuCisgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7CisgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCgpCit7CisgICAgZm9yIChhdXRv
KiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5mb3Jj
ZUNvbnRleHRMb3N0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlY3lj
bGVDb250ZXh0KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2Ns
aWVudHMpKQorICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250ZXh0KCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24o
KQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisg
ICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit7CisgICAgZ2V0RXh0ZW5zaW9u
cygpLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3Vu
dCk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3Vu
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQp
Cit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1vZGUs
IGNvdW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcihH
Q0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBnZXRFeHRlbnNpb25zKCku
dmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsKK30KKworI2lmIEhBVkUo
T1BFTkdMXzQpICYmIEVOQUJMRShXRUJHTDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQgaW5kZXgpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFByaW1pdGl2ZVJl
c3RhcnRJbmRleChpbmRleCk7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNvbnN0IHZvaWQqIGRhdGEsIEdDR0xl
bnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxlbmd0aCkKK3sKKyAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7CisgICAgVU5VU0VE
X1BBUkFNKHVzYWdlKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjT2Zmc2V0KTsKKyAgICBVTlVTRURf
UEFSQU0obGVuZ3RoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVy
U3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgZHN0Qnl0ZU9mZnNldCwgY29uc3Qg
dm9pZCogc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGRzdEJ5dGVPZmZzZXQp
OworICAgIFVOVVNFRF9QQVJBTShzcmNEYXRhKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjT2Zmc2V0
KTsKKyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKK30KKworI2lmIEhBVkUoT1BFTkdMXzQpIHx8
IEhBVkUoT1BFTkdMX0VTXzMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NH
TGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIg
c2l6ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVUYXJnZXQsIHJl
YWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKK30KKyNlbHNlCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xp
bnRwdHIsIEdDR0xpbnRwdHIsIEdDR0xzaXplaXB0cikKK3sKK30KKyNlbmRpZgorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQoreworI2lmIEhBVkUo
T1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdDR0x2b2lkKiBwdHIgPSA6OmdsTWFwQnVmZmVy
UmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwgR3JhcGhpY3NDb250ZXh0R0w6Ok1B
UF9SRUFEX0JJVCk7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1jcHko
ZGF0YS5kYXRhLCBwdHIsIGRhdGEuYnVmU2l6ZSk7CisgICAgaWYgKCE6OmdsVW5tYXBCdWZmZXIo
dGFyZ2V0KSkKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7CisjZW5k
aWYKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIo
R0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwgR0NHTGludCBzcmNZ
MSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RYMSwgR0NHTGludCBk
c3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3JjWDApOworICAgIFVOVVNFRF9QQVJBTShzcmNZMCk7CisgICAgVU5VU0VEX1BBUkFN
KHNyY1gxKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWTEpOworICAgIFVOVVNFRF9QQVJBTShkc3RY
MCk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFkwKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WDEpOwor
ICAgIFVOVVNFRF9QQVJBTShkc3RZMSk7CisgICAgVU5VU0VEX1BBUkFNKG1hc2spOworICAgIFVO
VVNFRF9QQVJBTShmaWx0ZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1l
bnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NHTGludCBsYXll
cikKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oYXR0YWNo
bWVudCk7CisgICAgVU5VU0VEX1BBUkFNKHRleHR1cmUpOworICAgIFVOVVNFRF9QQVJBTShsZXZl
bCk7CisgICAgVU5VU0VEX1BBUkFNKGxheWVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQp
OworICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVudHMpOworICAgIFVOVVNFRF9QQVJB
TSh4KTsKKyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAg
ICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCit7CisgICAgVU5VU0VEX1BBUkFNKHNyYyk7Cit9
CisKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4g
ZGF0YSkKK3sKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdl
dCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZv
cm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oYnVmU2l6
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVt
IHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4U3RvcmFnZTJEKHRhcmdl
dCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCkKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4U3RvcmFn
ZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgp
OworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRU
ZXh0dXJlKCkpOworfQorI2Vsc2UKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldElu
dGVybmFsZm9ybWF0aXYoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48R0NH
TGludD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMc2l6ZWkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRl
eFN0b3JhZ2UyRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2Uz
RChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSkKK3sKK30KKyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
eG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFS
QU0oeG9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHlvZmZzZXQpOworICAgIFVOVVNFRF9QQVJB
TSh6b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOwor
ICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Cit9CisK
K0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgVU5VU0VE
X1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShuYW1lKTsKKworICAgIHJldHVybiAw
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0x1aW50IHYwKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Cisg
ICAgVU5VU0VEX1BBUkFNKHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpCit7
CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odjApOworICAg
IFVOVVNFRF9QQVJBTSh2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dM
dWludCB2MikKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJB
TSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKKyAgICBVTlVTRURfUEFSQU0odjIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIsIEdDR0x1aW50IHYzKQor
eworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAg
ICBVTlVTRURfUEFSQU0odjEpOworICAgIFVOVVNFRF9QQVJBTSh2Mik7CisgICAgVU5VU0VEX1BB
UkFNKHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aXYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7CisgICAg
VU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNF
RF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7
CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4MmZ2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQor
eworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9z
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VE
X1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVT
RURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRh
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4NGZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5V
U0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgzZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJh
bnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQoreworICAgIFVOVVNFRF9QQVJBTShpbmRl
eCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVT
RURfUEFSQU0oeik7CisgICAgVU5VU0VEX1BBUkFNKHcpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50LCA0PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAg
ICBVTlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQg
eSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwor
ICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BB
UkFNKHopOworICAgIFVOVVNFRF9QQVJBTSh3KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0
IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBV
TlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVu
dW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCit7CisgICAgVU5V
U0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShzdHJpZGUpOworICAgIFVOVVNFRF9QQVJBTShv
ZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVt
ZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwgR0NHTHVpbnQgZW5kLCBHQ0dMc2l6
ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIFVOVVNF
RF9QQVJBTShtb2RlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhcnQpOworICAgIFVOVVNFRF9QQVJB
TShlbmQpOworICAgIFVOVVNFRF9QQVJBTShjb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUp
OworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oYnVmcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xT
cGFuPGNvbnN0IEdDR0xpbnQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsK
KyAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xl
bnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
dmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShk
cmF3YnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMZmxv
YXQgZGVwdGgsIEdDR0xpbnQgc3RlbmNpbCkKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsK
KyAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKGRlcHRoKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RlbmNpbCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworfQorCitHQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQor
eworICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAg
IFVOVVNFRF9QQVJBTShxdWVyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
K30KKworUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFy
Z2V0KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK0dD
R0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKFBsYXRmb3Jt
R0xPYmplY3QgcXVlcnksIEdDR0xlbnVtIHBuYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShxdWVy
eSk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworUGxhdGZv
cm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNh
bXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1w
bGVyKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxl
cihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIp
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kU2FtcGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit7
CisgICAgVU5VU0VEX1BBUkFNKHVuaXQpOworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmkoUGxhdGZv
cm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBV
TlVTRURfUEFSQU0ocGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
YW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMZmxvYXQgcGFyYW0pCit7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVO
VVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtKTsKK30KKworR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShz
YW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIHJldHVybiAwLmY7Cit9CisK
K0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCisKK3sKKyAgICBVTlVTRURf
UEFSQU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMDsK
K30KKworR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZlbmNlU3luYyhHQ0dMZW51
bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKK3sKKyAgICBVTlVTRURfUEFSQU0oY29u
ZGl0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOworCisgICAgcmV0dXJuIDA7Cit9CisK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMoR0NHTHN5bmMgc3lu
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3luYyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3luYyk7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGllbnRXYWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxh
Z3MsIEdDR0x1aW50NjQgdGltZW91dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3luYyk7CisgICAg
VU5VU0VEX1BBUkFNKGZsYWdzKTsKKyAgICBVTlVTRURfUEFSQU0odGltZW91dCk7CisKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NH
THN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3luYyk7CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKyAgICBVTlVT
RURfUEFSQU0odGltZW91dCk7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIFVOVVNFRF9Q
QVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIHJldHVybiAwOworfQor
CitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFuc2Zv
cm1GZWVkYmFjaygpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCit7
CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmlzVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCBpZCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oaWQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAg
IFVOVVNFRF9QQVJBTShpZCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJl
Z2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9kZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0ocHJpbWl0aXZlTW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywgR0NHTGVudW0gYnVmZmVyTW9kZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHZhcnlpbmdz
KTsKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyTW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikKK3sKKyAgICBVTlVTRURfUEFS
QU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVT
RURfUEFSQU0oYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBV
TlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICBVTlVT
RURfUEFSQU0oc2l6ZSk7Cit9CisKK1ZlY3RvcjxHQ0dMdWludD4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHVuaWZvcm1OYW1lcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3Jh
bSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1OYW1lcyk7CisKKyAgICByZXR1cm4geyB9Owor
fQorCitWZWN0b3I8R0NHTGludD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVu
aWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDR0x1aW50PiYg
dW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIFZlY3RvcjxHQ0dMaW50PiBy
ZXN1bHQodW5pZm9ybUluZGljZXMuc2l6ZSgpLCAwKTsKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBI
QVZFKE9QRU5HTF9FU18zKQorICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgOjpnbEdldEFjdGl2
ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMuc2l6ZSgpLCB1bmlmb3JtSW5kaWNl
cy5kYXRhKCksIHBuYW1lLCByZXN1bHQuZGF0YSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitHQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9y
bUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZv
cm1CbG9ja05hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9Q
QVJBTSh1bmlmb3JtQmxvY2tOYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCit7CisgICAgVU5VU0VE
X1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Cisg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0lu
ZGV4KTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrQmluZGluZyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHgpOwor
ICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNF
RF9QQVJBTShoZWlnaHQpOworICAgIFVOVVNFRF9QQVJBTShmb3JtYXQpOworICAgIFVOVVNFRF9Q
QVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3Jh
bSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxH
Q0dMaW50PiBwYXJhbXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNF
RF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAg
ICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NH
THNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0gLCBHQ0dMaW50cHRyKQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtLCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0s
IEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
KEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXpl
aSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xl
bnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Vi
SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdm9pZD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xp
bnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdD
R0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dM
aW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVp
LCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0
aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xT
cGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKK3sKKyAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51
bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKK3sKKyAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0FOR0xFKEdDR0xlbnVtLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4sIEdDR0xzaXplaSkKK3sKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKK3sKKyAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTGludCB1bnBhY2tBbGlnbm1lbnQpCit7CisgICAgQVNTRVJUKHVucGFja0Fs
aWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAyIHx8IHVucGFja0FsaWdubWVudCA9
PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKKyAgICBVbmlxdWVBcnJheTx1bnNpZ25lZCBj
aGFyPiB6ZXJvOworICAgIHVuc2lnbmVkIHNpemUgPSAwOworICAgIGlmICh3aWR0aCA+IDAgJiYg
aGVpZ2h0ID4gMCkgeworICAgICAgICBQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsKKyAgICAgICAg
cGFyYW1zLmFsaWdubWVudCA9IHVucGFja0FsaWdubWVudDsKKyAgICAgICAgR0NHTGVudW0gZXJy
b3IgPSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQs
IDEsIHBhcmFtcywgJnNpemUsIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBpZiAoZXJyb3Ig
IT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihlcnJvcik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgemVybyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPihzaXplKTsKKyAgICAg
ICAgaWYgKCF6ZXJvKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgIH0KKyAgICB0
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHplcm8uZ2V0KCksIHNpemUpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xMDMsNiArMzE4MCw2IEBAIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRl
ZFJlc3VsdHNGb3JQYWluCiAgICAgcmV0dXJuIHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9CiAKLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuaAppbmRleCA2YzgxZWE3YTg4OTU0MGQ1M2UwNjVkNDUzNGI0Njk1NmYyMGNm
YTFmLi4yNDllOTIxNWI1ZDdhYmVkMDkzMmZmNTRlNjE0NDkyOThiZDQ4ZTg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaApAQCAtMjUsNTMgKzI1LDE3IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaWYgRU5BQkxFKFdFQkdMKQorI2lmIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdM
RSkKIAorI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9u
c0dMT3BlbkdMQ29tbW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTFN0YXRlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1
ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAot
I2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNl
U3dhcENoYWluLmgiCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jZW5kaWYKLQotI2lmIFVTRShD
QSkKLSNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKLSNlbmRpZgotCi0jaWYgVVNFKEFOR0xF
KQotI2luY2x1ZGUgIkFOR0xFVXRpbGl0aWVzLmgiCi0jZWxzZQotI2luY2x1ZGUgIkFOR0xFV2Vi
S2l0QnJpZGdlLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgiCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0LmgiCi0jZW5kaWYKLQotLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGF2
b2lkIHRoZSBuYW1lIGNvbmZsaWN0aW9uIGZvciBOT19FUlJPUi4KLSNpZiBQTEFURk9STShXSU4p
Ci0jdW5kZWYgTk9fRVJST1IKLSNlbGlmIFBMQVRGT1JNKEdUSykKLS8vIFRoaXMgZGVmaW5lIGlz
IGZyb20gdGhlIFgxMSBoZWFkZXJzLCBidXQgaXQncyB1c2VkIGJlbG93LCBzbyB3ZSBtdXN0IHVu
ZGVmaW5lIGl0LgotI3VuZGVmIFZFUlNJT04KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci1PQkpDX0NMQVNTIENBTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYkdMTGF5ZXI7Ci1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU7Ci19Ci0jZW5kaWYgLy8g
UExBVEZPUk0oQ09DT0EpCi0KICNpZiBVU0UoTklDT1NJQSkKIG5hbWVzcGFjZSBOaWNvc2lhIHsK
IGNsYXNzIEdDR0xMYXllcjsKQEAgLTgwLDkgKzQ0LDcgQEAgY2xhc3MgR0NHTExheWVyOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBFeHRlbnNpb25zR0w7Ci0jaWYgVVNFKEFOR0xFKQot
Y2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShP
UEVOR0xfRVMpCiBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xFUzsKICNlbGlmIFVTRShPUEVOR0wp
CiBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0w7CkBAIC05NywyOCArNTksMTEgQEAgY2xhc3MgVGV4
dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOwogCiB0eXBlZGVmIEhhc2hNYXA8Q1N0cmluZywg
dWludDY0X3Q+IFNoYWRlck5hbWVIYXNoOwogCisvLyBCYXNlIGNsYXNzIGZvciBHcmFwaGljc0Nv
bnRleHRHTCBjb250ZXh0cyB0aGF0IHVzZSBPcGVuR0wgb3IgT3BlbkdMIEVTLgogY2xhc3MgV0VC
Q09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0R0wKIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgp
OwotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKLSNp
ZiBVU0UoQU5HTEUpCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZv
cm1EaXNwbGF5KCkgY29uc3Q7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBw
bGF0Zm9ybUNvbmZpZygpIGNvbnN0OwotICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJl
VGFyZ2V0KCk7Ci0gICAgc3RhdGljIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0
UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOwotICAgIHN0YXRp
YyBHQ0dMaW50IEVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChH
Q0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKLSAgICBlbnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNv
dXJjZUJlaGF2aW9yIHsKLSAgICAgICAgLy8gUmVsZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVy
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNhbGxzIGRvbmUgaW4gdGhlIHRocmVhZC4KLSAgICAg
ICAgUmVsZWFzZUN1cnJlbnRDb250ZXh0LAotICAgICAgICAvLyBSZWxlYXNlcyBhbGwgdGhyZWFk
IHJlc291cmNlcyBhZnRlciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjYWxscyBkb25lIGluIHRo
ZSB0aHJlYWQuCi0gICAgICAgIFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMsCi0gICAgICAgIC8vIFJl
bGVhc2VzIGFsbCBnbG9iYWwgc3RhdGUuIFNob3VsZCBiZSB1c2VkIG9ubHkgYWZ0ZXIgYWxsIGRl
cGVuZGluZyBvYmplY3RzIGhhdmUKLSAgICAgICAgLy8gYmVlbiByZWxlYXNlZC4KLSAgICAgICAg
VGVybWluYXRlQW5kUmVsZWFzZVRocmVhZFJlc291cmNlcwotICAgIH07Ci0gICAgc3RhdGljIGJv
b2wgcmVsZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcik7
Ci0jZW5kaWYKIAogICAgIC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRp
c2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKQEAg
LTEzMiwxNSArNzcsOSBAQCBwdWJsaWM6CiAgICAgLy8gRXF1aXZhbGVudCB0byA6OmdsVGV4SW1h
Z2UyRCgpLiBBbGxvd3MgcGl4ZWxzPT0wIHdpdGggbm8gYWxsb2NhdGlvbi4KICAgICB2b2lkIHRl
eEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50
IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpOwogCi0jaWYgIVVTRShBTkdMRSkKLSAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRo
IHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KLSAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KLSAgICAvLyBCeSBkZWZhdWx0
LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNldHRpbmcuCiAgICAgYm9vbCB0
ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCBh
bGlnbm1lbnQgPSA0KTsKLSNlbmRpZgogCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29u
c3QgZmluYWw7Ci0KICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBFbnRyeSBwb2ludHMgZm9y
IFdlYkdMLgogICAgIC8vCkBAIC0yMDYsOSArMTQ1LDcgQEAgcHVibGljOgogICAgIEdDR0xpbnQ2
NCBnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5hbWUpIGZpbmFsOwogICAgIEdDR0xpbnQ2NCBnZXRJ
bnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CiAgICAgR0NH
TGludCBnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1l
KSBmaW5hbDsKLSNpZiAhVVNFKEFOR0xFKQogICAgIHZvaWQgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5
bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQqIHZhbHVlKTsKLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQogICAgIFN0cmluZyBnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKICAgICBTdHJpbmcgZ2V0VW5tYW5nbGVk
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0WzJdLCBHQ0dMc2l6ZWksIGNvbnN0IFN0cmluZyYpOwog
ICAgIEdDR0xpbnQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lKSBmaW5hbDsKQEAgLTI4NiwxMCArMjIzLDggQEAgcHVibGljOgogCiAgICAg
dm9pZCB1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwogICAgIHZvaWQgdmFsaWRh
dGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwotI2lmICFVU0UoQU5HTEUpCiAgICAg
Ym9vbCBjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwg
UGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7CiAgICAgYm9vbCBwcmVjaXNp
b25zTWF0Y2goUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3Qg
ZnJhZ21lbnRTaGFkZXIpIGNvbnN0OwotI2VuZGlmCiAKICAgICB2b2lkIHZlcnRleEF0dHJpYjFm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CiAgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVz
KSBmaW5hbDsKQEAgLTMxNywxMCArMjUyLDggQEAgcHVibGljOgogCiAgICAgLy8gPT09PT09PT09
PSBXZWJHTDIgZW50cnkgcG9pbnRzLgogCi0jaWYgIVVTRShBTkdMRSkKICAgICB2b2lkIGJ1ZmZl
ckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpOwogICAgIHZvaWQgYnVmZmVyU3Vi
RGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgZHN0Qnl0ZU9mZnNldCwgY29uc3Qgdm9p
ZCogc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpOwotI2VuZGlm
CiAgICAgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51
bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zm
c2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkgZmluYWw7CiAKICAgICB2b2lkIGdldEJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+
IGRhdGEpIGZpbmFsOwpAQCAtNDU2LDkgKzM4OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW1p
dGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJlZCgpOwotI2VuZGlmCiAKICAgICB2b2lk
IHNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpIGZpbmFsOwogCkBAIC00ODQsMTIgKzQxNCw4IEBA
IHB1YmxpYzoKICAgICAvLyBhbGwgbWV0aG9kcyBpdCBjb250YWlucyBtYXkgbmVjZXNzYXJpbHkg
YmUgc3VwcG9ydGVkIG9uIHRoZQogICAgIC8vIGN1cnJlbnQgaGFyZHdhcmUuIE11c3QgY2FsbCBF
eHRlbnNpb25zR0w6OnN1cHBvcnRzKCkgdG8KICAgICAvLyBkZXRlcm1pbmUgdGhpcy4KLSNpZiAh
VVNFKEFOR0xFKQogICAgIC8vIFVzZSBjb3ZhcmlhbnQgcmV0dXJuIHR5cGUgZm9yIE9QRU5HTC9P
UEVOR0xfRVMKICAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIGdldEV4dGVuc2lvbnMoKSBm
aW5hbDsKLSNlbHNlCi0gICAgRXh0ZW5zaW9uc0dMJiBnZXRFeHRlbnNpb25zKCkgZmluYWw7Ci0j
ZW5kaWYKIAogICAgIHZvaWQgc2ltdWxhdGVFdmVudEZvclRlc3RpbmcoU2ltdWxhdGVkRXZlbnRG
b3JUZXN0aW5nKSBvdmVycmlkZTsKIApAQCAtNDk3LDMxICs0MjMsMTEgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpIG92ZXJyaWRlOwogCi0jaWYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotICAgIEdyYXBoaWNzQ29udGV4dEdMQ1YqIGFzQ1YoKSBm
aW5hbDsKLSNlbmRpZgotCi0gICAgc3RhdGljIHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmLCBQaXhlbEJ1ZmZlciYmLCBjb25zdCBJbnRTaXplJiBj
YW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmKTsKLQotI2lmIFVTRShBTkdMRSkKLSAgICBjb25z
dGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRlZmF1bHREaXNwbGF5ID0gRUdMX0RF
RkFVTFRfRElTUExBWTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdGV4cHIgc3RhdGlj
IEVHTE5hdGl2ZURpc3BsYXlUeXBlIGxvd1Bvd2VyRGlzcGxheSA9IEVHTF9DQVNUKEVHTE5hdGl2
ZURpc3BsYXlUeXBlLCAtMSk7Ci0gICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5
VHlwZSBoaWdoUGVyZm9ybWFuY2VEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5
cGUsIC0yKTsKLSNlbmRpZgotI2VuZGlmCi0KIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluIG1fc3dhcENoYWlu
OwotICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWdPYmogeyBudWxscHRyIH07Ci0jZW5kaWYK
KwogICAgIEdDR0x1aW50IG1fdGV4dHVyZSB7IDAgfTsKIAotcHJpdmF0ZToKICAgICAvLyBDYWxs
ZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgdGhhdCBldmVudHVhbGx5IGNh
bGwgT3BlbkdMLgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBv
aW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgogICAgIGJv
b2wgbWFrZUNvbnRleHRDdXJyZW50KCkgV0FSTl9VTlVTRURfUkVUVVJOOwpAQCAtNTQ3LDI0ICs0
NTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2Fy
eShjb25zdCBJbnRSZWN0JiA9IEludFJlY3QoKSk7CiAgICAgdm9pZCBhdHRhY2hEZXB0aEFuZFN0
ZW5jaWxCdWZmZXJJZk5lZWRlZChHQ0dMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAotI2lmIFVTRShBTkdMRSkKLSAgICBib29sIHJlc2hh
cGVEaXNwbGF5QnVmZmVyQmFja2luZygpOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgYm9vbCBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpOwotICAgIGJvb2wg
YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGJhY2tp
bmcsIHZvaWQqIHBidWZmZXIpOwotICAgIHN0YXRpYyBib29sIG1ha2VDdXJyZW50KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKTsKLSAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOwotI2VuZGlmCi0jaWYgVVNF
KEFOR0xFKQotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgY29udGV4dCBzaG91bGQgYmUgbG9zdCBk
dWUgdG8gdGltZW91dC4KLSAgICBib29sIHdhaXRBbmRVcGRhdGVPbGRlc3RGcmFtZSgpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKLQotICAgIC8vIFBsYXRmb3JtIHNwZWNpZmljIGJlaGF2aW9yIGZvciBy
ZWxlYXNlUmVzb3VyY2VzKCk7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1SZWxlYXNlVGhyZWFk
UmVzb3VyY2VzKCk7Ci0jZW5kaWYKIAotI2lmICFVU0UoQU5HTEUpCiAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgVW5pcXVlUmVmPHNoOjpTaGFkZXJWYXJpYWJsZT4+IFNoYWRlclN5bWJvbE1h
cDsKIAogICAgIHN0cnVjdCBTaGFkZXJTb3VyY2VFbnRyeSB7CkBAIC02MzEsMTIgKzUyMCw4IEBA
IHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG9yaWdpbmFsU3ltYm9sSW5TaGFk
ZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlw
ZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkZXJOYW1l
SGFzaD4gbmFtZUhhc2hNYXBGb3JTaGFkZXJzOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAKLSNp
ZiBVU0UoQU5HTEUpCi0gICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xBTkdMRT4gbV9leHRlbnNpb25zOwotI2VsaWYgVVNF
KE9QRU5HTF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNp
b25zR0xPcGVuR0xFUzsKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9u
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xPcGVuR0xFUz4gbV9leHRlbnNpb25z
OwpAQCAtNjQ4LDkgKzUzMyw3IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8VmVjdG9yPGZsb2F0
Pj4gbV92ZXJ0ZXhBcnJheTsKIAotI2lmICFVU0UoQU5HTEUpCiAgICAgQU5HTEVXZWJLaXRCcmlk
Z2UgbV9jb21waWxlcjsKLSNlbmRpZgogCiAgICAgR0NHTHVpbnQgbV9mYm8geyAwIH07CiAjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNjU4LDU0ICs1NDEsMTQgQEAgcHJpdmF0ZToK
ICAgICBHQ0dMdWludCBtX2ludGVybWVkaWF0ZVRleHR1cmUgeyAwIH07CiAjZW5kaWYKIAotI2lm
ICFVU0UoQU5HTEUpICYmIFVTRShPUEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKICAgICBH
Q0dMdWludCBtX2RlcHRoQnVmZmVyIHsgMCB9OwogICAgIEdDR0x1aW50IG1fc3RlbmNpbEJ1ZmZl
ciB7IDAgfTsKICNlbmRpZgogICAgIEdDR0x1aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9
OwogCiAgICAgR0NHTHVpbnQgbV9pbnRlcm5hbENvbG9yRm9ybWF0IHsgMCB9OwotI2lmIFVTRShB
TkdMRSkKLSAgICBHQ0dMdWludCBtX2ludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0IHsgMCB9Owot
I2VuZGlmCi0gICAgc3RydWN0IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUgewotICAgICAgICBHQ0dM
dWludCBib3VuZFJlYWRGQk8geyAwIH07Ci0gICAgICAgIEdDR0x1aW50IGJvdW5kRHJhd0ZCTyB7
IDAgfTsKLSAgICAgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRTAgfTsKLQotICAgICAgICB1c2luZyBCb3VuZFRleHR1cmVNYXAgPSBIYXNo
TWFwPEdDR0xlbnVtLAotICAgICAgICAgICAgc3RkOjpwYWlyPEdDR0x1aW50LCBHQ0dMZW51bT4s
Ci0gICAgICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKLSAgICAgICAgICAgIFdURjo6VW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LAotICAgICAgICAgICAgUGFpckhhc2hU
cmFpdHM8V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+PgotICAgICAgICA+OwotICAg
ICAgICBCb3VuZFRleHR1cmVNYXAgYm91bmRUZXh0dXJlTWFwOwotICAgICAgICBHQ0dMdWludCBj
dXJyZW50Qm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gYm91bmRUZXh0dXJlKGFjdGl2ZVRl
eHR1cmVVbml0KTsgfQotICAgICAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4
dHVyZVVuaXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBi
b3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0dXJlVW5pdCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0
b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWUuZmlyc3Q7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0g
ICAgICAgIEdDR0x1aW50IGN1cnJlbnRCb3VuZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIGJvdW5k
VGFyZ2V0KGFjdGl2ZVRleHR1cmVVbml0KTsgfQotICAgICAgICBHQ0dMZW51bSBib3VuZFRhcmdl
dChHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0
byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1cmVVbml0KTsKLSAgICAgICAg
ICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5kKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7Ci0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1
cmVVbml0LCBHQ0dMdWludCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGJvdW5kVGV4dHVyZU1hcC5zZXQodGV4dHVyZVVuaXQsIHN0ZDo6bWFrZV9wYWly
KHRleHR1cmUsIHRhcmdldCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdXNpbmcgVGV4dHVyZVNl
ZWRDb3VudCA9IEhhc2hDb3VudGVkU2V0PEdDR0x1aW50LCBJbnRIYXNoPEdDR0x1aW50PiwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4+OwotICAgICAgICBUZXh0
dXJlU2VlZENvdW50IHRleHR1cmVTZWVkQ291bnQ7Ci0gICAgfTsKIAogICAgIEdyYXBoaWNzQ29u
dGV4dEdMU3RhdGUgbV9zdGF0ZTsKIApAQCAtNzE0LDE2ICs1NTcsNiBAQCBwcml2YXRlOgogICAg
IEdDR0x1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CiAgICAgR0NH
THVpbnQgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OwogCi0jaWYgVVNFKEFOR0xFKQot
ICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxp
bmcuCi0gICAgR0NHTHVpbnQgbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIHsgMCB9Owot
ICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVyZSB3aGVuIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4
dHVyZSBpcyBub24temVyby4KLSAgICBHQ0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZC
TyB7IDAgfTsKLSAgICAvLyBRdWVyaWVkIGF0IGRpc3BsYXkgc3RhcnR1cC4KLSAgICBFR0xpbnQg
bV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCB7IC0xIH07Ci0KLSNlbmRpZgotCiAgICAgLy8g
RXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAgIExpc3RIYXNoU2V0PEdD
R0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKIApAQCAtNzQ0LDI5ICs1NzcsOCBAQCBwcml2YXRl
OgogI2lmIFVTRShDQUlSTykKICAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fdmFvIHsgMCB9OwogI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAvLyBCYWNraW5nIHN0b3JlIGZvciB0aGUg
dGhlIGJ1ZmZlciB3aGljaCBpcyBldmVudHVhbGx5IHVzZWQgZm9yIGRpc3BsYXkuCi0gICAgLy8g
V2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gZmFsc2UsIHRoaXMgaXMgdGhlIGRyYXdpbmcg
YnVmZmVyIGJhY2tpbmcgc3RvcmUuCi0gICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIg
PT0gdHJ1ZSwgdGhpcyBpcyBibGl0dGVkIHRvIGR1cmluZyBkaXNwbGF5IHByZXBhcmUuCi0gICAg
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9kaXNwbGF5QnVmZmVyQmFja2luZzsKLSAgICB2
b2lkKiBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIGJvb2wgbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlv
biB7IGZhbHNlIH07Ci0gICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdCBtX2hpZ2hQ
ZXJmb3JtYW5jZUdQVVJlcXVlc3Q7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShB
VkZPVU5EQVRJT04pCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RT4gbV9jdjsKLSNlbmRpZgotI2lmIFVTRShBTkdMRSkKLSAgICBib29sIG1fdXNlRmVuY2VTeW5j
Rm9yRGlzcGxheVJhdGVMaW1pdCA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG1heFBlbmRpbmdGcmFtZXMgPSAzOwotICAgIHNpemVfdCBtX29sZGVzdEZyYW1lQ29tcGxldGlv
bkZlbmNlIHsgMCB9OwotICAgIFNjb3BlZEdMRmVuY2UgbV9mcmFtZUNvbXBsZXRpb25GZW5jZXNb
bWF4UGVuZGluZ0ZyYW1lc107Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFV
U0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwZDZkMzY3ZjFmOTU0NDViMGE3OWMx
NzRkYTg4YTNlZTUxY2I5Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjg4NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0Bn
bWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQotCi0jaWYg
VVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5oIgotI2Vsc2UK
LSNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0wuaCIKLSNlbmRpZgotI2luY2x1ZGUgIkFOR0xF
V2ViS2l0QnJpZGdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1
ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRpbmcuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24u
aD4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgot
I2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgotCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5U2hpbXMuaCIKLSNl
bGlmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgotI2VsaWYgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFk
ZXJOYW1lSGFzaCo+JiBnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKQotewotICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8
U2hhZGVyTmFtZUhhc2gqPiogc2hhcmVkTmFtZUhhc2g7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25j
ZUZsYWcsIFtdIHsKLSAgICAgICAgc2hhcmVkTmFtZUhhc2ggPSBuZXcgVGhyZWFkU3BlY2lmaWM8
U2hhZGVyTmFtZUhhc2gqPjsKLSAgICB9KTsKLQotICAgIHJldHVybiAqc2hhcmVkTmFtZUhhc2g7
Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihTaGFkZXJO
YW1lSGFzaCogc2hhZGVyTmFtZUhhc2gpCi17Ci0gICAgKmdldEN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlcigpID0gc2hhZGVyTmFtZUhhc2g7Ci19Ci0KLS8vIEhhc2ggZnVuY3Rpb24gdXNlZCBi
eSB0aGUgQU5HTEUgdHJhbnNsYXRvci9jb21waWxlciB0byBkbwotLy8gc3ltYm9sIG5hbWUgbWFu
Z2xpbmcuIFNpbmNlIHRoaXMgaXMgYSBzdGF0aWMgbWV0aG9kLCBiZWZvcmUKLS8vIGNhbGxpbmcg
Y29tcGlsZVNoYWRlciB3ZSBzZXQgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyCi0vLyB0byBw
b2ludCB0byB0aGUgbWFwIGtlcHQgYnkgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuCi0KLXN0YXRpYyB1aW50NjRfdCBuYW1lSGFzaEZvclNoYWRlcihjb25z
dCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuZ3RoKQotewotICAgIGlmICghbGVuZ3RoKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIENTdHJpbmcgbmFtZUFzQ1N0cmluZyA9IENTdHJpbmcobmFtZSk7
Ci0KLSAgICAvLyBMb29rIHVwIG5hbWUgaW4gb3VyIGxvY2FsIG1hcC4KLSAgICBTaGFkZXJOYW1l
SGFzaComIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlciA9ICpnZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIoKTsKLSAgICBTaGFkZXJOYW1lSGFzaDo6aXRlcmF0b3IgZmluZFJlc3VsdCA9
IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+ZmluZChuYW1lQXNDU3RyaW5nKTsKLSAgICBp
ZiAoZmluZFJlc3VsdCAhPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmVuZCgpKQotICAg
ICAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWU7Ci0KLSAgICB1bnNpZ25lZCBoYXNoVmFsdWUg
PSBuYW1lQXNDU3RyaW5nLmhhc2goKTsKLQotICAgIC8vIENvbnZlcnQgdGhlIDMyLWJpdCBoYXNo
IGZyb20gQ1N0cmluZzo6aGFzaCBpbnRvIGEgNjQtYml0IHJlc3VsdAotICAgIC8vIGJ5IHNoaWZ0
aW5nIHRoZW4gYWRkaW5nIHRoZSBzaXplIG9mIG91ciB0YWJsZS4gT3ZlcmZsb3cgd291bGQKLSAg
ICAvLyBvbmx5IGJlIGEgcHJvYmxlbSBpZiB3ZSdyZSBhbHJlYWR5IGhhc2hpbmcgdG8gdGhlIHNh
bWUgdmFsdWUgKGFuZAotICAgIC8vIHdlJ3JlIGhvcGluZyB0aGF0IG92ZXIgdGhlIGxpZmV0aW1l
IG9mIHRoZSBjb250ZXh0IHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSB0aGF0IG1hbnkgc3ltYm9scyku
Ci0KLSAgICB1aW50NjRfdCByZXN1bHQgPSBoYXNoVmFsdWU7Ci0gICAgcmVzdWx0ID0gKHJlc3Vs
dCA8PCAzMikgKyAoY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5zaXplKCkgKyAxKTsKLQot
ICAgIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2V0KG5hbWVBc0NTdHJpbmcsIHJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uKQotewotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAg
RXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwot
ICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRz
KHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMu
ZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOwotICAgICAgICAgICAg
Ly8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgotICAgICAgICAgICAgYXR0cnMuZGVw
dGggPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBm
YWxzZTsKLSAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgIH0KLSAgICBp
ZiAoYXR0cnMuYW50aWFsaWFzICYmICFtX2lzRm9yV2ViR0wyKSB7Ci0gICAgICAgIGlmICghZXh0
ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkgewot
ICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRDb250
ZXh0QXR0cmlidXRlcyhhdHRycyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZXh0ZW5z
aW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwot
ICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUo
KQotewotICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSNpZiAhVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVk
U2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKLSAgICBUZW1wb3JhcnlPcGVuR0xT
ZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKLSNlbmRpZgotCi0gICAg
aWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQotICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgc3RkOjpz
d2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICA6OmdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIGdsRmx1c2goKTsKLQotICAgIEFTU0VSVCht
X3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKG1f
c3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8p
OwotICAgIGVsc2UKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIDo6
Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9zdGF0ZS5ib3VuZFRhcmdldChHTF9URVhUVVJFMCkgPT0gR0xfVEVYVFVSRV8y
RCA/IG1fc3RhdGUuYm91bmRUZXh0dXJlKEdMX1RFWFRVUkUwKSA6IDApOwotICAgIDo6Z2xBY3Rp
dmVUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQpOwotICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKG1fc3RhdGUu
Ym91bmREcmF3RkJPICE9IG1fZmJvKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAg
IDo6Z2xGbHVzaCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQotewotICAgIGJvb2wgbXVzdFJl
c3RvcmVGQk8gPSBmYWxzZTsKLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMp
IHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOwotICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsK
LSAgICAgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKSB7Ci0gICAgICAgICAg
ICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOwotICAg
IGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFw
aGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lk
dGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOwotICAgIGlmICh3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAg
ICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwotICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsK
LQotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotCi0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
ZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFy
eU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwotICAgIAot
ICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKLQotICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgotICAgIEdMZmxv
YXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBHTGlu
dCBjbGVhclN0ZW5jaWwgPSAwOwotICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVF
LCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKLSAgICBH
THVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZm
ZmZmOwotICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKLSAg
ICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKLSAgICA6
OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1Jf
V1JJVEVNQVNLLCBjb2xvck1hc2spOwotICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSk7Ci0KLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0
ZXMoKTsKLQotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICA6OmdsR2V0RmxvYXR2KEdM
X0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKDEpOwotICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQ
VEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVF
KTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgfQotICAg
IGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lM
X0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgw
KTsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVy
cHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0
ZW5jaWxNYXNrQmFjaykpOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9O
VCwgMHhmZmZmZmZmZik7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ss
IDB4ZmZmZmZmZmYpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklU
OwotICAgIH0KLQotICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOwotCi0gICAgOjpnbENsZWFyQ29s
b3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xv
clszXSk7Ci0gICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29s
b3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOwotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKLSAgICAg
ICAgOjpnbERlcHRoTWFzayhkZXB0aE1hc2spOwotICAgIH0KLSAgICBpZiAoYXR0cnMuc3RlbmNp
bCkgewotICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIDo6
Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7Ci0gICAgICAgIDo6
Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7Ci0gICAgfQot
Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwot
Ci0gICAgYXV0byBlcnJvciA9IDo6Z2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvciAhPSBHTF9O
T19FUlJPUikgewotICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBPcGVuR0wgZXJy
b3IgZHVyaW5nIEdyYXBoaWNzQ29udGV4dEdMIGJ1ZmZlciBpbml0aWFsaXphdGlvbiAoJWQpLiIs
IGVycm9yKTsKLSAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQ
bGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX3No
YWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKLSAgICBBU1NFUlQobV9zaGFk
ZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKLSAgICBjb25zdCBhdXRvJiB2
ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7
Ci0gICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
ZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6U2hhZGVy
VmFyaWFibGU+IGNvbWJpbmVkVmFyeWluZ3M7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2ZXJ0ZXhT
eW1ib2wgOiB2ZXJ0ZXhFbnRyeS52YXJ5aW5nTWFwKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYg
c3ltYm9sTmFtZSA9IHZlcnRleFN5bWJvbC5rZXk7Ci0gICAgICAgIC8vIFRoZSB2YXJ5aW5nIG1h
cCBpbmNsdWRlcyB2YXJpYWJsZXMgZm9yIGVhY2ggaW5kZXggb2YgYW4gYXJyYXkgdmFyaWFibGUu
Ci0gICAgICAgIC8vIFdlIG9ubHkgd2FudCBhIHNpbmdsZSB2YXJpYWJsZSB0byByZXByZXNlbnQg
dGhlIGFycmF5LgotICAgICAgICBpZiAoc3ltYm9sTmFtZS5lbmRzV2l0aCgiXSIpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gRG9uJ3QgY291bnQgYnVpbHQgaW4gdmFyeWlu
Z3MuCi0gICAgICAgIGlmIChzeW1ib2xOYW1lID09ICJnbF9GcmFnQ29vcmQiIHx8IHN5bWJvbE5h
bWUgPT0gImdsX0Zyb250RmFjaW5nIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Qb2ludENvb3JkIikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50U3lt
Ym9sID0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmZpbmQoc3ltYm9sTmFtZSk7Ci0gICAgICAg
IGlmIChmcmFnbWVudFN5bWJvbCAhPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAuZW5kKCkpCi0g
ICAgICAgICAgICBjb21iaW5lZFZhcnlpbmdzLmFkZChzeW1ib2xOYW1lLCBmcmFnbWVudFN5bWJv
bC0+dmFsdWUpOwotICAgIH0KLQotICAgIHNpemVfdCBudW1WYXJ5aW5ncyA9IGNvbWJpbmVkVmFy
eWluZ3Muc2l6ZSgpOwotICAgIGlmICghbnVtVmFyeWluZ3MpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiB2YXJpYWJsZXM7Ci0gICAg
dmFyaWFibGVzLnJlc2VydmUoY29tYmluZWRWYXJ5aW5ncy5zaXplKCkpOwotICAgIGZvciAoY29u
c3QgYXV0byYgdmFyeWluZ1N5bWJvbCA6IGNvbWJpbmVkVmFyeWluZ3MudmFsdWVzKCkpCi0gICAg
ICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyeWluZ1N5bWJvbCk7Ci0KLSAgICBHQ0dMaW50IG1h
eFZhcnlpbmdWZWN0b3JzID0gMDsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIDo6Z2xHZXRJbnRl
Z2VydihNQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwotI2Vsc2UKLSAg
ICBpZiAobV9pc0ZvcldlYkdMMikKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZ
SU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEdD
R0xpbnQgbWF4VmFyeWluZ0Zsb2F0cyA9IDA7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9N
QVhfVkFSWUlOR19GTE9BVFMsICZtYXhWYXJ5aW5nRmxvYXRzKTsKLSAgICAgICAgbWF4VmFyeWlu
Z1ZlY3RvcnMgPSBtYXhWYXJ5aW5nRmxvYXRzIC8gNDsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1
cm4gc2g6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5nVmVjdG9y
cywgdmFyaWFibGVzKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lz
aW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0
IGZyYWdtZW50U2hhZGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5j
b250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29u
dGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKLSAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7Ci0gICAgY29uc3QgYXV0
byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIp
LT52YWx1ZTsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6R0xlbnVtPiB2ZXJ0ZXhTeW1ib2xQ
cmVjaXNpb25NYXA7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdmVydGV4RW50cnku
dW5pZm9ybU1hcCkgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVu
dHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7Ci0gICAgICAgIHZlcnRleFN5bWJvbFByZWNpc2lv
bk1hcC5hZGQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSks
IGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbik7Ci0gICAgfQotCi0gICAgZm9yIChjb25zdCBh
dXRvJiBlbnRyeSA6IGZyYWdtZW50RW50cnkudW5pZm9ybU1hcCkgewotICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7Ci0g
ICAgICAgIGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1h
cC5maW5kKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpKTsK
LSAgICAgICAgaWYgKHZlcnRleFN5bWJvbCAhPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZW5k
KCkgJiYgdmVydGV4U3ltYm9sLT52YWx1ZSAhPSBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0g
dGV4dHVyZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKLSAgICA6Omds
QWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKLSAgICA6OmdsQXR0
YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0
cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9M
X1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJMb2Nh
dGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1l
LnV0ZjgoKS5kYXRhKCkpOwotICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5k
ZXgsIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdMdWludCBmYm87Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAg
ICAgZmJvID0gYnVmZmVyOwotICAgIGVsc2UKLSAgICAgICAgZmJvID0gKGNvbnRleHRBdHRyaWJ1
dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKLSAgICBBU1NFUlQo
dGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRG
Qk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7
Ci0gICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBm
Ym87Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVy
YnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3Rh
dGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7Ci0gICAgOjpnbEJpbmRUZXh0
dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYg
Ymx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRp
b24oR0NHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1v
ZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1v
ZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5k
RnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0gICAgICAgCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0
UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRnVu
Y1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NH
THNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVzYWdlKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwg
c2l6ZSwgMCwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZm
ZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3Qgdm9pZD4gZGF0YSwgR0NHTGVu
dW0gdXNhZ2UpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0
YSwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJE
YXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1
ZlNpemUsIGRhdGEuZGF0YSk7Ci19Ci0KLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047
Ci0KLSAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIs
IEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENsZWFyQ29s
b3IociwgZywgYiwgYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
KEdDR0xiaXRmaWVsZCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDbGVhcihtYXNrKTsKLSAgICBjaGVja0dQVVN0YXR1
cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NH
TGludCBzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBH
Q0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29sb3JNYXNrKHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBo
YXNoaW5nIHdvcmtzLCB3ZQotICAgIC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1h
cCBvd25lZCBieSB0aGlzIGNvbnRleHQuCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVz
b3VyY2VzID0gbV9jb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICBTaEhhc2hGdW5jdGlvbjY0
IHByZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOwotICAg
IEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9IG5hbWVIYXNoRm9yU2hhZGVyOwotCi0gICAg
aWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVy
cyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7Ci0gICAgbV9jb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdM
RShzaGFkZXIpOwotCi0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0gcHJldmlvdXNI
YXNoRnVuY3Rpb247Ci0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMp
OwotICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsKLQotICAgIGlm
ICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0g
dHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOwotICAgIGludCB0cmFuc2xhdGVkU2hhZGVy
TGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBMT0coV2Vi
R0wsICItLS0gYmVnaW4gb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIG9y
aWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4iLCBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51dGY4
KCkuZGF0YSgpKTsKLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gdHJhbnNsYXRlZCBzaGFkZXIg
c291cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLSIsIHRy
YW5zbGF0ZWRTaGFkZXJQdHIpOwotCi0gICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0
cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7Ci0gICAgCi0gICAg
OjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLSAgICAKLSAgICBpbnQgY29tcGlsZVN0YXR1czsK
LSAgICAKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBp
bGVTdGF0dXMpOwotCi0gICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5
ID0gcmVzdWx0LT52YWx1ZTsKLQotICAgIC8vIFBvcHVsYXRlIHRoZSBzaGFkZXIgbG9nCi0gICAg
R0xpbnQgbGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xP
R19MRU5HVEgsICZsZW5ndGgpOwotCi0gICAgaWYgKGxlbmd0aCkgewotICAgICAgICBHTHNpemVp
IHNpemUgPSAwOwotICAgICAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAgICAg
IDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkp
OwotCi0gICAgICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07
Ci0gICAgICAgIGVudHJ5LmxvZyA9IGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3Ry
aW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci0gICAgfQotCi0gICAgaWYgKGNvbXBpbGVTdGF0dXMg
IT0gR0xfVFJVRSkgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIExP
RyhXZWJHTCwgIkVycm9yOiBzaGFkZXIgdHJhbnNsYXRvciBwcm9kdWNlZCBhIHNoYWRlciB0aGF0
IE9wZW5HTCB3b3VsZCBub3QgY29tcGlsZS4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBTaGFk
ZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKLQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+
dmFsdWU7Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50cnku
c291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJT
b3VyY2VDU3RyaW5nLmRhdGEoKTsKLSAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVy
U291cmNlQ1N0cmluZy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBkaXJl
Y3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNlIC0t
LVxuIiwgc2hhZGVyU291cmNlUHRyKTsKLQotICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAx
LCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKLQotICAgIDo6Z2xDb21w
aWxlU2hhZGVyKHNoYWRlcik7Ci0KLSAgICBpbnQgY29tcGlsZVN0YXR1czsKLQotICAgIDo6Z2xH
ZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAg
ICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7Ci0gICAgICAgIGVudHJ5LmlzVmFsaWQg
PSB0cnVlOwotICAgICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVy
IHN1Y2NlZWRlZC4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFs
c2U7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hh
ZGVyIGZhaWxlZC4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0
cmlidXRlcygpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRE
cmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICB9Ci0gICAgOjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChhdHRycy5hbnRp
YWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IG1fbXVsdGlzYW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
eG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRl
cygpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmRE
cmF3RkJPKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJP
ID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5l
Y2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAg
ICB9Ci0gICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYg
bV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlz
YW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShH
Q0dMZW51bSBtb2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xDdWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERlcHRoRnVuYyhm
dW5jKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xi
b29sZWFuIGZsYWcpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbERlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxh
dGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VS
VChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsK
LSAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEaXNhYmxlKGNh
cCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheShHQ0dMdWludCBpbmRleCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dM
ZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERyYXdBcnJh
eXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NH
THNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRHJh
d0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0
YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsRW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlz
aCgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbEZpbmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
bHVzaCgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNo
bWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZl
cikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBy
ZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdD
R0xpbnQgbGV2ZWwpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcm9u
dEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRl
TWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQot
ewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHTGludCBtYXhBdHRy
aWJ1dGVTaXplID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9B
VFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOwotICAgIFZlY3RvcjxHTGNo
YXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xF
TkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9
IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6Z2xH
ZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1lTGVu
Z3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3Jp
Z2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIFN0
cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOwotICAgIAotI2lmbmRlZiBOREVCVUcKLSAg
ICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwotICAgIExPRyhX
ZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgYXR0cmlidXRlICVkIGZyb20gJyVz
JyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9y
aWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotCi0gICAgaW5mby5uYW1lID0gb3Jp
Z2luYWxOYW1lOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCi17Ci0gICAgR0NHTGludCBzeW1ib2xDb3VudDsKLSAgICBhdXRvIHJl
c3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAg
aWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAg
ICAgICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250
ZXh0R0w6OkFDVElWRV9BVFRSSUJVVEVTLCAmc3ltYm9sQ291bnQpOwotICAgICAgICByZXN1bHQg
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIH0KLSAg
ICAKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+
dmFsdWU7Ci0gICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmls
dGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmls
dGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwW2luZGV4XSA6IC0xOwotCi0gICAgcmV0dXJu
IGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAg
IGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdMaW50IG1heFVuaWZvcm1T
aXplID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JN
X01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7Ci0KLSAgICBWZWN0b3I8R0xjaGFyPiBuYW1l
KG1heFVuaWZvcm1TaXplKTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRl
cyBudWxsIHRlcm1pbmF0aW9uLgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xp
bnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6Z2xHZXRBY3RpdmVVbmlm
b3JtKHByb2dyYW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAm
dHlwZSwgbmFtZS5kYXRhKCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5h
bWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIFN0cmluZyhuYW1lLmRhdGEo
KSwgbmFtZUxlbmd0aCkpOwotICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICBTdHJpbmcgdW5pZm9y
bU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwotICAgIExPRyhXZWJHTCwgIlByb2dyYW0g
JWQgaXMgbWFwcGluZyBhY3RpdmUgdW5pZm9ybSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dy
YW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgp
LmRhdGEoKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Ci0g
ICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3Jt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGlu
Zm8pCi17Ci0gICAgR0NHTGludCBzeW1ib2xDb3VudDsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCA9
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICBnZXROb25C
dWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElW
RV9VTklGT1JNUywgJnN5bWJvbENvdW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICB9Ci0gICAgCi0gICAgQWN0aXZl
U2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOwotICAgIEdD
R0x1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxV
bmlmb3JtSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5p
Zm9ybUluZGV4TWFwW2luZGV4XSA6IC0xOwotICAgIAotICAgIHJldHVybiBnZXRBY3RpdmVVbmlm
b3JtSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVjdCog
c2hhZGVycykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEF0dGFjaGVk
U2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwotfQotCi1zdGF0aWMg
U3RyaW5nIGdlbmVyYXRlSGFzaGVkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYg
KG5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB1aW50NjRfdCBudW1i
ZXIgPSBuYW1lSGFzaEZvclNoYWRlcihuYW1lLnV0ZjgoKS5kYXRhKCksIG5hbWUubGVuZ3RoKCkp
OwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJ3ZWJnbF8iLCBoZXgobnVtYmVyLCBMb3dlcmNhc2Up
KTsKLX0KLQotc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5H
TEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1i
b2xNYXAoc3ltYm9sVHlwZSk7Ci0gICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1hcC5maW5k
KG5hbWUpOwotICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBhdXRvJiBtYXBwZWROYW1lID0gc3ltYm9sRW50
cnktPnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7Ci0gICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1l
LmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBB
TkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIEdDR0xzaXplaSBjb3VudCA9IDA7Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJd
ID0geyB9OwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRl
cnMpOwotCi0gICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRl
cnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAgICAg
ICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgLy8gV2UgbWln
aHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCi0g
ICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOwotICAgIGlm
IChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgYXV0byBsaW5r
ZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlw
ZSwgbmFtZSk7Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1h
cHBlZE5hbWUudmFsdWUoKTsKLSAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hh
ZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAg
ICAgICAgaWYgKG1hcHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1
ZSgpOwotICAgIH0KLQotICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9B
VFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJl
IGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJz
IGhhdmUgYmVlbiBjb21waWxlZCwKLSAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVk
IHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgotICAgICAgICBpZiAoIW5hbWVIYXNo
TWFwRm9yU2hhZGVycykKLSAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VV
bmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Ci0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOwotCi0gICAgICAgIGF1dG8gZ2Vu
ZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKLQotICAgICAgICBzZXRDdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7Ci0KLSAgICAgICAgbV9wb3NzaWJseVVu
dXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7Ci0KLSAgICAgICAgcmV0
dXJuIGdlbmVyYXRlZE5hbWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xJ
blNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1i
b2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvIHJlc3Vs
dCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9s
VHlwZSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewot
ICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNf
c3RyKCkpCi0gICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OwotICAgIH0KLSAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVy
U3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0NHTHNp
emVpIGNvdW50OwotICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXTsKLSAgICBnZXRBdHRh
Y2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLSAgICAKLSAgICBmb3Ig
KEdDR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBvcmlnaW5h
bE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJv
bFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQotICAgICAgICAgICAgcmV0
dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFdlIG1pZ2h0IGhhdmUg
ZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgotICAgIGF1dG8g
cmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0
ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIGF1dG8gbGlua2VkU2hhZGVy
cyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxT
eW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBu
YW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBvcmln
aW5hbE5hbWUudmFsdWUoKTsKLSAgICAgICAgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJ
blNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7
Ci0gICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxO
YW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJP
TF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQXR0cmli
dXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55
IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAotICAgICAgICAvLyBhbmQgYXJlbid0IGV2ZW4g
cmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCi0KLSAgICAgICAgY29u
c3QgYXV0byYgY2FjaGVkID0gbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5maW5kKG5hbWUp
OwotICAgICAgICBpZiAoY2FjaGVkICE9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZW5k
KCkpCi0gICAgICAgICAgICByZXR1cm4gY2FjaGVkLT52YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbmFtZTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1i
b2xOYW1lKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50LCBjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChzaXplX3Qgc3ltYm9sVHlwZSA9IDA7IHN5bWJvbFR5
cGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihTSEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORyk7ICsr
c3ltYm9sVHlwZSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKLSAgICAgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ldKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0g
bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwID0g
cmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3RhdGljX2Nhc3Q8ZW51bSBBTkdMRVNoYWRlclN5bWJv
bFR5cGU+KHN5bWJvbFR5cGUpKTsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9s
RW50cnkgOiBzeW1ib2xNYXApIHsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xF
bnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBzeW1ib2xFbnRyeS5rZXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLQotICAgIFN0cmlu
ZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZ
UEVfQVRUUklCVVRFLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRp
b24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51
dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4g
LTE7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gLTE7
Ci0KLQotICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNl
OwotCi0gICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBj
cmVhdGluZyBhIGhhbmcgaWYKLSAgICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0
IGNhdXNlcyBpdCB0byBuZXZlciBjbGVhciB0aGUgZXJyb3IuCi0gICAgLy8gT3RoZXJ3aXNlLCB3
ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwgd2UgZ290IE5PX0VSUk9SLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewotICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGdsR2V0
RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci0gICAgICAgIG1vdmVk
QW5FcnJvciA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKLX0KLQot
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKLXsKLSAgICBpZiAo
IW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBOZWVkIHRvIG1vdmUg
dGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCi0g
ICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVk
IGJlaGF2aW9yIG9mIGJvdGgKLSAgICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMg
dG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9uY2UuCi0gICAgICAgIG1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMu
dGFrZUZpcnN0KCk7Ci0gICAgfQotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwotCi0gICAgcmV0dXJuIDo6Z2xHZXRF
cnJvcigpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhH
Q0dMZW51bSBuYW1lKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
SGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZm
ZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNCdWZm
ZXIoYnVmZmVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
RW5hYmxlZChHQ0dMZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2Fw
KTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVy
KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzRnJhbWVi
dWZmZXJFWFQoZnJhbWVidWZmZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAo
IXByb2dyYW0pCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6Omds
SXNQcm9ncmFtKHByb2dyYW0pOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0g
ICAgaWYgKCFyZW5kZXJidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAg
IHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKLX0KLQotR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyKQotewotICAgIGlmICghc2hhZGVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0K
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7
Ci0KLSAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
KQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0g
ICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbExpbmVXaWR0aCh3
aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBHQ0dMc2l6
ZWkgY291bnQgPSAwOwotICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKLSAg
ICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLQotICAg
IGlmIChjb3VudCA9PSAyKQotICAgICAgICBtX2xpbmtlZFNoYWRlck1hcC5zZXQocHJvZ3JhbSwg
c3RkOjptYWtlX3BhaXIoc2hhZGVyc1swXSwgc2hhZGVyc1sxXSkpOwotCi0gICAgOjpnbExpbmtQ
cm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhl
bFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsUGl4ZWxTdG9yZWko
cG5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdv
bk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFBvbHlnb25P
ZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotCi0gICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7Ci0KLSAgICBlbnRyeS5zb3VyY2UgPSBz
dHJpbmc7Ci0KLSAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBXVEZNb3ZlKGVudHJ5
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xl
bnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsRnVuYyhm
dW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVu
Y2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVm
LCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJl
ZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNr
KEdDR0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBH
Q0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFp
bCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BT
ZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NH
TGVudW0genBhc3MpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6
cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHZhbHVlKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMaW50IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZh
bHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTFm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQg
djAsIEdDR0xmbG9hdCB2MSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJy
YXkuYnVmU2l6ZSAlIDIpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAv
IDIsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xm
bG9hdCB2MikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSAzKSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBh
cnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRm
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQg
djIsIEdDR0xmbG9hdCB2MykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2
Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NF
UlQoIShhcnJheS5idWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3Jt
MWkobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYw
LCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17Ci0gICAgQVNT
RVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXku
YnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwg
R0NHTGludCB2MikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5i
dWZTaXplICUgMykpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywg
YXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBH
Q0dMaW50IHYzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJh
eS5idWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8g
NCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNp
emUgJSA0KSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0
LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgOSkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gOSwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAg
QVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDE2KSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIGFycmF5LmJ1ZlNpemUgLyAxNiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0pCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17
Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xmbG9hdCB2MCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhB
dHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMj4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjJm
dihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSwgR0NHTGZsb2F0IHYyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dM
dWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVy
dGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwg
R0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0
cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQsIDQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29s
ZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJp
ZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNl
dCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKLXsKLSAgICByZXR1cm4g
Z2V0RXh0ZW5zaW9ucygpLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJy
YXkpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRlbGV0ZVZlcnRleEFycmF5T0VTKGFycmF5KTsK
LX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXko
UGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmlz
VmVydGV4QXJyYXlPRVMoYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICBnZXRFeHRl
bnNpb25zKCkuYmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xi
b29sZWFuPiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlLmRhdGEpOwotfQot
Ci1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwot
Ci0gICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0g
ICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRG
bG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdl
dEZsb2F0dihwbmFtZSwgdmFsdWUuZGF0YSk7Ci19Ci0KLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQotewotICAgIFVOVVNFRF9Q
QVJBTShwbmFtZSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwotICAgIC8vIEZJWE1FIDE0MTE3ODog
QmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBn
bDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5n
IE9wZW5HTCBFUyAzLjAuCi0gICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsK
LSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0NHTGludDY0
IHZhbHVlID0gMDsKLSAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdl
IG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBp
bml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgotICAgIC8v
IDo6Z2xHZXRJbnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHZh
bHVlOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVu
dCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGF0dGFjaG1l
bnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQotICAgICAgICBhdHRhY2htZW50ID0gREVQ
VEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCi0g
ICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0
YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0xlbnVtIHBuYW1lKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIDo6Z2xHZXRQ
cm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9s
Q291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCog
dmFsdWUpCi17Ci0gICAgQVNTRVJUKEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1lIHx8IEFDVElW
RV9VTklGT1JNUyA9PSBwbmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChw
cm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFw
LmVuZCgpKSB7Ci0gICAgICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBlKHBu
YW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLnNldChwcm9ncmFtLCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMoKSk7Ci0gICAg
QWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pLT52YWx1ZTsKLQotICAgIC8vIFJldHJpZXZlIHRo
ZSBhY3RpdmUgYXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEgbWFwcGlu
ZyBvZgotICAgIC8vIG91ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhlIHJlYWwg
dW5maWx0ZXJlZCBpbmRleGVzIGluc2lkZSBPcGVuR0wuCi0gICAgR0NHTGludCBhdHRyaWJ1dGVD
b3VudCA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklCVVRF
UywgJmF0dHJpYnV0ZUNvdW50KTsKLSAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1
dGVDb3VudDsgKytpKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0
aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKLSAgICAgICAgaWYgKGluZm8ubmFtZS5z
dGFydHNXaXRoKCJnbF8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHN5bWJv
bENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuYXBwZW5kKGkpOwotICAg
IH0KLSAgICAKLSAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMuCi0gICAgR0NHTGludCB1
bmlmb3JtQ291bnQgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX1VO
SUZPUk1TLCAmdW5pZm9ybUNvdW50KTsKLSAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCB1bmlm
b3JtQ291bnQ7ICsraSkgewotICAgICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGdldEFj
dGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGksIGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1l
LnN0YXJ0c1dpdGgoImdsXyIpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAg
ICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBlbmQo
aSk7Ci0gICAgfQotICAgIAotICAgICp2YWx1ZSA9IHN5bWJvbENvdW50cy5jb3VudEZvclR5cGUo
cG5hbWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xl
ZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBHQ0dMc2l6ZWkgY291bnQsIGNv
bnN0IFN0cmluZyYgbG9nKQotewotICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRlckluZm9M
b2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgpKTsKLQotICAgIEpTQzo6WWFycjo6UmVndWxhckV4
cHJlc3Npb24gcmVnRXhwKCJ3ZWJnbF9bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl0rIik7Ci0KLSAg
ICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExvZzsKLSAgICAKLSAgICAvLyBBTkdMRSBpbnNlcnRz
IGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0aGUgc2hhZGVyIHNvdXJjZSB0aGF0Ci0gICAgLy8g
Y2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNvbXBpbGVycy4gVGhlcmUgaXMgbm8gcG9pbnQgc2hv
d2luZwotICAgIC8vIHRoaXMgd2FybmluZyB0byB0aGUgdXNlciBzaW5jZSB0aGV5IGRpZG4ndCB3
cml0ZSB0aGUgY29kZSB0aGF0Ci0gICAgLy8gaXMgY2F1c2luZyBpdC4KLSAgICBzdGF0aWMgY29u
c3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhbmdsZVdhcm5pbmcgeyAiV0FSTklORzogMDoxOiBl
eHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxuIl9zIH07Ci0g
ICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFydHNXaXRoKGFuZ2xlV2FybmluZykgPyBhbmdsZVdh
cm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOwotICAgIGludCBtYXRjaGVkTGVuZ3RoID0gMDsKLQot
ICAgIGRvIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcmVnRXhwLm1hdGNoKGxvZywgc3RhcnRGcm9t
LCAmbWF0Y2hlZExlbmd0aCk7Ci0gICAgICAgIGlmIChzdGFydCA9PSAtMSkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFy
dEZyb20sIHN0YXJ0IC0gc3RhcnRGcm9tKSk7Ci0gICAgICAgIHN0YXJ0RnJvbSA9IHN0YXJ0ICsg
bWF0Y2hlZExlbmd0aDsKLQotICAgICAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWRTeW1ib2wgPSBs
b2cuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaGVkTGVuZ3RoKTsKLSAgICAgICAgY29uc3QgU3RyaW5n
JiBtYXBwZWRTeW1ib2wgPSBtYXBwZWRTeW1ib2xOYW1lKHNoYWRlcnMsIGNvdW50LCBtYW5nbGVk
U3ltYm9sKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRGVtYW5nbGluZzogJXMgdG8gJXMiLCBtYW5n
bGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCksIG1hcHBlZFN5bWJvbC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChtYXBwZWRTeW1ib2wpOwotICAgIH0gd2hpbGUgKHN0
YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4obG9nLmxlbmd0aCgpKSk7Ci0KLSAgICBwcm9jZXNz
ZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFy
dEZyb20pKTsKLQotICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMi
LCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gcHJv
Y2Vzc2VkTG9nLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIEFT
U0VSVChwcm9ncmFtKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFBy
b2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIGlmICgh
bGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgR0xzaXplaSBzaXplID0g
MDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAgOjpnbEdldFByb2dyYW1J
bmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgIEdDR0xz
aXplaSBjb3VudDsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07Ci0gICAgZ2V0QXR0
YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICByZXR1cm4g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBH
Q0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRh
cmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBHQ0dMaW50IHZh
bHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
dmFsdWU7Ci0KLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBERUxFVEVf
U1RBVFVTOgotICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAgIDo6Z2xHZXRTaGFkZXJpdihz
aGFkZXIsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENPTVBJTEVf
U1RBVFVTOgotICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQot
ICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxp
ZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgotICAgICAgICBp
ZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgICAgdmFsdWUg
PSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6Ci0gICAgICAgIHZhbHVlID0gZ2V0U2hhZGVyU291
cmNlKHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7Ci0gICAgfQotICAgIHJldHVybiB2
YWx1ZTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZv
TG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsgCi0KLSAgICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSBy
ZXN1bHQtPnZhbHVlOwotICAgIGlmICghZW50cnkuaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIGVu
dHJ5LmxvZzsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2KHNo
YWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVj
dG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRl
ciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xv
ZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAg
IHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKLX0KLQotR0NHTGZsb2F0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUpCi17Ci0gICAgR0NHTGZsb2F0IHZhbHVlID0gMC5mOwotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6OmdsR2V0VGV4UGFyYW1l
dGVyZnYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdD
R0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgOjpn
bEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZh
bHVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMZmxv
YXQ+IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50
PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRh
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0x1aW50
PiB2YWx1ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotfQotCi1HQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAg
U3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1C
T0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2Nh
dGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1l
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUdDR0xzaXplaXB0ciBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBH
Q0dMZW51bSBwbmFtZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIEdMdm9pZCogcG9pbnRlciA9IDA7Ci0gICAgOjpnbEdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiAhVVNFKE9QRU5HTF9F
UykKLSAgICBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykKLSAgICAgICAgdHlwZSA9IEdMX0hB
TEZfRkxPQVRfQVJCOwotI2VuZGlmCi0KLSAgICBpZiAobV91c2luZ0NvcmVQcm9maWxlKSAgewot
ICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhh
dCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCi0g
ICAgICAgIC8vIHRvIGFkYXB0IHRoZW0sIGFzIHdlIGRvIGluIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJEKCkuCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNh
c2UgQUxQSEE6Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkVEIHRvIGJhY2sgR0xf
QUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAgICAgICAgICAgIGZvcm1hdCA9IFJFRDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKLSAgICAg
ICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRyB0byBiYWNrIEdMX0xVTUlOQU5DRV9BTFBIQSwg
c28gZG8gaXQgaGVyZSBhcyB3ZWxsLgotICAgICAgICAgICAgZm9ybWF0ID0gUkc7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4
ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZl
ciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgotICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmRh
dGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91
bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVz
c2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQg
Ym9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0
YSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOwotICAgIG1f
c3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NH
TGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRh
dGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOwot
ICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0
dXJlKCkpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVCdWZmZXIoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuQnVmZmVycygxLCAmbyk7
Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZy
YW1lYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGds
Q3JlYXRlUHJvZ3JhbSgpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2Vu
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBl
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBH
TF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKLX0KLQotUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQg
byA9IDA7Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdsRGVsZXRl
QnVmZmVycygxLCAmYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChm
cmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewotICAgICAgICAvLyBNYWtlIHN1
cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCi0g
ICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgotICAgICAgICBiaW5k
RnJhbWVidWZmZXIoRlJBTUVCVUZGRVIsIDApOwotICAgIH0KLSAgICBnbERlbGV0ZUZyYW1lYnVm
ZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYWRlclBy
b2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAgZ2xEZWxldGVQcm9ncmFt
KHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5k
ZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVSZW5kZXJi
dWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVT
aGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
VGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVN
YXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgewotICAgICAgICByZXR1cm4g
a2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKLSAgICB9KTsKLSAgICBnbERlbGV0ZVRl
eHR1cmVzKDEsICZ0ZXh0dXJlKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVtb3Zl
QWxsKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50aGVz
aXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikKLXsKLSAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1
cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCB0bwotICAgIC8vIHByZXNl
cnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRvIGdldEVycm9yIHdpbGwgZ2V0
Ci0gICAgLy8gYW55IGVycm9ycyBmcm9tIGdsRXJyb3IgYmVmb3JlIHRoZSBlcnJvciB3ZSBhcmUg
c3ludGhlc2l6aW5nLgotICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAg
IG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZvcmNlQ29udGV4dExvc3QoKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDog
Y29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9z
dCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgp
Ci17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAg
ICAgICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4dCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKLXsKLSAgICBm
b3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGll
bnQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdB
cnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNv
dW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3QXJy
YXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwotICAgIGNo
ZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdF
bGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdl
dEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlw
ZSwgb2Zmc2V0LCBwcmltY291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5k
ZXgsIEdDR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJp
YkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSAm
JiBFTkFCTEUoV0VCR0wyKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZl
UmVzdGFydEluZGV4KEdDR0x1aW50IGluZGV4KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xQcmltaXRpdmVSZXN0YXJ0SW5kZXgo
aW5kZXgpOwotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZl
ckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotICAgIFVOVVNFRF9QQVJBTSh1c2Fn
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0
aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNyY0Rh
dGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQotewotICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShkc3RCeXRlT2Zmc2V0KTsKLSAgICBVTlVT
RURfUEFSQU0oc3JjRGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGxlbmd0aCk7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5H
TF9FU18zKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEo
R0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVh
ZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bENvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3
cml0ZU9mZnNldCwgc2l6ZSk7Ci19Ci0jZWxzZQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyLCBHQ0dM
aW50cHRyLCBHQ0dMc2l6ZWlwdHIpCi17Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKLXsKLSNpZiBIQVZFKE9QRU5HTF80KSB8
fCBIQVZFKE9QRU5HTF9FU18zKQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBHQ0dMdm9pZCogcHRyID0gOjpnbE1hcEJ1ZmZlclJhbmdlKHRhcmdl
dCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIEdyYXBoaWNzQ29udGV4dEdMOjpNQVBfUkVBRF9CSVQp
OwotICAgIGlmICghcHRyKQotICAgICAgICByZXR1cm47Ci0gICAgbWVtY3B5KGRhdGEuZGF0YSwg
cHRyLCBkYXRhLmJ1ZlNpemUpOwotICAgIGlmICghOjpnbFVubWFwQnVmZmVyKHRhcmdldCkpCi0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJB
TShvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLSAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotI2VuZGlmCi19Ci0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3Jj
WDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQg
ZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xi
aXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gw
KTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTApOwotICAgIFVOVVNFRF9QQVJBTShzcmNYMSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WDApOwotICAgIFVO
VVNFRF9QQVJBTShkc3RZMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFgxKTsKLSAgICBVTlVTRURf
UEFSQU0oZHN0WTEpOwotICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKLSAgICBVTlVTRURfUEFSQU0o
ZmlsdGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9y
bUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOwotICAg
IFVOVVNFRF9QQVJBTSh0ZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwotICAgIFVO
VVNFRF9QQVJBTShsYXllcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlu
dmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xl
bnVtPiBhdHRhY2htZW50cykKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVT
RURfUEFSQU0oYXR0YWNobWVudHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZm
ZXIoR0NHTGVudW0gc3JjKQotewotICAgIFVOVVNFRF9QQVJBTShzcmMpOwotfQotCi0jaWYgSEFW
RShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IGRhdGEpCi17Ci0j
aWYgVVNFKE9QRU5HTF9FUykKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAg
IFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZlNpemUpOwotICAgIFVO
VVNFRF9QQVJBTShwYXJhbXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
dGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQs
IGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKLSAgICBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsK
LX0KLSNlbHNlCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1h
dGl2KEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPEdDR0xpbnQ+KQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNp
emVpKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQo
R0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0s
IEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17
Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdD
R0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXQpOwotICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5VU0VEX1BBUkFNKHhvZmZzZXQp
OwotICAgIFVOVVNFRF9QQVJBTSh5b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oem9mZnNldCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURf
UEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotfQotCi1HQ0dMaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9n
cmFtKTsKLSAgICBVTlVTRURfUEFSQU0obmFtZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMdWludCB2MCkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9Q
QVJBTSh2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQotewotICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFS
QU0odjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odjApOwotICAg
IFVOVVNFRF9QQVJBTSh2MSk7Ci0gICAgVU5VU0VEX1BBUkFNKHYyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWlu
dCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKLXsKLSAgICBVTlVT
RURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHYxKTsKLSAgICBVTlVTRURfUEFSQU0odjIpOwotICAgIFVOVVNFRF9QQVJBTSh2Myk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJB
TShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAg
IFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRh
dGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odHJhbnNw
b3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVT
RURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVO
VVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
ZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0
cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAg
IFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMaW50IHosIEdDR0xpbnQgdykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVO
VVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHop
OwotICAgIFVOVVNFRF9QQVJBTSh3KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dCwgND4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50
IHosIEdDR0x1aW50IHcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURf
UEFSQU0oeCk7Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh6KTsKLSAg
ICBVTlVTRURfUEFSQU0odyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwg
ND4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFN
KHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdD
R0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTShp
bmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsK
LSAgICBVTlVTRURfUEFSQU0oc3RyaWRlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVu
dW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBVTlVTRURfUEFSQU0obW9k
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsKLSAgICBVTlVTRURfUEFSQU0oZW5kKTsKLSAg
ICBVTlVTRURfUEFSQU0oY291bnQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVT
RURfUEFSQU0ob2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGJ1ZnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZmZXIs
IEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykKLXsK
LSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7
Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShi
dWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0o
dmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJm
aShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBH
Q0dMaW50IHN0ZW5jaWwpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShkZXB0aCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHN0ZW5jaWwpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVRdWVyeSgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBVTlVT
RURfUEFSQU0ocXVlcnkpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCBxdWVyeSkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0ocXVlcnkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShH
Q0dMZW51bSB0YXJnZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci19Ci0KLVBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHBuYW1lKTsKLQotICAgIHJldHVybiAwOwotfQotCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aShQbGF0Zm9ybUdMT2JqZWN0IHF1
ZXJ5LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkpOwotICAgIFVO
VVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQotewotICAgIHJldHVybiAw
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRm
b3JtR0xPYmplY3Qgc2FtcGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyKQotewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBs
ZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewotICAgIFVOVVNF
RF9QQVJBTSh1bml0KTsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qg
c2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFt
ZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
IHBhcmFtKQotewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0o
cG5hbWUpOwotICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Ci19Ci0KLUdDR0xmbG9hdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBz
YW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICByZXR1cm4gMC5mOwotfQotCi1HQ0dMaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2Jq
ZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQotCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBs
ZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0xz
eW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9u
LCBHQ0dMYml0ZmllbGQgZmxhZ3MpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbmRpdGlvbik7Ci0g
ICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKLQotICAgIHJldHVybiAwOwotfQotCi1HQ0dMYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHN5bmMpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTeW5jKEdDR0xzeW5jIHN5bmMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHN5bmMpOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWlu
dDY0IHRpbWVvdXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5bmMpOwotICAgIFVOVVNFRF9QQVJB
TShmbGFncyk7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOwotCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdDR0xzeW5jIHN5bmMs
IEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHN5bmMpOwotICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0gICAgVU5VU0VEX1BBUkFNKHRp
bWVvdXQpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaShH
Q0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7
Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICByZXR1cm4gMDsKLX0KLQotUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2so
KQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNF
RF9QQVJBTShpZCk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGlkKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0oaWQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9y
bUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBy
aW1pdGl2ZU1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFu
c2Zvcm1GZWVkYmFjaygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh2YXJ5aW5ncyk7Ci0gICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlck1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0p
OwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NH
THVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1
ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5n
ZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZl
ciwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQotewotICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNp
emUpOwotfQotCi1WZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB1bmlmb3JtTmFtZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVO
VVNFRF9QQVJBTSh1bmlmb3JtTmFtZXMpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotVmVjdG9y
PEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRp
Y2VzLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVuaWZv
cm1JbmRpY2VzLnNpemUoKSwgMCk7Ci0jaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xf
RVNfMykKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2
KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBw
bmFtZSwgcmVzdWx0LmRhdGEoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsK
LSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0luZGV4
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1l
KQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9y
bUJsb2NrTmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KQotewotICAgIFVOVVNFRF9QQVJBTShwcm9n
cmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOwotICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
QmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0JpbmRpbmcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURf
UEFSQU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVp
Z2h0KTsKLSAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50
IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFy
YW1zKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5p
Zm9ybUJsb2NrSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHBhcmFtcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NH
TGludCwgR0NHTGVudW0sIEdDR0xlbnVtICwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwg
R0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwg
R0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVt
LCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NH
TGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFn
ZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFn
ZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNE
KEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQot
ewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1h
Z2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNp
emVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0
cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlz
QU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29u
c3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMc2l6
ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
T1BFUkFUSU9OKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+LCBHQ0dMc2l6ZWkpCi17Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnQgdW5wYWNrQWxpZ25tZW50KQotewotICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQgPT0g
MSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1bnBh
Y2tBbGlnbm1lbnQgPT0gOCk7Ci0gICAgVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4gemVybzsK
LSAgICB1bnNpZ25lZCBzaXplID0gMDsKLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDAp
IHsKLSAgICAgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7Ci0gICAgICAgIHBhcmFtcy5hbGln
bm1lbnQgPSB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgICAgIEdDR0xlbnVtIGVycm9yID0gY29tcHV0
ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJhbXMs
ICZzaXplLCBudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNz
Q29udGV4dEdMOjpOT19FUlJPUikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJy
b3IpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHplcm8g
PSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4oc2l6ZSk7Ci0gICAgICAgIGlmICghemVy
bykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKLSAgICB9Ci0gICAgdGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIG1ha2VHQ0dMU3Bhbih6ZXJvLmdldCgpLCBzaXplKSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKaW5kZXggZTY2
ZTAwYWRiMjg3NWFkZjY5YTE5N2ZjYzY5MjMxNmRhNmY5NmU2ZS4uZDI5OWExOWZhODY2Mzk3NTUy
ZGQ2ZGU3ODgwY2NhNDMzODJmMjhhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMTWFuYWdlci5jcHAKQEAgLTI4LDkgKzI4LDEzIEBACiAjaWYgRU5BQkxFKFdFQkdM
KQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIgogCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAKKyNp
ZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgorI2Vsc2UK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2VuZGlmCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlciYgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkKQEAgLTU2LDcgKzYwLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQo
KQogfQogI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRD
b250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TCogY29udGV4dCkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgaWYgKCFjb250ZXh0KQpA
QCAtNjYsNyArNzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6YWRk
Q29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dAogICAgIG1fY29udGV4dHMu
YXBwZW5kKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
cjo6cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250ZXh0KFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0wqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFtX2NvbnRleHRzLmNvbnRhaW5z
KGNvbnRleHQpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmgKaW5kZXggMGVmODZkYzZkZTdmMjFkNWU4ZTkxMjBlOWEzMmIwYThi
MWYxZjczMS4uZDE0ODM0MTBkMDIzZjgzMDM2ZDk3ODU2NDM1ZmFlNTU4NGIwNDY3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaApAQCAtMzYsMTUgKzM2
LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgdW5zaWduZWQgTWF4Q29udGV4dHMg
PSAxNjsKIAorI2lmIFVTRShBTkdMRSkKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7Cisj
ZWxzZQogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYKIAogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKICAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsKIHB1YmxpYzoKKyNpZiBVU0UoQU5HTEUp
CisgICAgdXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCA9IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU7CisjZWxzZQorICAgIHVzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgPSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDsKKyNlbmRpZgorCiAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMTWFuYWdlciYgc2hhcmVkTWFuYWdlcigpOwogICAgIAotICAgIHZvaWQgYWRkQ29u
dGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dChH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCopOworICAgIHZvaWQgYWRkQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMKik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0wqKTsKICAgICAKICAgICB2b2lkIHJlY3ljbGVDb250ZXh0SWZOZWNlc3Nhcnko
KTsKICAgICBib29sIGhhc1Rvb01hbnlDb250ZXh0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dHMuc2l6ZSgpID49IE1heENvbnRleHRzOyB9CkBAIC01OSw3ICs2OSw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyKCkgPSBkZWZhdWx0Owog
Ci0gICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKj4gbV9jb250ZXh0czsKKyAgICBW
ZWN0b3I8UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCo+IG1fY29udGV4dHM7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCmluZGV4IDA1
NzU0NDQ4YjkwM2UxNDk5M2VkMzFiMGNiZDYxZTg2OTRhOWVlOTkuLjk3NmUzYWJlNWJiM2FjNDBh
ZjhmMjBjOWVlNGVlOGEyNTUzYjBhNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIuY3BwCkBAIC04NywxMiArODcsMTAgQEAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlcj4gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpj
cmVhdGUoR3IKIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6fkdyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlcigpID0gZGVmYXVsdDsKIAogR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyOjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIoR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKLSAgICA6IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKFdU
Rk1vdmUoYXR0cmlidXRlcykpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJC
YXNlKFdURk1vdmUoYXR0cmlidXRlcykpCiB7CiB9CiAKLS8vIEZJWE1FOiBCZWxvdyBmdW5jdGlv
bmFsaXR5IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIg
dG8gc2ltcGxpZnkgdGhlIGJhc2UgY2xhc3MuCi0KIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTD4g
Y3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9
IGZhbHNlOwpAQCAtMTI1LDMxNCArMTIzLDcgQEAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMPiBj
cmVhdGVXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0woY29uc3QgR3JhcGhpY3NDb250ZXgKICAg
ICByZXR1cm4gY29udGV4dDsKIH0KIAotI2lmIFVTRShBTkdMRSkKLUdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMgYXR0cmlidXRlcykKLSAgICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCi17Ci0j
aWYgRU5BQkxFKFdFQkdMMikKLSAgICBtX2lzRm9yV2ViR0wyID0gYXR0cmlidXRlcy53ZWJHTFZl
cnNpb24gPT0gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsKLSNlbmRpZgot
I2lmIFVTRShOSUNPU0lBKQotICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lh
OjpHQ0dMQU5HTEVMYXllcj4oKnRoaXMpOwotI2Vsc2UKLSAgICBtX3RleG1hcExheWVyID0gbWFr
ZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlzKTsKLSNlbmRpZgot
ICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVF9VTlVT
RUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0KLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLSAgICBh
dHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2Vk
IGR1cmluZyB2YWxpZGF0aW9uLgotCi0gICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldCgpOwotICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVy
IGludG8uCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIGdsOjpCaW5k
VGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJm
KHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBn
bDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1
cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gRkJPLgot
ICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBn
bDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAg
Z2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJl
VGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2w6OlRl
eFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOwotCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUp
OwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX2ludGVybWVkaWF0ZVRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRl
cmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLQotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCAw
KTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIEFTU0VS
VChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYg
KGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8g
PSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIGdsOjpH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBp
ZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBn
bDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICBnbDo6
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG1fc3RhdGUu
Ym91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKLSAgICAgICAgaWYg
KGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgZ2w6
OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0KLSAg
ICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLX0KLSNlbHNlCi1HcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQotewot
I2lmIFVTRShOSUNPU0lBKQotICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lh
OjpHQ0dMTGF5ZXI+KCp0aGlzKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBMYXllciA9IG1ha2VVbmlx
dWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7Ci0jZW5kaWYKLQotICAg
IGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVF9VTlVTRUQo
c3VjY2Vzcywgc3VjY2Vzcyk7Ci0KLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLSAgICBhdHRy
aWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1
cmluZyB2YWxpZGF0aW9uLgotCi0gICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50
by4KLSAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLQotICAgIC8vIENyZWF0ZSBhbiBGQk8uCi0gICAg
OjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6Omds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9N
SU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICA6OmdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURH
RSk7Ci0KLSAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0g
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7
Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
OjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NM
QU1QX1RPX0VER0UpOwotCi0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwot
I2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCi0gICAgQVNTRVJUKG1f
c3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAoYXR0
cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9t
dWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1f
c3RhdGUuYm91bmRSZWFkRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKLSAgICAgICAgOjpnbEdlblJl
bmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChh
dHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIDo6Z2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCi0gICAgICAgIGdsQmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwot
ICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9m
Ym87Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCi0g
ICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwotICAgICAg
ICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLQotI2lmICFVU0UoT1BFTkdMX0VT
KQotICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7Ci0KLSAgICBp
ZiAoR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjApIHsKLSAgICAgICAgbV91
c2luZ0NvcmVQcm9maWxlID0gdHJ1ZTsKLQotICAgICAgICAvLyBGcm9tIHZlcnNpb24gMy4yIG9u
IHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgc28gcmVxdWVzdCB0aGF0IG91cHV0IHRv
IHRoZSBzaGFkZXIgY29tcGlsZXIuCi0gICAgICAgIC8vIE9wZW5HTCB2ZXJzaW9uIDMuMiB1c2Vz
IEdMU0wgdmVyc2lvbiAxLjUwLgotICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlk
Z2UoU0hfR0xTTF8xNTBfQ09SRV9PVVRQVVQpOwotCi0gICAgICAgIC8vIEZyb20gdmVyc2lvbiAz
LjIgb24gd2UgdXNlIHRoZSBPcGVuR0wgQ29yZSBwcm9maWxlLCBhbmQgd2UgbmVlZCBhIFZBTyBm
b3IgcmVuZGVyaW5nLgotICAgICAgICAvLyBBIFZBTyBjb3VsZCBiZSBjcmVhdGVkIGFuZCBib3Vu
ZCBieSBlYWNoIGNvbXBvbmVudCB1c2luZyBHTCByZW5kZXJpbmcgKFRleHR1cmVNYXBwZXIsIFdl
YkdMLCBldGMpLiBUaGlzIGlzCi0gICAgICAgIC8vIGEgc2ltcGxlciBzb2x1dGlvbjogdGhlIGZp
cnN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNyZWF0ZWQgb24gYSBHTENvbnRleHQgd2lsbCBj
cmVhdGUgYW5kIGJpbmQgYSBWQU8gZm9yIHRoYXQgY29udGV4dC4KLSAgICAgICAgR0NHTGludCBj
dXJyZW50VkFPID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6VkVSVEVYX0FS
UkFZX0JJTkRJTkcpOwotICAgICAgICBpZiAoIWN1cnJlbnRWQU8pIHsKLSAgICAgICAgICAgIG1f
dmFvID0gY3JlYXRlVmVydGV4QXJyYXkoKTsKLSAgICAgICAgICAgIGJpbmRWZXJ0ZXhBcnJheSht
X3Zhbyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGb3IgbG93ZXIgdmVy
c2lvbnMgcmVxdWVzdCB0aGUgY29tcGF0aWJpbGl0eSBvdXRwdXQgdG8gdGhlIHNoYWRlciBjb21w
aWxlci4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfQ09N
UEFUSUJJTElUWV9PVVRQVVQpOwotCi0gICAgICAgIC8vIEdMX1BPSU5UX1NQUklURSBpcyBuZWVk
ZWQgaW4gbG93ZXIgdmVyc2lvbnMuCi0gICAgICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRF
KTsKLSAgICB9Ci0jZWxzZQotICAgIC8vIEFkanVzdCB0aGUgc2hhZGVyIHNwZWNpZmljYXRpb24g
ZGVwZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMgKGkuZS4gV2ViR0wyIHN1cHBvcnQpIHdhcyByZXF1
ZXN0ZWQuCi0jaWYgRU5BQkxFKFdFQkdMMikKLSAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRC
cmlkZ2UoU0hfRVNTTF9PVVRQVVQsIChhdHRyaWJ1dGVzLndlYkdMVmVyc2lvbiA9PSBHcmFwaGlj
c0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyKSA/IFNIX1dFQkdMMl9TUEVDIDogU0hfV0VC
R0xfU1BFQyk7Ci0jZWxzZQotICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9F
U1NMX09VVFBVVCwgU0hfV0VCR0xfU1BFQyk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgLy8gQU5H
TEUgaW5pdGlhbGl6YXRpb24uCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2Vz
OwotICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOwotCi0gICAg
QU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VmFy
eWluZ1ZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkFS
WUlOR19WRUNUT1JTKTsKLSAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICBBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJl
SW1hZ2VVbml0cyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTKTsKLSAgICBBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0ZSQUdNRU5U
X1VOSUZPUk1fVkVDVE9SUyk7Ci0KLSAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBF
Uy4KLSAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0KLSAgICBHQ0dMaW50
IHJhbmdlWzJdIHsgfTsKLSAgICBHQ0dMaW50IHByZWNpc2lvbiA9IDA7Ci0gICAgZ2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpGUkFHTUVOVF9TSEFERVIs
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpISUdIX0ZMT0FULCByYW5nZSwgJnByZWNpc2lvbik7
Ci0gICAgQU5HTEVSZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID0gKHJhbmdlWzBdIHx8
IHJhbmdlWzFdIHx8IHByZWNpc2lvbik7Ci0KLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhB
TkdMRVJlc291cmNlcyk7Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLX0KLSNl
bmRpZgotCi0jaWYgVVNFKEFOR0xFKQotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCgpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2Vy
OjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAgICBib29sIHN1Y2Nlc3Mg
PSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29t
cG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3Np
dG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRy
aWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgZ2w6
OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAg
ICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAg
ICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkgewotI2lmICFVU0UoQU5HTEUpICYmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmICht
X2RlcHRoQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoQnVmZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIGdsOjpEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIGdsOjpEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotI2Vu
ZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxldGVWZXJ0
ZXhBcnJheShtX3Zhbyk7Ci0jZW5kaWYKLX0KLSNlbHNlCi1HcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwotICAgIGJv
b2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7Ci0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgOjpnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAg
ICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgYXV0byBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewot
ICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRkJPKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKSB7Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgaWYgKG1fZGVw
dGhCdWZmZXIpCi0gICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhC
dWZmZXIpOwotCi0gICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYKLSAgICAgICAg
aWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0gICAgOjpnbERlbGV0ZUZy
YW1lYnVmZmVycygxLCAmbV9mYm8pOwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAg
ICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0jZW5kaWYK
LQotI2lmIFVTRShDQUlSTykKLSAgICBpZiAobV92YW8pCi0gICAgICAgIGRlbGV0ZVZlcnRleEFy
cmF5KG1fdmFvKTsKLSNlbmRpZgotfQotI2VuZGlmIC8vIFVTRShBTkdMRSkKLQotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSNpZiBVU0UoTklD
T1NJQSkKLSAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
I2Vsc2UKLSAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMo
KQotewotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0dMRVMyQ29tcGxpYW50
KCkgY29uc3QKLXsKLSNpZiBVU0UoQU5HTEUpCi0gICAgcmV0dXJuIG1faXNGb3JXZWJHTDI7Ci0j
ZWxpZiBVU0UoT1BFTkdMX0VTKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKLX0KLQotUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0
R0xUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJ
QSkKICAgICByZXR1cm4gJm1fbmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIoKTsKQEAgLTQ0MSwz
OCArMTMyLDggQEAgUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAogI2VuZGlmCiB9CiAKLSNpZiBQTEFURk9STShHVEspICYmICFVU0Uo
QU5HTEUpCi1FeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1fZXh0ZW5zaW9ucykgewotI2lmIFVTRShP
UEVOR0xfRVMpCi0gICAgICAgIC8vIGdsR2V0U3RyaW5naSBpcyBub3QgYXZhaWxhYmxlIG9uIEdM
RVMyLgotICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnNHTE9wZW5H
TEVTPih0aGlzLCAgZmFsc2UpOwotI2Vsc2UKLSAgICAgICAgLy8gRnJvbSBPcGVuR0wgMy4yIG9u
IHdlIHVzZSB0aGUgQ29yZSBwcm9maWxlLCBhbmQgdGhlcmUgd2UgbXVzdCB1c2UgZ2xHZXRTdHJp
bmdpLgotICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnNHTE9wZW5H
TD4odGhpcywgR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjApOwotI2VuZGlm
Ci0gICAgfQotICAgIHJldHVybiAqbV9leHRlbnNpb25zOwotfQotI2VuZGlmCi0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCi17Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQgPT0gU2ltdWxh
dGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKQotICAgICAgICBtX2ZhaWxOZXh0
U3RhdHVzQ2hlY2sgPSB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
cmVwYXJlRm9yRGlzcGxheSgpCi17Ci19Ci0KICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotUmVm
UHRyPE1lZGlhU2FtcGxlPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRDb21wb3NpdGVk
UmVzdWx0c1RvTWVkaWFTYW1wbGUoKQorUmVmUHRyPE1lZGlhU2FtcGxlPiBHcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkK
IHsKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgIGlmIChhdXRvIHBpeGVsQnVmZmVyID0gcmVhZENv
bXBvc2l0ZWRSZXN1bHRzKCkpCkBAIC00ODIsMTEgKzE0Myw2IEBAIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlCiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCi17Ci0gICAgcmV0dXJuIHJl
YWRSZW5kZXJpbmdSZXN1bHRzKCk7Ci19Ci0KICNpZiBFTkFCTEUoVklERU8pCiBib29sIEdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6Y29weVRleHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5
ZXImIHBsYXllciwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMZW51bSBvdXRw
dXRUYXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51
bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaAppbmRl
eCBlNDY2MmI2ODNlYTQ1YjZmMTk2NmIzMTk3MzM5MzMwM2FhZjg2MDk1Li43ZjYyMjVhMWEzOTli
ZWIyYmY5OTMwOWQ0ZTc4ODMwODEzOTczMzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlci5oCkBAIC0yNywxOCArMjcsMzQgQEAKIAogI2lmIEVOQUJMRShX
RUJHTCkKIAorI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFOR0xF
LmgiCisjZWxzZQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgewor
I2lmIFVTRShBTkdMRSkKK3VzaW5nIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2Ug
PSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOworI2Vsc2UKK3VzaW5nIEdyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlckJhc2UgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKKyNlbmRpZgorCitj
bGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIgOiBwdWJs
aWMgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IGNyZWF0ZShXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAgfkdyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlcigpOwogCisgICAgLy8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
QmFzZSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IGZpbmFsOwogI2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGNvcHlUZXh0dXJlRnJvbU1lZGlh
KE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgZmluYWw7
CiAjZW5kaWYKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9NZWRpYVNhbXBsZSgpIGZpbmFsOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBHcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzJiYpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyQU5HTEUuY3BwCmluZGV4IDA4NTM5YTdkOTI5ODExNDVkYzA2MDAxYjU3NGNhOGM5YTcx
Zjg5NTUuLmQxMThiMDNiZjMzMDgyZDRlYjRkMTUzMWY1NGEyZmFhOGRmZjMxNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCiAjaW5jbHVkZSAi
QU5HTEVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXIuaCIKIAogI2lmIFVTRShOSUNPU0lBKQogI2luY2x1ZGUgIk5pY29zaWFHQ0dMQU5HTEVMYXll
ci5oIgpAQCAtNDAsNyArNDEsMTA1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRm
b3JtRGlzcGxheSgpIGNvbnN0CitHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDog
R3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcykKK3sKKyNpZiBFTkFCTEUoV0VCR0wyKQorICAg
IG1faXNGb3JXZWJHTDIgPSBhdHRyaWJ1dGVzLndlYkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRl
eHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyOworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisgICAg
bV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xBTkdMRUxheWVyPigqdGhp
cyk7CisjZWxzZQorICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJH
Q0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOworI2VuZGlmCisgICAgYm9vbCBzdWNjZXNzID0gbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsK
KworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0
cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisK
KyAgICBHTGVudW0gdGV4dHVyZVRhcmdldCA9IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7
CisgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50by4KKyAgICBnbDo6R2VuVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQs
IG1fdGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVY
VFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1
cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4
UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFy
Z2V0LCAwKTsKKworICAgIC8vIENyZWF0ZSBhbiBGQk8uCisgICAgZ2w6OkdlbkZyYW1lYnVmZmVy
cygxLCAmbV9mYm8pOworICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1f
ZmJvKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBnbDo6R2VuVGV4dHVy
ZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJl
VGFyZ2V0LCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRl
eFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFy
Z2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICBnbDo6R2Vu
VGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAgZ2w6OkJpbmRUZXh0dXJl
KHRleHR1cmVUYXJnZXQsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmko
dGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisg
ICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOworI2VuZGlmCisKKyAgICAvLyBD
cmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJP
ID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMp
IHsKKyAgICAgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJP
ID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBCaW5kIGNhbnZhcyBGQk8uCisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9IG1fZmJvOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8
IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAm
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKworICAgIGdsOjpDbGVhckNvbG9yKDAsIDAs
IDAsIDApOworfQorCitHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp+R3JhcGhpY3NDb250ZXh0R0xB
TkdMRSgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5h
Z2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIGlm
IChtX3RleHR1cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1
cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7
CisjZW5kaWYKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisK
KyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkRlbGV0ZVJlbmRl
cmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRy
aWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsOjpEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAg
fSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgeworICAg
ICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbDo6RGVsZXRlUmVu
ZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKyAgICBnbDo6RGVs
ZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyNl
bmRpZgorfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAogewogI2lmIFVTRShOSUNPU0lBKQog
ICAgIHJldHVybiBtX25pY29zaWFMYXllci0+cGxhdGZvcm1EaXNwbGF5KCk7CkBAIC00OSw3ICsx
NDgsNyBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cGxhdGZvcm1EaXNwbGF5KCkgY29ucwogI2VuZGlmCiB9CiAKLVBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0xDb25maWcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtQ29u
ZmlnKCkgY29uc3QKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cGxhdGZvcm1Db25maWcoKSBjb25zdAogewogI2lmIFVTRShOSUNPU0lBKQog
ICAgIHJldHVybiBtX25pY29zaWFMYXllci0+cGxhdGZvcm1Db25maWcoKTsKQEAgLTU4LDcgKzE1
NywyOCBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0CiAjZW5kaWYKIH0KIAotYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyNpZiBVU0UoTklD
T1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
I2Vsc2UKKyAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisj
ZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygp
Cit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2V0Q29udGV4dFZpc2liaWxp
dHkoYm9vbCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlRm9y
RGlzcGxheSgpCit7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURp
c3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0
ZXMoKTsKICAgICBjb25zdCBhdXRvIHNpemUgPSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgp
OwpAQCAtODIsNyArMjAyLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFw
ZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2Vz
KCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
LmNwcAppbmRleCBmNDRjN2EwOTM0YWEwYjJlMzI0YWIzODM4Yjg4OGRiZDEwN2IwYWM3Li5lZDZi
OWNlMmU3MTUxMmVhZmFjOGE4NTNmMDAyM2Q2ZmUzYzM0NzRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9y
bUxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6VGV4
dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250
ZXh0KQorVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyJiBjb250ZXh0KQogICAg
IDogbV9jb250ZXh0KGNvbnRleHQpCiB7CiAgICAgYXV0byBzaGFyaW5nQ29udGV4dCA9IFBsYXRm
b3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXIuaAppbmRleCBjNzRlNzU1NDIxZTBjMTRkNjcxN2JkZjliMDYzYTQ3ZDg4NjRm
MmNkLi43M2M2NTBmMGFkMThlNDNlYmFmMmVlMGE3NzhmOTZiMjVmN2JiNjUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdD
R0xQbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oCkBAIC0yMSw3ICsyMSw3IEBA
CiAKICNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgIVVTRShOSUNP
U0lBKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVy
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKQEAgLTM0LDcgKzM0LDcg
QEAgY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKIGNsYXNzIFRleHR1cmVN
YXBwZXJHQ0dMUGxhdGZvcm1MYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRm
b3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKKyAgICBUZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyJik7CiAgICAgdmly
dHVhbCB+VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyKCk7CiAKICAgICBib29sIG1ha2VD
b250ZXh0Q3VycmVudCgpOwpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJp
dmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgbV9jb250ZXh0OworICAgIEdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciYgbV9jb250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxBTkdMRUNvbnRleHQ+IG1fZ2xDb250ZXh0OwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCmluZGV4IDEyMTUwYjFkNTBl
NWJjODkzNzRlYWE4MTFlMjMyYjNjYzUwZjMxNTEuLjNiNGI3NTgwMjdmNjk2NGUwMDllYjJlNTcy
MGQ0YTNjMWJjY2VkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKQEAg
LTQ4LDcgKzQ4LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpleHRy
YWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1
bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMR0w6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1h
Z2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFz
U2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmICghaW1hZ2VQaXhlbHMg
fHwgaW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBjYW52YXNTaXplLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJD
b3JlVGhyZWFkLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhy
ZWFkLm1tCmluZGV4IDk1NDRiNTFjMjc4ZGY1NjllYTRhYjBiZmVmN2VmNzQ0YWM1MmM3MzUuLjZk
NzcwN2Q0MGMzMmYyODQyOWMzZDMyNDUxNWE1Y2M2OTc3NjFiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KQEAgLTMwLDcgKzMwLDcg
QEAKIAogI2ltcG9ydCAiQ29tbW9uVk0uaCIKICNpbXBvcnQgIkZsb2F0aW5nUG9pbnRFbnZpcm9u
bWVudC5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbXBvcnQgIkdy
YXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlJ1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgogI2ltcG9ydCAiVGhyZWFkR2xvYmFsRGF0YS5oIgpA
QCAtNzcsMTMgKzc3LDEzIEBAIHZvaWQgUmVsZWFzZVdlYlRocmVhZEdsb2JhbFN0YXRlKCkKICAg
ICAvLyBJbiBzaW5nbGUtdGhyZWFkZWQgZW52aXJvbm1lbnRzIHdlIGRvIG5vdCBuZWVkIHRvIHVu
c2V0IHRoZSBjb250ZXh0LCBhcyB0aGVyZSBzaG91bGQgbm90IGJlIGFjY2VzcyBmcm9tCiAgICAg
Ly8gbXVsdGlwbGUgdGhyZWFkcy4KICAgICBBU1NFUlQoV2ViVGhyZWFkSXNFbmFibGVkKCkpOwot
ICAgIHVzaW5nIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOworICAgIHVz
aW5nIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I7CiAgICAgLy8gRm9yIHdl
YiB0aHJlYWQsIGp1c3QgcmVsZWFzZSB0aGUgY29udGV4dCBhcyB3ZSBrbm93IHdlIHdpbGwgc2Vl
IGNhbGxzIHRvIGl0IGFnYWluLgogICAgIC8vIEZvciBub24td2ViIHRocmVhZHMsIGUuZy4gdGhp
cmQtcGFydHkgY2xpZW50IHRocmVhZHMsIHdlIGRvbid0IGtub3cgaWYgd2UgZXZlciBzZWUgYW5v
dGhlciBjYWxsIGZyb20gdGhlCiAgICAgLy8gdGhyZWFkLCBzbyB3ZSBhbHNvIHJlbGVhc2UgdGhl
IHRocmVhZCByZXNvdXJjZXMuCiAgICAgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgcmVs
ZWFzZUJlaGF2aW9yID0KICAgICAgICAgV2ViVGhyZWFkSXNDdXJyZW50KCkgPyBSZWxlYXNlVGhy
ZWFkUmVzb3VyY2VCZWhhdmlvcjo6UmVsZWFzZUN1cnJlbnRDb250ZXh0IDogUmVsZWFzZVRocmVh
ZFJlc291cmNlQmVoYXZpb3I6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZXM7Ci0gICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMocmVsZWFzZUJl
aGF2aW9yKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzKHJlbGVhc2VCZWhhdmlvcik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wuY3BwCmluZGV4IGFjOTU5NTIwYTJlM2RmYWQ5ZmNkODJiMzkyZjEwYTlhNWE2MDQ4NDAuLjg0
YjJlNjg0NWQwNzQ5Y2RhYTFlNzhiODUzMGQ4ZjhlYTVhMGUwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMLmNwcApAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OnBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yCiAg
ICAgICAgICAgICAvLyBIZXJlIHdlIGRvIG5vdCB0cnkgdG8gcGxheSBiYWNrIHBlbmRpbmcgY29t
bWFuZHMgZm9yIGltYWdlQnVmZmVyLiBDdXJyZW50bHkgdGhpcyBjYWxsIGlzIG9ubHkgbWFkZSBm
b3IgZW1wdHkKICAgICAgICAgICAgIC8vIGltYWdlIGJ1ZmZlcnMgYW5kIHRoZXJlJ3Mgbm8gZ29v
ZCB3YXkgdG8gYWRkIGRpc3BsYXkgbGlzdHMuCiAgICAgICAgICAgICBpZiAocGl4ZWxCdWZmZXIp
Ci0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMo
Y29udGV4dEF0dHJpYnV0ZXMsIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXItPmJh
Y2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICAgICAgICAgIEdy
YXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBXVEZNb3Zl
KCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpLmNsZWFyUmVjdCh7IEludFBvaW50KCksIGltYWdlQnVmZmVyLT5iYWNrZW5k
U2l6ZSgpIH0pOwogICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSAiZmx1c2giIGltcGxlbWVu
dGF0aW9uIGluIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgb3ZlcmxvYWRzIG9yZGVyaW5nIGFuZCBl
ZmZlY3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Nj
b3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNw
cAppbmRleCA1YTZjZTY1ZTc0NDdkMjRlMWU3NzM2MGYyZDhjZmU2NGVhODhiMzJhLi4wZGE3Yjk1
ZDE0ZTlhZGZjZGQzNjY5Mzk5MzNkODAwZjAwYmY4ZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2Vi
R0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5j
bHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCIKICNpbmNsdWRlICJTdHJlYW1Db25uZWN0
aW9uV29ya1F1ZXVlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oPgogI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KIApAQCAtNTYsNyArNTYsNyBA
QCB2b2lkIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6ZnJlZVdlYkdMUmVu
ZGVyaW5nUmVzb3VyY2VzKCkKICAgICBpZiAoc19yZXF1ZXN0cykKICAgICAgICAgcmV0dXJuOwog
ICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW10g
ewotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFzZVRocmVh
ZFJlc291cmNlcyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UmVsZWFzZVRocmVh
ZFJlc291cmNlQmVoYXZpb3I6OlRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMpOwor
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVz
b3VyY2VzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OlJlbGVhc2VUaHJlYWRSZXNv
dXJjZUJlaGF2aW9yOjpUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTsKICAgICB9
KTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445382</attachid>
            <date>2021-11-29 23:00:13 -0800</date>
            <delta_ts>2021-11-29 23:56:21 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211130090010.patch</filename>
            <type>text/plain</type>
            <size>573568</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5hMjc3NmJmMzcwMzNkNDc5NGRjNTk0YTJlNDdlZjNkNmNk
ZmI4ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MDUsNiArMTQwNSw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0FOR0xFSGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGls
aXRpZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4
MDExODYuLjE1ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
N2I2ZDU2MTQ2OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVj
MmQ1MzE4YWIzOTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEz
Niw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvaXNvL0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09WVFRDdWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTky
OTQ5ODk1MjBjMjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVy
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlNGQ5ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJl
ZTAyNmE2YTlkMTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBA
CiAJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAv
KiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAq
LzsgfTsKIAkJN0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRl
eHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYw
OTRERDI3MEM0NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAv
KiBBTkdMRVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJm
b3JtYW5jZUdQVVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFu
Y2VHUFVSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIz
MDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRl
eHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVE
Mjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYw
Q0UgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0No
ZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAy
MTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBH
cmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVG
MjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBB
MThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEw
MzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFB
QyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xDVkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ix
NjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4
MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1
Nyw4IEBACiAJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhD
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCOTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAw
NjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0
QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJ
CTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJ
CQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJ
CQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
ICovLAorCQkJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmggKi8sCiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xF
U2V0dGluZy5jcHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFy
eUFOR0xFU2V0dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3
QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgg
Ki8sCiAJCQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAw
MDA2MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2
OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBA
QAogCQkJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJ
CTdCOEVENUVGMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEw
MzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdC
MTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICov
LAotCQkJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCAqLywKKwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8q
IEltYWdlUm90YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdG
RjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4
MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0
MjYyLDE2IEBACiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4
dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3Jh
cGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3
MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdCOTVDRkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIx
MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAv
KiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4
MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0
MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5
RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGlj
c0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5
MTVmYTVmNzRkYzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2
MzQ1NTlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8g
UmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRh
KEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25l
ZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50
UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGlu
dCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0R0xTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNi
NGQ3ZTljZWUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBH
Q0dMdWludCBib3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVu
aXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4
dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwg
R0NHTGVudW0+LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJh
aXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5k
VGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0K
KyAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91
bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0
dXJlLCBHQ0dMZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0
KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIElu
dEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1
aW50Pj47CisgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYw
ZmI1ZWUxYWMzOTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2
NDBmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNp
bmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dM
QU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
KQorRXh0ZW5zaW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUqIGNvbnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhm
YWxzZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5k
ZXggMGE2MWVmYzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRi
OWY2MTVjM2IzYTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0z
MiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMu
Ci0gICAgZXhwbGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
KTsKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVu
c2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRl
bnNpb25zR0xBTkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4
ICs2NCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRl
bnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAg
Ly8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFj
ayB0byBHcmFwaGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUq
IG1fY29udGV4dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0
aW5nLXBvaW50IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAg
ICBib29sIG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBk
ZmEyYjdhNTA5Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmgiCiAKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJl
c3Npb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFW
Rk9VTkRBVElPTikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBk
ZWZpbml0aW9uIHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAg
LTc2LDggKzcxLDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpCiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEp
CiAgICAgICAgIEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3Jt
Q29uZmlnKCksIEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQor
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBz
d2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyAr
OTksNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2lu
Z1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1Rh
cmdldCkgewogICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZv
ckRyYXdpbmdUYXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJl
aGF2aW9yIHJlbGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNl
QmVoYXZpb3IpCiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAg
LTE2MSw3ICsxNTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xf
UmVsZWFzZVRocmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFp
bnRSZXN1bHRzKCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpA
QCAtMTg3LDE0ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBw
aXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1
dGVzKCkKIHsKICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygp
LmFscGhhID8gR0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11
c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hE
ZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChH
THVpbnQgaW50ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3Bl
ZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAg
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+
IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBnbDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwg
bnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBw
cmVjaXNpb25UeXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lz
aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48
R0NHTGludCwgMj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xl
bnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNo
YWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAg
ICAgICAgIGludGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihn
ZXRFeHRlbnNpb25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZz
ZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQg
eW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0wKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwg
R0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewogICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VT
aXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNl
dCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQg
eW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBH
Q0dMY2xhbXBmIHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGds
OjpEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oekZhcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRo
KEdDR0xjbGFtcGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVw
dGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVw
dGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lv
bnMpCiAgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+
KHRoaXMpOwogICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpy
ZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0
YS5kYXRhLCBmYWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRu
UGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJ
bXBsKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBs
ZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0
YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMs
IEdDR0xzaXplaSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZm
ZXJPYmplY3QpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYK
IH0KIAotLy8gVGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZv
bGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygp
OwogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZv
cm1zIGFyZSBub3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQog
ICAgICAgICByZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFT
U0VSVCghbV9sYXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVS
ZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5i
b3VuZFJlYWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpA
QCAtNTg3LDcgKzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhl
bHNGb3JQYWludFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBt
X2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1
cm47CkBAIC02NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0
dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTY4Miw3ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVU
ZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNT
RVJUKHNoYWRlcik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8K
ICAgICBnbDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC03MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0CiB9CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGds
OjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xj
bGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBn
cmVlbiwgR0NHTGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVu
dW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dM
ZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dM
ZW51bSBtb2RlQWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9
CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShH
Q0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xl
bnVtIGRzdEFscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBh
cmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEs
IEdDR0xlbnVtIGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJH
QgogICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0
ciBzaXplLCBHQ0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRh
dGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xT
cGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdD
R0x2b2lkPiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0
YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciBy
ZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVh
ZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NH
TGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0
aXZSb2J1c3RBTkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXpl
LCBudWxscHRyLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODQ4LDcgKzg0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
IGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgs
IGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRl
ciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAg
Z2w6OlRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6
ZSwgcGl4ZWxzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQq
PihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50
IHhvZmYKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIHBpeGVscy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50
IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4
OTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
aW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+
KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5
MDcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1
YkltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZz
ZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0Qo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBw
bmFtZSkKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVV
bmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4m
IHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4g
cmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpA
QCAtOTI5LDcgKzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwpAQCAtOTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6
OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNs
YW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTk0NSw3ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNv
bG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVh
cihHQ0dMYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05
NjIsNyArOTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KEdDR0xpbnQgcykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdy
ZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwg
R0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNv
bXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEw
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEw
MzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAg
ICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVu
YyhmdW5jKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdD
R0xib29sZWFuIGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhH
Q0dMYm9vbGVhbiBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxh
Zyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAg
QVNTRVJUKHNoYWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMTwogICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAg
IGdsOjpEaXNhYmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODks
NyArMTA4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5
cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBm
aXJzdCwgR0NHTHNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xlCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2Fw
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0NHTHVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50
IGluZGV4KQogICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1
c2goKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExMzksNyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNo
KCkKICAgICBnbDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBs
ZXZlbCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMTU2LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE2NCw3ICsxMTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3Miw3ICsxMTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVN
aXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9W
QUxVRSk7CkBAIC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwg
aW5mbyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1J
bXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDRwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJv
Z3JhbSwgaW5kZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4
Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZv
cm1HTE9iamVjdCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwg
bWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBp
ZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAg
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0
cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJu
IG1vdmVkQW5FcnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEVycm9yKCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsK
ICAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCkBAIC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0xMzA3LDcgKzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0
cmluZyhHQ0dMZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1v
ZGUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTMxNSw3ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2Rl
KTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKICAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0xMzM0LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXAp
OwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZl
cihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQog
ewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEz
NDUsNyArMTMzOSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0Zy
YW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJ
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpA
QCAtMTM1Niw3ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1By
b2dyYW0ocHJvZ3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgcmVuZGVyYnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBy
ZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
QEAgLTEzODksNyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNU
ZXh0dXJlKHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0
aCh3aWR0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQgcGFyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFt
KQogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9h
dCB1bml0cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dM
ZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYg
dmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAs
NyArMTQyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdl
KEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVy
YWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
Y2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0x
NDUxLDcgKzE0NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJT
b3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0g
ZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBt
YXNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE0NTksNyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywg
R0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGlu
dCByZWYsIEdDR0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLAogICAgIGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQ3NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE1hc2soR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0
ZShmYWNlLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdD
R0xlbnVtCiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShm
YWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xm
bG9hdCB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsx
NTAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2
YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyAr
MTUxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbAogICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAg
ICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0y
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsK
ICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAog
ICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2
MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXpl
ICUgMykpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyAr
MTU3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlm
b3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJh
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50
IHYxCiAgICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
IHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bgogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXku
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCwgR0NHTGludCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAzLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xp
bnQgdjIsIEdDR0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBH
Q0dMaW50IHYzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQog
ewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
CiAgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1N
YXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAg
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAg
ICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MTY3NSw3ICsxNjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRl
eEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAg
ICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZgogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxv
YXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBn
bDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgND4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cK
ICAgICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRl
eCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBH
Q0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNp
emUsCiAgICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1h
bGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTc3Myw3ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVy
dGV4QXR0cmliSVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
CiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE3OTQsNyArMTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTgwNiw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0
ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTE4MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGds
OjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4MjgsNyArMTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJv
b2xlYW4+CiAgICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNp
emUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0g
MDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAg
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xF
KHBuYW1lLCB2YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdD
R0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBu
YW1lKQorR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dM
ZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgpCiB7CiAgICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYs
NyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTg5MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBj
b25zdCBTdHJpbmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAg
VU5VU0VEX1BBUkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sCiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogCkBAIC0xOTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmko
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChz
aGFkZXIpOwogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTcz
LDEyICsxOTY3LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVk
SW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxh
dGZvcm1HTE9iamVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAg
IEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTk4Nyw3ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlv
biwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9n
cmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3
ICsyMDE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVp
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5k
YXRhKTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogCkBAIC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAg
IHJldHVybiBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CiB9CiAKLUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQg
aW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5k
ZXgsIEdDR0wKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAg
IHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICBy
ZXR1cm4gbzsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlUHJvZ3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVByb2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVh
dGVQcm9ncmFtKCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
ICAgIHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIw
ODMsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
aGFkZXIoR0NHTGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9
PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURF
Uik7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRleHR1cmUoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVh
dGVUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRl
bGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAg
ICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6
RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVy
KQogICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6
OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2
MSw3ICsyMTU1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LnJlbW92ZUFsbCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQg
dG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRv
CiAgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0
RXJyb3Igd2lsbCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50
aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zm9yY2VDb250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNl
Q29udGV4dExvc3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNw
YXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIy
MjMsNyArMjIxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0
ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIy
Niw3IEBAIEdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJ
bmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3Jt
QmxvY2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yMjUyLDcgKzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTAogCiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0
dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGds
OjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6
OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRRdWVyeU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogCiAvLyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVl
ZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5z
Zm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAg
ICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVk
YmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0
IHRyYW5zZm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xP
YmplY3QgdHJhbnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9y
bUZlZWRiYWNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1G
ZWVkYmFjaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MzM0LDcgKzIzMjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNm
b3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJh
bnNmb3JtRmVlZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1G
ZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2Rl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjM1MCw3ICsyMzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dM
ZW51bSBidWZmZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyhwcm9ncmFtLCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3Mu
ZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0g
MDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAg
Z2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZT
aXplKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBp
bmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsCiAgICAgZ2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNy
Y1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50
IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dM
Yml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNDAzLDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpC
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NH
TGludCBsYXllcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0
dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVM
YXllcih0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0
YXJnZXQsIGF0dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVi
dWZmZXIodGFyZ2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRC
dWZmZXIoR0NHTGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNy
Yyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlclRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIC0xOwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMK
ICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yNDc2LDcgKzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlm
b3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSwgR0NHTHVpbnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
NDg0LDcgKzI0NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3Jt
M3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYw
LCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dQogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gMiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCgh
KGRhdGEuYnVmU2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MjUxOCw3ICsyNTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9y
bTN1aXYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1CiAgICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSA2KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyAr
MjUzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgy
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgz
eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlv
biwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZT
aXplIC8gOCwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xl
YW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAg
ICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJh
bnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQo
IShkYXRhLmJ1ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yNTcyLDcgKzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlm
b3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRh
dGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDEyKSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyAr
MjU3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dM
dWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShp
bmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+
IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyAr
MjU5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0
aXYoaW5kZXgsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQg
eSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwg
R0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4
LCBHQ0dMdQogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMu
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1l
bnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50
IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcK
ICAgICBnbDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3Qg
R0NHTGVudW0+IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6
OkRyYXdCdWZmZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIs
IGRyYXdidWZmZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZh
bHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZm
ZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRo
LCBHQ0dMaW50IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsCiAgICAgZ2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3Rl
bmNpbCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
ICAgICBnbDo6RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJu
IGdsOjpJc1F1ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVl
KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
U2FtcGxlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0
ZVNhbXBsZXIoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAg
ICBnbDo6RGVsZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIp
CiAgICAgcmV0dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcy
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJp
KHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAK
LUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NH
TGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dM
c3luYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9u
LCBHQ0dMYml0ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZp
ZWxkIGZsYQogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQog
Ci1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5
bmMpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMg
c3luYykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMo
c3luYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NH
THN5bmMgc3luYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dM
c3luYyBzeW5jKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xz
eW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywg
R0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4
OSw3ICsyNzgzLDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdh
aXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNs
aWVudFdhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdz
LCBHQ0dMaW50NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5
bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
Nzk3LDcgKzI3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhH
Q0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3lu
YyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBw
bmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1G
ZWVkYmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVl
ZGJhY2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVk
YmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgyMyw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgzMSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6
QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0K
IAotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5p
Zm9ybU5hbWVzKQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRV
bmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB1bmlmb3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBw
YXJhbXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJs
b2NraXZSb2J1c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFt
cy5idWZTaXplLCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xzaXplaSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRp
RHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZp
cnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjg1OSw3ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVs
dGlEcmF3QXJyYXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291
bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJz
dHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBt
b2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBH
Q0dMc2l6ZWkgZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTCiAgICAgZ2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5k
YXRhLCBjb3VudHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
ODgwLDcgKzI4NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdF
bGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURy
YXdFbGVtZW50c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCks
IGRyYXdjb3VudCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9m
ZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3
Y291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjg5Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVs
dGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6
TXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwg
cG9pbnRlcnMuZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQog
ewogICAgIHNpemVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVD
b21wbGV0aW9uRmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKQEAgLTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVs
YXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVk
RXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1
cmUpIHsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29t
cGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVm
ZmVyKSwgaW1hZ2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RG
TW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZl
ci5jb250ZXh0KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAg
ICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRp
cGx5aW5nLCB3aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byBy
ZXN1bHRzID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1
bHRzICYmICFyZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1
bHRzLT5mb3JtYXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0
cy0+Zm9ybWF0KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAg
Ly8gRklYTUU6IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJv
d0J5dGVzIGFuZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXpl
ID0gcmVzdWx0cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6
ZS53aWR0aCgpICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRh
dGEoKTsKKyAgICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAx
KSAqIHJvd1N0cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChu
ZXcgdWludDhfdFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9w
ICs9IHJvd1N0cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5
KHRlbXAuZ2V0KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0
b20sIHRvcCwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCks
IHJvd1N0cmlkZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHNGb3JQYWludGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRlMzBiY2JjNDc3NDViYjhiNDIxNTI3YmZkMzQ5YmFkNjc3YmQwNjcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29z
aWEgeworY2xhc3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBI
b3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNz
IFBpeGVsQnVmZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBo
aWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7Cisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
OworICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGlj
IEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0
KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0
KTsKKyAgICBlbnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAg
ICAgLy8gUmVsZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRl
eHQsCisgICAgICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRl
LiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisg
ICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNh
bXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAg
dm9pZCBwcmVwYXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlv
biB3aXRob3V0IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAg
aW50IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2lu
ZyB0aHJvdWdoIEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdM
T2JqZWN0KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dz
IHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkg
ZmluYWw7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRp
b24oUGxhdGZvcm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkg
ZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCkgZmluYWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVu
ZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUs
IEdDR0xjbGFtcGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51
bSBtb2RlKSBmaW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBt
b2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdD
R0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRG
dW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNy
Y0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAg
dm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEsIEdDR0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEpIGZpbmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVu
dW0gdGFyZ2V0KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4s
IEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVh
ckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdD
R0xpbnQgcykgZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dM
Ym9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFs
OworICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0g
bW9kZSkgZmluYWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7Cisg
ICAgdm9pZCBkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0
aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9p
ZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7
CisgICAgdm9pZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0Fy
cmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFs
OworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxl
KEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lk
IGZsdXNoKCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dM
ZW51bSB0YXJnZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBi
b29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7Cisg
ICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSog
Y291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmli
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAg
ICB2b2lkIGdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4g
dmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZp
bmFsOworICAgIHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxv
YXQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBw
bmFtZSkgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5n
IGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJp
KFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0
U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5h
bDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIFN0cmluZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0
IGdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CisgICAgR0NHTGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7
CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRV
bmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTHVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdD
R0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBt
b2RlKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBm
aW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAg
IEdDR0xib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVh
biBpc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgo
R0NHTGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qp
IGZpbmFsOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pIGZpbmFsOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCByZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUs
IEdDR0xib29sZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAg
IHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFs
OworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1
aW50IG1hc2spIGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7Cisg
ICAgdm9pZCBzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAg
dm9pZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAg
dm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwg
R0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVs
cykgZmluYWw7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
aW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgp
IGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gdikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGludCB4LCBHQ0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2
b2lkIHVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJv
Z3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NH
THVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NH
TGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBH
Q0dMZmxvYXQgeikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHks
IEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmlu
YWw7CisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdD
R0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
c29yKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmlu
YWw7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICBHQ0dMYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZv
aWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVU
YXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NH
THNpemVpcHRyKSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdD
R0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAs
IEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51
bSBmaWx0ZXIpIGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0
ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0
dGFjaG1lbnRzKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7
CisgICAgdm9pZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXpl
aSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5h
bDsKKyAgICB2b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9p
ZCB0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNl
dCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRy
IG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dM
aW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNz
ZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmlu
YWw7CisgICAgR0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZp
bmFsOworICAgIHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3Vp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAg
ICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCB1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwg
R0NHTGludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBH
Q0dMdWludCB6LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2
KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1
aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdi
dWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xm
bG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVF1ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2Jq
ZWN0IHF1ZXJ5KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmpl
Y3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0g
dGFyZ2V0KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0
dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2Ft
cGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlz
U2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNh
bXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAg
ICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRl
cmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBh
cmFtKSBmaW5hbDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRT
YW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
KSBmaW5hbDsKKyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dM
Yml0ZmllbGQgZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykg
ZmluYWw7CisgICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51
bSBjbGllbnRXYWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0
IHRpbWVvdXQpIGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVs
ZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2ko
R0NHTHN5bmMsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1Ry
YW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmlu
ZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkg
ZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2
ZU1vZGUpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAg
ICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lk
IHBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9y
bUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAg
dm9pZCBiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZp
bmFsOworICAgIFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsK
KyAgICBWZWN0b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsK
KyAgICBTdHJpbmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9p
ZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykg
ZmluYWw7CisgICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRl
OworICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBtdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRz
LCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZUJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZm
ZXIoKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsK
KyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdl
dEV4dGVuc2lvbnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsK
KyAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZp
bmFsOworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisgICAgdm9p
ZCBwcmVwYXJlRm9yRGlzcGxheSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBmb3JjZUNvbnRleHRM
b3N0KCk7CisgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOworICAgIHZvaWQgZGlzcGF0Y2hDb250
ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CisjZW5kaWYK
KyAgICB1bnNpZ25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKTsKKworICAgIGNvbnN0
ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVG
QVVMVF9ESVNQTEFZOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNvbnN0ZXhwciBzdGF0aWMg
RUdMTmF0aXZlRGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZl
RGlzcGxheVR5cGUsIC0xKTsKKyAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlU
eXBlIGhpZ2hQZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlw
ZSwgLTIpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xF
KEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxs
IHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAg
ICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5z
aW9uc0dMIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50
IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKKyAgICAv
LyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGlj
aCBjb3VsZCBvcgorICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBh
YmlsaXRpZXMgb2YgdGhlIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQg
dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKTsKKyAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgdm9pZCByZWFkblBp
eGVsc0ltcGwoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpKiBsZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dz
LCBHQ0dMdm9pZCogZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCk7CisKKyAg
ICAvLyBEaWQgdGhlIG1vc3QgcmVjZW50IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUg
aW4gYW4gYWNjZXB0YWJsZSBzdGF0ZT8KKyAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsK
KworICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcHJlcGFy
ZVRleHR1cmVJbXBsKCk7CisgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsKKyAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3Rl
bmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CisgICAg
c3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXks
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOworI2VuZGlmCisgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgorICAgIGJvb2wgd2Fp
dEFuZFVwZGF0ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gUGxh
dGZvcm0gc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICBzdGF0
aWMgdm9pZCBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKKworICAgIEdDR0x1aW50
IG1fdGV4dHVyZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKKyAgICBHQ0dMdWlu
dCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsQ29s
b3JGb3JtYXQgeyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCB7IDAgfTsKKyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OworICAgIEdDR0x1
aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OworICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdp
bmdCdWZmZXI6dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCisgICAgR0NHTHVpbnQgbV9wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIHsgMCB9OworICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVy
ZSB3aGVuIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KKyAgICBH
Q0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKKyAgICAvLyBRdWVyaWVk
IGF0IGRpc3BsYXkgc3RhcnR1cC4KKyAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRh
cmdldCB7IC0xIH07CisgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigp
LgorICAgIExpc3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKyAgICBib29s
IG1faXNGb3JXZWJHTDIgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3Vu
dCB7IDAgfTsKKyAgICBib29sIG1fZmFpbE5leHRTdGF0dXNDaGVjayB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3VzZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKKyAgICBzaXplX3QgbV9v
bGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKKyAgICBTY29wZWRHTEZlbmNlIG1fZnJh
bWVDb21wbGV0aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOworICAgIEdyYXBoaWNzQ29udGV4
dEdMU3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+
IG1fZXh0ZW5zaW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIEdyYXBoaWNzQ29udGV4
dEdMSU9TdXJmYWNlU3dhcENoYWluIG1fc3dhcENoYWluOworICAgIEVHTERpc3BsYXkgbV9kaXNw
bGF5T2JqIHsgbnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0T2JqIHsgbnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcg
bV9jb25maWdPYmogeyBudWxscHRyIH07CisgICAgLy8gQmFja2luZyBzdG9yZSBmb3IgdGhlIHRo
ZSBidWZmZXIgd2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5LgorICAgIC8vIFdo
ZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3aW5nIGJ1
ZmZlciBiYWNraW5nIHN0b3JlLgorICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09
IHRydWUsIHRoaXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7CisgICAgdm9p
ZCogbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24g
eyBmYWxzZSB9OworICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9oaWdoUGVy
Zm9ybWFuY2VHUFVSZXF1ZXN0OworI2VuZGlmCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorICAgIEdDR0x1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisgICAgR0NHTHVpbnQg
bV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsgMCB9OworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisg
ICAgc3RkOjp1bmlxdWVfcHRyPE5pY29zaWE6OkdDR0xMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Cisj
ZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKKyNlbmRpZgorCisgICAgZnJpZW5k
IGNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOworI2lmIFVTRShOSUNPU0lBKQorICAgIGZyaWVuZCBj
bGFzcyBOaWNvc2lhOjpHQ0dMTGF5ZXI7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAg
ZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyNlbmRpZgorfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXggY2Nj
YjU3MjRhNGNkOTJmZjBiZjhlNzM4M2M1ZDlmZTY4OWQ3N2I4Ni4uNGQ1OWNiMTJjNWU0NDc1Mzdk
ZTBhZWUyMTBkZTAwMmNiZDc5ZmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5j
cHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0
ZXMsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50
VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0
QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVCghcGl4ZWxC
dWZmZXIuc2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAppbmRleCBmNzlmMjJlMzEzZWExMTczODljNWY0MDlkZDBmNDk0
YWUxNWFlYjkzLi5hZjRjMTdkNTFmYTU5ZjQ2ODhkZjQzOTY1MzUxOGY1Y2EwZGFhZjIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3Vy
Y2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50
U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBj
b25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAg
ICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFz
U2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKaW5kZXggMjU1NWZm
MDgzMjhlMzQ2OWNkN2E0YTI5N2RiZWY3OTBmNjMwNTI4OC4uZTQwOTVhMmIxOWUyNGQxZGI4MDlj
MTgyZjY0MzJiZGMwY2I3ODZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApAQCAt
MjcsMTIgKzI3LDE4IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIK
ICNpbmNsdWRlICJJT1N1cmZhY2UuaCIKIAorI2lmIEVOQUJMRShWSURFTykKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTsKK30KKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgeworY2xhc3MgV0VCQ09S
RV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRH
TEFOR0xFIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMQ29j
b2E+IGNyZWF0ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAg
fkdyYXBoaWNzQ29udGV4dEdMQ29jb2EoKTsKQEAgLTQ5LDE0ICs1NSwyNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwog
I2VuZGlmCiAKLSAgICAvLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBvdmVycmlkZXMuCisgICAg
Ly8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICBi
b29sIGNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgYm9vbCBmbGlwWSkgZmluYWw7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
R3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOworI2VuZGlmCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3Vs
dHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBo
aWNzQ29udGV4dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYp
OwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3
MmM3N2VjYjIxOWUzOS4uMDI5Y2MzZmFlNDdmODcwMjNjNWMzMDIyNWUwMjU5YTA0MWYwZDY2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5k
aWYKIAogI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxh
dGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJs
ZSgpID09IHRydWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJl
YWRlZCBtYW5uZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxz
ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1
dCBhbHdheXMgc2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIg
YW5kIG51bGxwdHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUqIGN1cnJlbnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGlj
dGFibGUoKQogewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxp
emVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAg
ICAgfQogCiAgICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNr
ZW5kLiIsIGF0dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRp
dmVEaXNwbGF5VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
ZmF1bHREaXNwbGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNl
TWV0YWwpIHsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9Q
TEFURk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0
YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAg
ICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0Vf
QU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9X
RVJfQU5HTEUpOwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpsb3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYg
KHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJl
ZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRl
cy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxh
eUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5h
dGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlz
cGxheTsKKyAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpoaWdoUGVyZm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFw
aGljc0NvbnRleHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xB
TkdMRShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVu
Y3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29h
IHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJz
KQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRy
cykKIHsKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVu
c2lvbik7CiAgICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0g
ICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRo
cm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkg
b24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3Rz
IGFyZSBub3Qgc2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVy
cywgc28KICAgICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0
bGluZy4gT3BlbkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21l
IHNvcnQgb2YgaW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAot
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIs
IHRoaXMpOworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
ICglcCkuIiwgdGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVu
dCgpKSB7CkBAIC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAh
PSB0aGlzKTsKICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9H
KFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlz
KTsKKyAgICBMT0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICgl
cCkuIiwgdGhpcyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgp
IGNvbnN0CkBAIC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6
OmlzVmFsaWQoKSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRm
b3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXND
aGVjaykgewogICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0
ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRT
dGF0dXMgPSAwOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0
VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIGlmICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUy
MCw3ICs1MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIGlmIChtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcg
KzUyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQoKQogICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5n
KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNr
aW5nKCkKIHsKICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0
eSgpKTsKICAgICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxs
b2NhdGluZyBhIG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVz
c3VyZS4KQEAgLTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAg
ICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBh
dXRvIGJhY2tpbmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoKQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShi
YWNraW5nKSwgcGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5n
LCB2b2lkKiBwYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCog
cGJ1ZmZlcikKIHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJp
bmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4
dHVyZVRhcmdldCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNU
QU5HTEVfQVJCKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtl
Q3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VS
RkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNo
bWVudFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwg
R0NHTHVpbnQgcGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewog
ICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19j
YXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2
NywyNCArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZh
Y2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1faXNGb3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNp
bXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsK
LSAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdl
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdl
cigpLmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJl
KSB7Ci0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JE
aXNwbGF5KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXko
KQogewogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0
LDE1ICs3MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRp
c3BsYXkoKQogCiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGlj
c0NvbnRleHRHTENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1f
Y3YuZ2V0KCk7CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHMoKQogewogICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVm
ZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIu
aGFuZGxlKQpAQCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxN
ZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvTWVkaWFTYW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFp
bi5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRp
c3BsYXlCdWZmZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZv
cm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3Jt
RwogfQogI2VuZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZp
ZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdP
Ymo7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxF
KFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRl
ICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSA8cGFsL3NwaS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi9TY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNp
bmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0
dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNp
emU7IgotICAgICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBp
bnQgdV9mbGlwWTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4o
KSIKLSAgICAieyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAx
LjApOyIKLSAgICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41
ICsgLjU7IgotICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFs
aXplZFBvc2l0aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2
X3lUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2
VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19Owot
Ci1zdGF0aWMgY29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
IHsKLSAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1
X3lUZXh0dXJlU2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29y
ZGluYXRlOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAg
InZvaWQgbWFpbigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9z
aXRpb24sIDAsIDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bv
c2l0aW9uICogLjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAg
ICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIK
LSAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95
VGV4dHVyZVNpemU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXpl
ZFBvc2l0aW9uICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHBy
IGF1dG8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVu
aWZvcm0gc2FtcGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JN
YXRyaXg7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2
YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0g
ICAgInsiCi0gICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1
X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0
ZXh0dXJlMkQodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIg
ICAgeXV2LmEgPSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1h
dHJpeDsiCi0gICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdt
ZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3Jt
IHNhbXBsZXIyRFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1h
dHJpeDsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZh
cnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAg
ICAieyIKLSAgICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVj
dCh1X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2Ig
PSB0ZXh0dXJlMkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIK
LSAgICAiICAgIHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVf
Y29sb3JNYXRyaXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2Ugewot
ICAgIFVua25vd24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJh
bnNmZXJGdW5jdGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBr
SVRVX1JfNjAxXzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQ
M19ENjUsCi0gICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJh
bmdlRnJvbVBpeGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBp
eGVsRm9ybWF0KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4Ogot
ICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhB
VkUoQ09SRVZJREVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlm
Ci0gICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
X0FSR0IyMTAxMDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBD
YkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZ
cENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0
NFlwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NF
RF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxS
YW5nZTo6RnVsbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5r
bm93bjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5j
dGlvbkZyb21TdHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQot
ICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAg
ICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENG
RXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkp
Ci0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0g
ICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1Az
KCkgJiYgQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkK
LSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2Fu
TG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVW
aWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0
cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0
dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVy
RnVuY3Rpb25DVjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAg
ICAgR0xmbG9hdCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxv
YXQgY2I7Ci0gICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07
Ci0KLSAgICBjb25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZs
b2F0IGIpCi0gICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkK
LSAgICAgICAgOiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAg
IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xm
bG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0K
LX07Ci0KLXN0cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBibGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRD
b2xvciB3aGl0ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xv
ciByZWQgICAgIHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBn
cmVlbiAgIHswLCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVl
ICAgIHswLCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAg
IHswLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsx
LCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAx
LCAwfTsKLX07Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0
XVs0XTsKLQotICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNi
Q29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25z
dCBHTGZsb2F0KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0g
ICAgfQotCi0gICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9h
dENvbG9yJikgY29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4
KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZm
aWNpZW50KQotICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlD
YkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiAr
IEtnICogRyArIEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0g
ICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFs
dWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlz
IGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0
aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6
Ci0gICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAq
ICgxIC0gS2IpKSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtn
KSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8g
V2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBb
MTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEg
cmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZh
bHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFu
Z2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2Vm
ZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0
IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5m
IC8gMjE5LmY7Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVs
UmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlT
Y2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNy
U2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10g
PSAwOwotCi0gICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0g
PSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZm
aWNpZW50IC8gY2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZm
aWNpZW50KTsKLSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGlu
Z0ZhY3RvcjsKLSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBj
YkNvZWZmaWNpZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsK
LQotICAgIHJvd3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11b
Ml0gPSAwOwotICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5h
bCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4
XQotICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0
byBbMTYsIDI0MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7
ICsrcm93TnVtYmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAg
ICAgICAgYXV0byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAg
ICAgYXV0byYgeiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAg
ICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJh
bmdlOjpWaWRlbykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQot
Y29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxv
YXRDb2xvciYgY29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAg
ICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsg
cm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVsw
XSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAq
IGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJn
Yi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5i
ICsgcm93c1syXVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRv
UkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRy
YW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9
IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1h
dHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20g
dGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAg
Ly8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0
YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4x
MTRmLCAwLjI5OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxs
TWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAx
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwg
MCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
eWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRy
aWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2
IDIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJU
LjcwOS0yLTE5OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5Vmlk
ZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25z
dGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVs
bCwgMC4wNzIyLCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwg
MjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAg
IDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQs
IDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRh
LCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFn
ZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBm
dWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTks
ICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAg
ICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIu
NzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRo
ZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8v
IGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAu
MDU5MywgMC4yNjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAx
MjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxh
Y2sgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIw
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVu
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMx
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2Vu
dGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwg
MCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0g
ICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01Q
VEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVl
Lm9yZy9kb2N1bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXgg
c21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07
Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQw
TVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNN
UFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0
MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVs
bG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNv
bG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRl
MjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwg
IDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJl
ZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJT
TVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAx
LCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpj
eWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsK
LSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8s
IFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAg
ICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJh
bnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAg
IG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1h
dHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVu
Y3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlv
bkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMu
Z2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNW
OjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQo
KS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjpr
U01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQot
ICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQg
d2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxS
YW5nZTo6VW5rbm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0g
ICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBt
YXRyaWNlcy5nZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8g
QXNzdW1lIHVua25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRl
cmF0b3IgPT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmlj
ZXMuZ2V0KCkuZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7
Ci0KLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJl
dHVybiBpdGVyYXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4
dCkgfTsKLSAgICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rl
c3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFOjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmIG93bmVyKQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0
aWJsZSBjb250ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBk
b2VzIG5vdAotICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5Lgot
ICAgIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09O
VEVYVF9DTElFTlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAy
LAotICAgICAgICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUs
Ci0gICAgICAgIEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19F
TkFCTEVEX0FOR0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJ
TkRfR0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAg
ICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0
Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25m
aWcoKTsKLSAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5
LCBjb25maWcsIG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlm
IChjb250ZXh0ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAg
YXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRl
eHQpOwotICAgIH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQp
IHsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9y
ZWN0YW5nbGUiKTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3Rl
eHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBH
TF9OT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdM
aW50IHZlcnRleFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0g
ICAgR0xpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUik7Ci0gICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAg
IGF1dG8gcHJvZ3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyLCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4
U2hhZGVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAg
ICAgIGdsOjpEZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNl
IGFyZSB3cml0dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQg
dnNMZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5n
dGgoKSA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBH
TGludCBmc0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
MkQubGVuZ3RoKCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgo
KTsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBz
X3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUy
RCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4
dHVyZVJlY3RhbmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAm
dmVydGV4U2hhZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJh
Z21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBn
bDo6Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNo
YWRlcik7Ci0gICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2w6OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlz
IGNoZWNrZWQgYWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24g
YmVuZWZpdC4KLQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5C
dWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVs
ZXRlQnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0
aWNlc1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsK
LSAgICBnbDo6QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0
aWNlcywgR0xfU1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAg
ICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1
ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGlu
dCBzdGF0dXMgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFt
LCBHTF9MSU5LX1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMp
IHsKLSAgICAgICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZS
b2J1c3RBTkdMRSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAm
dnNTdGF0dXMpOwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRT
aGFkZXJpdlJvYnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwg
bnVsbHB0ciwgJmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFKCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIs
IHRoaXMsIHN0YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjb250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xl
YW51cC5yZWxlYXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBt
X2Rpc3BsYXkgPSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25m
aWcgPSBjb25maWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0g
ICAgbV9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7
Ci0gICAgbV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9u
KHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4
Iik7Ci0gICAgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRp
b24oeXV2UHJvZ3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2Nh
dGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXpl
Iik7Ci0gICAgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1M
b2NhdGlvbih5dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlv
bkF0dHJpYnV0ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJh
X3Bvc2l0aW9uIik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdo
aWxlIHRoZSBwcm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0o
eXV2UHJvZ3JhbSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRp
b25BdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQ
b3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAg
IGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2Us
IFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQy
MGYnIHBpeGVsIGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3Jt
YXRzLgotICAgIE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1h
dFR5cGUoaW1hZ2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVf
NDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShD
T1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVs
Rm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9S
YW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZv
cm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJl
ZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFz
dXJmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVk
ID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0Rmxp
cFkKLSAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1
cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7
Ci0gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRo
ZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhp
cyBpcyBhIG5vLW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2Nv
bnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXks
IG1fY29udGV4dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9
IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4
ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmlu
aXRpYWxpemVkIGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAv
LyBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xf
VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUs
IG51bGxwdHIpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0g
ICAgfSk7Ci0gICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0g
ICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBn
bDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0
YXR1cyA9IGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBp
ZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1
cmUuIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0
ZXh0dXJlcyBmb3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9T
dXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0
ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxh
bmVXaWR0aCA9IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRv
IHV2UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwot
Ci0gICAgR0xlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5U
ZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtl
U2NvcGVFeGl0KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1
dlRleHR1cmUpOwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsK
LSAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3Jl
OjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZp
ZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1
dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEp
OwotICAgIGlmICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2
SGFuZGxlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFu
ZGxlXSB7Ci0gICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNl
KGRpc3BsYXksIHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7
Ci0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNs
ZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4
dHVyZXMoMSwgJnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9
IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2Nv
bmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwg
R0xfUkVELCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJm
YWNlLCAwKTsKLSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBh
dXRvIHlIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwg
eUhhbmRsZV0gewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNw
bGF5LCB5SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBw
YXJhbWV0ZXJzLgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwg
MCk7Ci0gICAgZ2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0g
ICAgZ2w6OlVuaWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlw
WTo6WWVzID8gMSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYo
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWln
aHQpOwotCi0gICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxG
b3JtYXQpOwotICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9t
U3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50
KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBj
b2xvck1hdHJpeCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24o
cmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29s
b3JNYXRyaXhVbmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAg
ICAvLyBEbyB0aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5H
TEVTLCAwLCA2KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1
cmZhY2VTZWVkID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91
dHB1dFRleHR1cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1f
bGFzdEZsaXBZID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
QU5HTEUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQz
MDFmMTI1MWI3MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5o
IgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0v
LyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9m
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBp
bnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5H
TEUgQ29jb2EuCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUo
Q1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBGbGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4
dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RU
ZXh0dXJlU2VlZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmIG1fb3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9k
aXNwbGF5IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9j
b25maWcgeyBudWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIg
eyAwIH07Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAg
ICBHQ0dMaW50IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQg
bV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlw
WVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2Nh
dGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7
IC0xIH07Ci0gICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9
OwotCi0gICAgRmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2lu
dGVyPElPU3VyZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJm
YWNlU2VlZCB7IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dM
dWludCwgdW5zaWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVy
ZVNlZWQ7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBo
aWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJ
T04pCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckND
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVy
ZTJEIHsKKyAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVj
MiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7Igor
ICAgICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVD
b29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZvaWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFf
cG9zaXRpb24sIDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBh
X3Bvc2l0aW9uICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAi
ICAgICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55
OyIKKyAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIK
KyAgICAiICAgIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisg
ICAgIn0iX3MKK307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRl
eHR1cmVSZWN0YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAi
dW5pZm9ybSB2ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIg
dl95VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29y
ZGluYXRlOyIKKyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlv
biA9IHZlYzQoYV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQ
b3NpdGlvbiA9IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09
IDEpIgorICAgICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXpl
ZFBvc2l0aW9uLnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVk
UG9zaXRpb24gKiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5h
dGUgPSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9
OworCitjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0
dXJlOyIKKyAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3Jt
IG1hdDQgdV9jb2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRp
bmF0ZTsiCisgICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2
b2lkIG1haW4oKSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5y
ID0gdGV4dHVyZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAi
ICAgIHl1di5nYiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRl
KS5yZzsiCisgICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5
dXYgKiB1X2NvbG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBh
dXRvIHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsi
CisgICAgInVuaWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0g
bWF0NCB1X2NvbG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGlu
YXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZv
aWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIg
PSB0ZXh0dXJlMkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAg
ICAiICAgIHl1di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29v
cmRpbmF0ZSkucmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0Nv
bG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3Mg
UGl4ZWxSYW5nZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKwor
ZW51bSBjbGFzcyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9S
XzcwOV8yLAorICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtE
Q0lfUDMsCisgICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhl
bFJhbmdlIHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQorewor
ICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
NDQ0QVlwQ2JDcjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoK
KyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAg
IGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisg
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFu
Z2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVv
UmFuZ2U6CisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMp
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVv
UmFuZ2U6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVW
SURFT19DT01QUkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25D
ViB0cmFuc2ZlckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAg
aWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247
CisgICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9S
XzcwOV8yKSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8y
OworICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVf
Ul82MDFfNCkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFf
NDsKKyAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01Q
VEVfMjQwTV8xOTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRF
XzI0ME1fMTk5NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9EQ0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1h
dHJpeF9EQ0lfUDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1Az
OworICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1Az
X0Q2NSgpICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2
NSkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYg
KGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgp
ICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAp
KQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENv
bG9yIHsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0
IHI7CisgICAgICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAg
ICAgIH0gcmdiOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAg
ICAgICAgICAgR0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0g
eWNiY3I7CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBH
TGZsb2F0IGcsIEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7Cisg
ICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBH
TGZsb2F0IHNjYWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8g
c2NhbGUgfQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJz
KEdMZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVl
IDogLXZhbHVlOworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVx
dWFsVG8oY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4
RGVsdGEpOworICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25z
dGV4cHIgR0xmbG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHTGZsb2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR0xmbG9hdENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JN
YXRyaXggeworICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1h
dHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmlj
aWVudCk7CisKKyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRD
b2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4
cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JD
b2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAg
ICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhl
IGZvcm06CisgICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0g
KEIgLSBZKSAvICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAt
IEtyKSkKKyAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBp
biBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0g
MQorICAgIC8vCisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBh
bmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3Ip
KSAqIENyCisgICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkg
LSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3Ig
LyBLZykgKiBDcgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRl
byByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwg
YW5kIENiICYgQ3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0
aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFu
ZCBDciBhbGwgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9m
IDI1Ni4KKworICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0g
Y3JDb2VmZmljaWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4
ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2Nh
bGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIy
NC5mOworCisgICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0g
PSAwOworICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29l
ZmZpY2llbnQpOworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2Fs
aW5nRmFjdG9yOworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEg
LSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAg
cm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
ICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsK
KworICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2Jj
clNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJd
ID0gMDsKKyAgICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJv
d3NbM11bMV0gPSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOwor
CisgICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252
ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2Yg
dmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJv
d051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8m
IHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAg
ICAgYXV0byYgeSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAg
YXV0byYgdyA9IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Cisg
ICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0g
eCAqIDE2IC8gMjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1h
dHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEdMZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsg
cm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93
c1swXVszXSwKKyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAq
IGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAg
ICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5n
ICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0
YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1
bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0
aW9uKQoreworICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0
IFlDYkNyTWF0cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBt
YXRyaWNlczsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8v
IE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYw
MSByZXYgNCBzcGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1S
RUMtQlQuNjAxCisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRy
aXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIg
c3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4x
MTRmLCAwLjI5OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1
LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
ci42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUw
LCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fz
c2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1
LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAx
NzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFu
LCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21w
b25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBz
Oi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywg
MC4wNzIyLCAwLjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEu
NWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChy
NzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDEx
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAx
LjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisK
KyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNr
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJs
YWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41
ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIz
NywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBH
TGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBN
YXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4y
MDIwLTIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVD
LUJULjIwMjAKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0
cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwg
MC4wNTkzLCAwLjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4
ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQs
ICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpy
ZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAx
NiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxs
b3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsK
KworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwg
ICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAx
MSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAv
IDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgY3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJv
bSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAg
ICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNv
bnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJh
bmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1h
dHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEy
IH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYy
LCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAx
MTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Ymx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICog
R0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRh
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
Ojp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3Jl
ZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21w
dGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3
NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUg
MjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRp
c3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFj
ZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYw
MV80KSwgcjYwMVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShN
YXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQp
LCByNjAxRnVsbE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5
KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3
MDlWaWRlb01hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBp
eGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1
bGxNYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVv
TWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5n
ZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRy
aXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpW
aWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlk
ZW9NYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0
ME1GdWxsTWF0cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tl
ZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4K
KyAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdl
ID09IFBpeGVsUmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVs
bDsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5j
dGlvbnMgYXJlIHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQo
KSkKKyAgICAgICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1hdHJpY2VzLmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBH
cmFwaGljc0NvbnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRl
eHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBp
ZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9k
aXNwbGF5LCBtX2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJm1feXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZtX2ZyYW1lYnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2Nv
bnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYShHcmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3du
ZXIpCit7CisgICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0
ZSB3aXRoIG93bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5l
c3Mgb3IgV2ViR0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAg
IG93bmVyLm1faXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdM
X0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAg
IEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZB
TFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlV
TSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdM
RGlzcGxheSBkaXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmln
IGNvbmZpZyA9IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0
ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmos
IGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50
KGRpc3BsYXksIGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6bWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVz
dHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29s
IHVzZVRleHR1cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBH
TF9URVhUVVJFXzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlT
VCkKKyAgICBpZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVz
dEV4dGVuc2lvbkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAg
ICAgaWYgKGdsOjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNo
YWRlcihHTF9WRVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpD
cmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9
IGdsOjpDcmVhdGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAg
ICAgZ2w6OkRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgfSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJl
IGNvbXBpbGUtdGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
VmVydGV4U2hhZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8g
c195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRl
clNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195
dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUy
RCA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRl
clNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7
CisgICAgZ2w6OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVy
U291cmNlLCAmZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7
CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hT
aGFkZXIoeXV2UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1
dlByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgLy8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0
aWNhbCBwYXJhbGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRl
eEJ1ZmZlciA9IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7Cisg
ICAgYXV0byB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4
QnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIp
OworICAgIH0pOworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwg
MSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgeXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZG
RVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBH
THVpbnQgZnJhbWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1l
YnVmZmVyKTsKKyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Zy
YW1lYnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVm
ZmVyKTsKKyAgICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dy
YW1pdlJvYnVzdEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAm
c3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7
CisgICAgICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09N
UElMRV9TVEFUVVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3Rh
dHVzID0gMDsKKyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFk
ZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFp
bGVkIHRvIGxpbms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0
dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2Uo
KTsKKyAgICB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZl
ckNsZWFudXAucmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250
ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1
ZmZlciA9IHl1dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7
CisgICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7Cisg
ICAgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0
aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAg
IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVy
ZVNpemUiKTsKKyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0
cmliTG9jYXRpb24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlz
IGRlbGV0ZWQgYnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGlu
IHVzZS4KKyAgICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6
VmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdM
X0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1
cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJl
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgRmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9u
bHkgc3VwcG9ydHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUg
c3VwcG9ydGluZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0g
Q1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9y
bWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8v
IE5PTElOVAorICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9Q
SVhFTF9GT1JNQVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhl
bEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxS
YW5nZQorI2VuZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBB
c2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywg
Rm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1
ZmZlckdldElPU3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChz
dXJmYWNlKTsKKyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFj
ZSA9PSBtX2xhc3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1
cmZhY2VTZWVkCisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBt
X293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0
ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVk
IHRvIGl0LCBhbmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNp
bmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRo
KGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFn
ZSk7CisKKyAgICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBU
aGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBl
YXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVy
cm9yIGlzIG5vdCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFr
ZVNjb3BlRXhpdChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQs
IHR5cGVdIHsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRl
eHR1cmUpOworICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGds
OjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0
ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUy
RChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91
dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRv
IGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCk7CisKKyAgICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8g
c291cmNlLgorICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUo
c3VyZmFjZSwgMCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRP
ZlBsYW5lKHN1cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3Vy
ZmFjZUdldEhlaWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0
dXJlVGFyZ2V0ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAg
R0x1aW50IHV2VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OworICAgIGF1dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0g
eworICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7Cisg
ICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2
aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRh
Y2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xf
SU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhl
aWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNj
b3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29y
ZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOwor
ICAgIH0pOworCisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMo
MSwgJnlUZXh0dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQo
W3lUZXh0dXJlXSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOwor
ICAgIH0pOworICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6Qmlu
ZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZl
ckFuZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJn
ZXQsIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5
UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhh
bmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRl
c3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0p
OworCisgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVu
aWZvcm0xaShtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFp
KG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2
RmxpcFlVbmlmb3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAg
Z2w6OlVuaWZvcm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgs
IHlQbGFuZUhlaWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdl
ID0gcGl4ZWxSYW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFu
c2ZlckZ1bmN0aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0
PENGU3RyaW5nUmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JH
Qk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlv
bik7CisgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biwgMSwgR0xfRkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJh
d2luZy4KKyAgICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9s
YXN0U3VyZmFjZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNl
U2VlZDsKKyAgICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50
ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAg
ICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0
ZTM5NjBiNmQ3MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx3dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHcmFwaGljc0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxl
bWVudGF0aW9uIGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBw
YXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENv
Y29hLgorY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZD
b2NvYSgpIGZpbmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBGbGlwWSkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
KEdyYXBoaWNzQ29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2Vl
ZChHQ0dMdWludCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVT
ZWVkLmdldCh0ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBt
X293bmVyOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7
IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51
bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsg
bnVsbHB0ciB9OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9Owor
ICAgIFBsYXRmb3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGlu
dCBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3Jt
TG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biB7IC0xIH07CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAt
MSB9OworICAgIEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9Owor
ICAgIEdDR0xpbnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAg
IEZsaXBZIG1fbGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1
cmZhY2VSZWY+IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQg
eyAwIH07CisKKyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVu
c2lnbmVkLCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOwor
fTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCmlu
ZGV4IGI4MzJhMTg2YTQyYzhiZTMyMmE0YzcwODFmNzVkY2Q0OTBjMjdmODguLjJjMGQ5OTdjZjM4
MDE4MTExZGM0NzNhMWVkZmM4NWIzZGY3OGQ4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwyMiArMjMsMzA5
NSBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBF
TkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIK
KyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdMQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMTWFuYWdlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAiVGVtcG9y
YXJ5T3BlbkdMU2V0dGluZy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgorI2luY2x1
ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisK
KyNpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisj
ZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
TElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5HTF9FUykK
KyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0UoTklD
T1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhR0NHTExheWVyLmgiCisjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiYgZ2V0
Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7CisgICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4q
IHNoYXJlZE5hbWVIYXNoOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CisgICAg
ICAgIHNoYXJlZE5hbWVIYXNoID0gbmV3IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj47
CisgICAgfSk7CisKKyAgICByZXR1cm4gKnNoYXJlZE5hbWVIYXNoOworfQorCitzdGF0aWMgdm9p
ZCBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoU2hhZGVyTmFtZUhhc2gqIHNoYWRlck5h
bWVIYXNoKQoreworICAgICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKSA9IHNoYWRl
ck5hbWVIYXNoOworfQorCisvLyBIYXNoIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEFOR0xFIHRyYW5z
bGF0b3IvY29tcGlsZXIgdG8gZG8KKy8vIHN5bWJvbCBuYW1lIG1hbmdsaW5nLiBTaW5jZSB0aGlz
IGlzIGEgc3RhdGljIG1ldGhvZCwgYmVmb3JlCisvLyBjYWxsaW5nIGNvbXBpbGVTaGFkZXIgd2Ug
c2V0IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcgorLy8gdG8gcG9pbnQgdG8gdGhlIG1hcCBr
ZXB0IGJ5IHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgor
CitzdGF0aWMgdWludDY0X3QgbmFtZUhhc2hGb3JTaGFkZXIoY29uc3QgY2hhciogbmFtZSwgc2l6
ZV90IGxlbmd0aCkKK3sKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBDU3RyaW5nIG5hbWVBc0NTdHJpbmcgPSBDU3RyaW5nKG5hbWUpOworCisgICAgLy8gTG9vayB1
cCBuYW1lIGluIG91ciBsb2NhbCBtYXAuCisgICAgU2hhZGVyTmFtZUhhc2gqJiBjdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXIgPSAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCk7Cisg
ICAgU2hhZGVyTmFtZUhhc2g6Oml0ZXJhdG9yIGZpbmRSZXN1bHQgPSBjdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXItPmZpbmQobmFtZUFzQ1N0cmluZyk7CisgICAgaWYgKGZpbmRSZXN1bHQgIT0g
Y3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZpbmRS
ZXN1bHQtPnZhbHVlOworCisgICAgdW5zaWduZWQgaGFzaFZhbHVlID0gbmFtZUFzQ1N0cmluZy5o
YXNoKCk7CisKKyAgICAvLyBDb252ZXJ0IHRoZSAzMi1iaXQgaGFzaCBmcm9tIENTdHJpbmc6Omhh
c2ggaW50byBhIDY0LWJpdCByZXN1bHQKKyAgICAvLyBieSBzaGlmdGluZyB0aGVuIGFkZGluZyB0
aGUgc2l6ZSBvZiBvdXIgdGFibGUuIE92ZXJmbG93IHdvdWxkCisgICAgLy8gb25seSBiZSBhIHBy
b2JsZW0gaWYgd2UncmUgYWxyZWFkeSBoYXNoaW5nIHRvIHRoZSBzYW1lIHZhbHVlIChhbmQKKyAg
ICAvLyB3ZSdyZSBob3BpbmcgdGhhdCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY29udGV4dCB3
ZQorICAgIC8vIGRvbid0IGhhdmUgdGhhdCBtYW55IHN5bWJvbHMpLgorCisgICAgdWludDY0X3Qg
cmVzdWx0ID0gaGFzaFZhbHVlOworICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgMzIpICsgKGN1cnJl
bnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2l6ZSgpICsgMSk7CisKKyAgICBjdXJyZW50TmFtZUhh
c2hNYXBGb3JTaGFkZXItPnNldChuYW1lQXNDU3RyaW5nLCByZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IEdyYXBo
aWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNv
c2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xMYXllcj4oKnRoaXMpOworI2Vsc2UK
KyAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3Jt
TGF5ZXI+KCp0aGlzKTsKKyNlbmRpZgorCisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKworICAgIHZh
bGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygp
OyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAgICAvLyBD
cmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
KTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwor
CisgICAgLy8gQ3JlYXRlIGFuIEZCTy4KKyAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zi
byk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAmbV9j
b21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
Y29tcG9zaXRvclRleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
OjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgIDo6Z2xHZW5UZXh0dXJlcygx
LCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisjZW5kaWYKKworICAgIC8vIENyZWF0ZSBhIG11
bHRpc2FtcGxlIEZCTy4KKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0
ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAg
ICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAg
ICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRp
c2FtcGxlRkJPOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1
dGVzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEJpbmQg
Y2FudmFzIEZCTy4KKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJP
ID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAg
ICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCisg
ICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5k
aWYKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQor
ICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgfQorCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgOjpnbEVuYWJsZShHTF9WRVJURVhf
UFJPR1JBTV9QT0lOVF9TSVpFKTsKKworICAgIGlmIChHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVy
c2lvbigpID49IDMyMCkgeworICAgICAgICBtX3VzaW5nQ29yZVByb2ZpbGUgPSB0cnVlOworCisg
ICAgICAgIC8vIEZyb20gdmVyc2lvbiAzLjIgb24gd2UgdXNlIHRoZSBPcGVuR0wgQ29yZSBwcm9m
aWxlLCBzbyByZXF1ZXN0IHRoYXQgb3VwdXQgdG8gdGhlIHNoYWRlciBjb21waWxlci4KKyAgICAg
ICAgLy8gT3BlbkdMIHZlcnNpb24gMy4yIHVzZXMgR0xTTCB2ZXJzaW9uIDEuNTAuCisgICAgICAg
IG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNMXzE1MF9DT1JFX09VVFBVVCk7
CisKKyAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3Jl
IHByb2ZpbGUsIGFuZCB3ZSBuZWVkIGEgVkFPIGZvciByZW5kZXJpbmcuCisgICAgICAgIC8vIEEg
VkFPIGNvdWxkIGJlIGNyZWF0ZWQgYW5kIGJvdW5kIGJ5IGVhY2ggY29tcG9uZW50IHVzaW5nIEdM
IHJlbmRlcmluZyAoVGV4dHVyZU1hcHBlciwgV2ViR0wsIGV0YykuIFRoaXMgaXMKKyAgICAgICAg
Ly8gYSBzaW1wbGVyIHNvbHV0aW9uOiB0aGUgZmlyc3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wg
Y3JlYXRlZCBvbiBhIEdMQ29udGV4dCB3aWxsIGNyZWF0ZSBhbmQgYmluZCBhIFZBTyBmb3IgdGhh
dCBjb250ZXh0LgorICAgICAgICBHQ0dMaW50IGN1cnJlbnRWQU8gPSBnZXRJbnRlZ2VyKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpWRVJURVhfQVJSQVlfQklORElORyk7CisgICAgICAgIGlmICgh
Y3VycmVudFZBTykgeworICAgICAgICAgICAgbV92YW8gPSBjcmVhdGVWZXJ0ZXhBcnJheSgpOwor
ICAgICAgICAgICAgYmluZFZlcnRleEFycmF5KG1fdmFvKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIEZvciBsb3dlciB2ZXJzaW9ucyByZXF1ZXN0IHRoZSBjb21wYXRpYmls
aXR5IG91dHB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgorICAgICAgICBtX2NvbXBpbGVyID0g
QU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF9DT01QQVRJQklMSVRZX09VVFBVVCk7CisKKyAgICAg
ICAgLy8gR0xfUE9JTlRfU1BSSVRFIGlzIG5lZWRlZCBpbiBsb3dlciB2ZXJzaW9ucy4KKyAgICAg
ICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworICAgIH0KKyNlbHNlCisgICAgLy8gQWRq
dXN0IHRoZSBzaGFkZXIgc3BlY2lmaWNhdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciBHTEVTMyAo
aS5lLiBXZWJHTDIgc3VwcG9ydCkgd2FzIHJlcXVlc3RlZC4KKyNpZiBFTkFCTEUoV0VCR0wyKQor
ICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCwgKGF0dHJp
YnV0ZXMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJH
TDIpID8gU0hfV0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKKyNlbHNlCisgICAgbV9jb21w
aWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBTSF9XRUJHTF9TUEVDKTsK
KyNlbmRpZgorI2VuZGlmCisKKyAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAgICBTaEJ1
aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgc2g6OkluaXRCdWlsdEluUmVzb3Vy
Y2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRy
aWJzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IGdldElu
dGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JT
KTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyA9IGdldEludGVnZXIoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMpOworICAgIEFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdlcihHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICBBTkdM
RVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdlcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwor
ICAgIEFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdlcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAgIEFOR0xF
UmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKTsKKworICAgIC8v
IEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzID0gMTsKKworICAgIEdDR0xpbnQgcmFuZ2VbMl0geyB9OworICAgIEdDR0xpbnQg
cHJlY2lzaW9uID0gMDsKKyAgICBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkZSQUdNRU5UX1NIQURFUiwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkhJ
R0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKKyAgICBBTkdMRVJlc291cmNlcy5GcmFnbWVu
dFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0gfHwgcHJlY2lzaW9uKTsKKwor
ICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKworICAgIDo6Z2xD
bGVhckNvbG9yKDAsIDAsIDAsIDApOworfQorCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOworICAgIGJvb2wgc3Vj
Y2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywg
c3VjY2Vzcyk7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVz
KDEsICZtX3RleHR1cmUpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAo
bV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2Nv
bXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAg
ICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
KyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAg
ICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRp
c2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1
dGVzLmRlcHRoKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgaWYgKG1fZGVwdGhCdWZm
ZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIp
OworCisgICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAgaWYgKG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgOjpnbERlbGV0ZUZyYW1lYnVm
ZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICA6Omds
RGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisjZW5kaWYKKworI2lm
IFVTRShDQUlSTykKKyAgICBpZiAobV92YW8pCisgICAgICAgIGRlbGV0ZVZlcnRleEFycmF5KG1f
dmFvKTsKKyNlbmRpZgorfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25pY29zaWFM
YXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjZWxzZQorICAgIHJldHVybiBtX3RleG1hcExh
eWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCit7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworI2lmIFVTRShPUEVOR0xf
RVMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCisjaWYgUExBVEZPUk0oR1RLKQorRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVuc2lv
bnMpIHsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAvLyBnbEdldFN0cmluZ2kgaXMgbm90
IGF2YWlsYWJsZSBvbiBHTEVTMi4KKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxF
eHRlbnNpb25zR0xPcGVuR0xFUz4odGhpcywgIGZhbHNlKTsKKyNlbHNlCisgICAgICAgIC8vIEZy
b20gT3BlbkdMIDMuMiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJlIHdlIG11
c3QgdXNlIGdsR2V0U3RyaW5naS4KKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxF
eHRlbnNpb25zR0xPcGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkg
Pj0gMzIwKTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKK30KKyNl
bmRpZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0
eShib29sKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUV2
ZW50Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCit7CisgICAgaWYg
KGV2ZW50ID09IFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVyZSkKKyAg
ICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQoreworfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1
bHRzKCkKK3sKKyAgICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQoreworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0
QXR0cmlidXRlcygpOworCisgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBleHRlbnNpb25z
ID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAgICAgIGlm
IChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKKyAg
ICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgor
ICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMo
YXR0cnMpOworICAgIH0KKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmICFtX2lzRm9yV2ViR0wy
KSB7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUiKSkgeworICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7
CisgICAgICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cHJlcGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisKKyNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIFRlbXBvcmFy
eU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsK
KyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZB
TFNFKTsKKyNlbmRpZgorCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQor
ICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9y
VGV4dHVyZSk7CisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJl
KTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAg
OjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1Jf
QVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAgIGdsRmx1
c2goKTsKKworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGVsc2UKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICByZXR1
cm47CisjZW5kaWYKKworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zdGF0ZS5ib3VuZFRhcmdldChHTF9URVhU
VVJFMCkgPT0gR0xfVEVYVFVSRV8yRCA/IG1fc3RhdGUuYm91bmRUZXh0dXJlKEdMX1RFWFRVUkUw
KSA6IDApOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQp
OworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZC
Tyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQorICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0
ZS5ib3VuZERyYXdGQk8pOworICAgIDo6Z2xGbHVzaCgpOworfQorCitzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMo
KQoreworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAoY29udGV4dEF0
dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5l
Y2Vzc2FyeSgpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICAgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9
IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOworICAgICAgICB9CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBpeGVsc0Zv
clBhaW50UmVzdWx0cygpOworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAo
d2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOwor
ICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFya0Nv
bnRleHRDaGFuZ2VkKCk7CisKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3Vy
cmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAg
VGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xf
RkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhF
UiwgR0xfRkFMU0UpOworICAgIAorICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJP
cyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKworICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVm
ZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0geyAwLCAwLCAwLCAwIH0sIGNs
ZWFyRGVwdGggPSAwOworICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7CisgICAgR0xib29sZWFu
IGNvbG9yTWFza1tdID0geyBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFIH0sIGRl
cHRoTWFzayA9IEdMX1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZiwg
c3RlbmNpbE1hc2tCYWNrID0gMHhmZmZmZmZmZjsKKyAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9
IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9W
QUxVRSwgY2xlYXJDb2xvcik7CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAg
OjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAgICA6Omds
Q29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOworCisgICAgYXV0
byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuZGVwdGgpIHsK
KyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgp
OworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsKKyAgICAg
ICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAg
ICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBU
SF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6
OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7Cisg
ICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9T
VEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykp
OworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSywgcmVp
bnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKKyAgICAgICAgOjpnbFN0
ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICA6OmdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xlYXJNYXNr
IHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisKKyAgICA6OmdsQ2xlYXIoY2xlYXJN
YXNrKTsKKworICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0s
IGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIDo6Z2xDb2xvck1hc2soY29sb3JN
YXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICBp
ZiAoYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
RGVwdGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAg
ICB9CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbChj
bGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwg
c3RlbmNpbE1hc2spOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCBz
dGVuY2lsTWFza0JhY2spOworICAgIH0KKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKworICAgIGF1dG8gZXJyb3IgPSA6OmdsR2V0RXJyb3Io
KTsKKyAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
V2ViR0wsICJGYXRhbDogT3BlbkdMIGVycm9yIGR1cmluZyBHcmFwaGljc0NvbnRleHRHTCBidWZm
ZXIgaW5pdGlhbGl6YXRpb24gKCVkKS4iLCBlcnJvcik7CisgICAgICAgIGZvcmNlQ29udGV4dExv
c3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIDo6Z2xGbHVzaCgpOworfQorCiti
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9y
bUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hh
ZGVyKSk7CisgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hh
ZGVyKSk7CisgICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHZlcnRleFNoYWRlciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisKKyAgICBI
YXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdzOworICAg
IGZvciAoY29uc3QgYXV0byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWluZ01hcCkg
eworICAgICAgICBjb25zdCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wua2V5Owor
ICAgICAgICAvLyBUaGUgdmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBlYWNoIGlu
ZGV4IG9mIGFuIGFycmF5IHZhcmlhYmxlLgorICAgICAgICAvLyBXZSBvbmx5IHdhbnQgYSBzaW5n
bGUgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBhcnJheS4KKyAgICAgICAgaWYgKHN5bWJvbE5h
bWUuZW5kc1dpdGgoIl0iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIERv
bid0IGNvdW50IGJ1aWx0IGluIHZhcnlpbmdzLgorICAgICAgICBpZiAoc3ltYm9sTmFtZSA9PSAi
Z2xfRnJhZ0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwgc3ltYm9s
TmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBjb25zdCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWluZ01hcC5m
aW5kKHN5bWJvbE5hbWUpOworICAgICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJhZ21lbnRF
bnRyeS52YXJ5aW5nTWFwLmVuZCgpKQorICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5ncy5hZGQo
c3ltYm9sTmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZhbHVlKTsKKyAgICB9CisKKyAgICBzaXplX3Qg
bnVtVmFyeWluZ3MgPSBjb21iaW5lZFZhcnlpbmdzLnNpemUoKTsKKyAgICBpZiAoIW51bVZhcnlp
bmdzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJW
YXJpYWJsZT4gdmFyaWFibGVzOworICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVkVmFyeWlu
Z3Muc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBjb21iaW5l
ZFZhcnlpbmdzLnZhbHVlcygpKQorICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZhcnlpbmdT
eW1ib2wpOworCisgICAgR0NHTGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7CisjaWYgVVNFKE9Q
RU5HTF9FUykKKyAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZh
cnlpbmdWZWN0b3JzKTsKKyNlbHNlCisgICAgaWYgKG1faXNGb3JXZWJHTDIpCisgICAgICAgIDo6
Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMp
OworICAgIGVsc2UgeworICAgICAgICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMgPSAwOworICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFyeWluZ0Zs
b2F0cyk7CisgICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0cyAvIDQ7
CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tp
bmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRl
eFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7CisgICAgQVNT
RVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7CisgICAgY29u
c3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRl
ciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisKKyAgICBIYXNoTWFwPFN0cmluZywg
c2g6OkdMZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOworCisgICAgZm9yIChjb25zdCBh
dXRvJiBlbnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKKyAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOworICAg
ICAgICB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1lLmNfc3Ry
KCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24pOwor
ICAgIH0KKworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5LnVuaWZv
cm1NYXApIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52
YWx1ZS5nZXQoKS5tYXBwZWROYW1lOworICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wg
PSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigp
LCBtYXBwZWROYW1lLmxlbmd0aCgpKSk7CisgICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wgIT0gdmVy
dGV4U3ltYm9sUHJlY2lzaW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUgIT0gZW50
cnkudmFsdWUuZ2V0KCkucHJlY2lzaW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJl
VW5pdCA9IHRleHR1cmU7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFt
KTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1v
dmUocHJvZ3JhbSk7CisgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQor
eworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5h
bWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAgTE9H
KFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUu
dXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICA6OmdsQmluZEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRh
cmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBi
dWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHTHVpbnQgZmJv
OworICAgIGlmIChidWZmZXIpCisgICAgICAgIGZibyA9IGJ1ZmZlcjsKKyAgICBlbHNlCisgICAg
ICAgIGZibyA9IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVG
Qk8gOiBtX2Zibyk7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUik7CisgICAg
QVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAg
ICBpZiAoZmJvICE9IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7CisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9
IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gZmJvOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwg
cmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
VGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0
YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0
YXJnZXQpOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dM
Y2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJs
ZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJsZW5kRXF1
YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1
YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dM
ZW51bSBkZmFjdG9yKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9ICAgICAg
IAorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dM
ZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVt
IGRzdEFscGhhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVy
RGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFu
PGNvbnN0IHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdl
dCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQnVmZmVyU3ViRGF0
YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOworfQorCitHQ0dMZW51
bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51
bSB0YXJnZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCisgICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NH
TGNsYW1wZiBhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ2xlYXIo
bWFzayk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4g
cmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxw
aGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1
ZSB0byB0aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKKyAgICAvLyBwb2ludCBh
IGdsb2JhbCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgorICAgIFNo
QnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVzb3VyY2Vz
KCk7CisgICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFOR0xFUmVz
b3VyY2VzLkhhc2hGdW5jdGlvbjsKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24gPSBu
YW1lSGFzaEZvclNoYWRlcjsKKworICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQorICAg
ICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigp
OworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRl
cnMuZ2V0KCkpOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsK
KworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT5nZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKKworICAgIEFOR0xFUmVzb3VyY2Vz
Lkhhc2hGdW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOworICAgIG1fY29tcGlsZXIuc2V0
UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JT
aGFkZXIobnVsbHB0cik7CisKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFk
ZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7CisgICAgY29uc3QgY2hh
ciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsK
KyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5n
Lmxlbmd0aCgpOworCisgICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBz
b3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuIiwgZ2V0
U2hhZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKFdlYkdMLCAiLS0t
IGJlZ2luIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRyYW5zbGF0
ZWQgc2hhZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKKworICAgIDo6Z2xT
aGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRT
aGFkZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAg
CisgICAgaW50IGNvbXBpbGVTdGF0dXM7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRl
ciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKKworICAgIFNoYWRlclNvdXJjZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAg
IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICAvLyBQb3B1
bGF0ZSB0aGUgc2hhZGVyIGxvZworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFNo
YWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAgIGlmIChs
ZW5ndGgpIHsKKyAgICAgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICAgICAgVmVjdG9yPEdMY2hh
cj4gaW5mbyhsZW5ndGgpOworICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxl
bmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgICAgICBlbnRyeS5sb2cgPSBnZXRVbm1hbmds
ZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworICAgIH0K
KworICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKKyAgICAgICAgZW50cnkuaXNW
YWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRyYW5zbGF0
b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUuIik7Cisg
ICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGly
ZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hN
YXA8UGxhdGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFkZXJTb3Vy
Y2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgY29uc3QgQ1N0cmluZyYgc2hh
ZGVyU291cmNlQ1N0cmluZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7CisgICAgY29uc3QgY2hhciog
c2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7CisgICAgaW50IHNo
YWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7CisKKyAgICBM
T0coV2ViR0wsICItLS0gYmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVu
ZCBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7CisKKyAgICA6
OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRlclNvdXJj
ZUxlbmd0aCk7CisKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgICAgaW50IGNv
bXBpbGVTdGF0dXM7CisKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRV
UywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xfVFJVRSkg
eworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgTE9HKFdlYkdMLCAiRGly
ZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBzdWNjZWVkZWQuIik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjog
ZGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7CisgICAgfQorfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Cisg
ICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5k
UmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJzLmFudGlhbGlh
cyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAg
IHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6
OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlz
YW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ3VsbEZhY2UobW9k
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51
bSBmdW5jKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xEZXB0aE1hc2soZmxh
Zyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFT
U0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xD
b3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBz
aGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xl
bnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsRGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNp
emVpIGNvdW50KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CisgICAgY2hl
Y2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0Vs
ZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwor
ICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmVuYWJsZShHQ0dMZW51bSBjYXApCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRl
eCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGaW5pc2goKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGbHVzaCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxh
dGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGcmFtZWJ1ZmZlclRl
eHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwp
OworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRU
ZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2Uo
R0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdl
bmVyYXRlTWlwbWFwKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dy
YW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1
dGVTaXplKTsKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBH
TF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4K
KyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdM
ZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBt
YXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7
CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
U3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJf
U1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsK
KyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgp
LCBuYW1lTGVuZ3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0
aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlm
b3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7CisjZW5k
aWYKKworICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKKyAgICBpbmZvLnR5cGUgPSB0eXBl
OworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdDR0xpbnQg
c3ltYm9sQ291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENv
dW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywgJnN5bWJv
bENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAu
ZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRz
JiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDR0x1aW50IHJhd0luZGV4ID0g
KGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5z
aXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcFtp
bmRleF0gOiAtMTsKKworICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIHJh
d0luZGV4LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihw
cm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwor
CisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9V
TklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBHTHNpemVp
IG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdMZW51bSB0eXBlID0g
MDsKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNp
emUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBpZiAoIW5h
bWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcgb3JpZ2lu
YWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9V
TklGT1JNLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKKyAgICAKKyNpZm5kZWYg
TkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsK
KyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZvcm0gJWQg
ZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRh
dGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgCisgICAgaW5m
by5uYW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5z
aXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdDR0xpbnQgc3ltYm9sQ291bnQ7
CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHBy
b2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAu
ZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0s
IEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7CisgICAg
ICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7
CisgICAgfQorICAgIAorICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRz
ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJv
bENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xD
b3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsKKyAgICAK
KyAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8p
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSog
Y291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9ncmFtKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50
LCBzaGFkZXJzKTsKK30KKworc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUoY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG5hbWU7CisgICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFtZS51dGY4
KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygid2ViZ2xf
IiwgaGV4KG51bWJlciwgTG93ZXJjYXNlKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U3RyaW5nPiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxh
dGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8mIHN5bWJv
bE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGF1dG8gc3lt
Ym9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoc3ltYm9sRW50cnkgPT0g
c3ltYm9sTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0
byYgbWFwcGVkTmFtZSA9IHN5bWJvbEVudHJ5LT52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOworICAg
IHJldHVybiBTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKTsK
K30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOworICAgIFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNoYWRlcnMo
cHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIGZvciAoR0NHTHNpemVpIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1i
b2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAg
ICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgp
OworICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUg
c2hhZGVycyBhZnRlciBsaW5raW5nLgorICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJN
YXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVu
ZCgpKSB7CisgICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7CisgICAg
ICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtl
ZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFwcGVkTmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgICAgIG1hcHBl
ZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29u
ZCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoc3ltYm9sVHlw
ZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHkoKSkgewor
ICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkgYmUgcmVx
dWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCisgICAgICAgIC8v
IGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIgcHJvZ3Jh
bS4KKyAgICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCisgICAgICAgICAgICBuYW1l
SGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOworICAgICAg
ICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFkZXJzLmdl
dCgpKTsKKworICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hlZE5hbWUo
bmFtZSk7CisKKyAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51bGxwdHIp
OworCisgICAgICAgIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVyYXRlZE5h
bWUsIG5hbWUpOworCisgICAgICAgIHJldHVybiBnZW5lcmF0ZWROYW1lOworICAgIH0KKworICAg
IHJldHVybiBuYW1lOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3Vs
dC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGZvciAoY29uc3QgYXV0byYgc3lt
Ym9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnku
dmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQorICAgICAgICAgICAgcmV0dXJuIHN5bWJv
bEVudHJ5LmtleTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwg
c2hhZGVycyk7CisgICAgCisgICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNv
dXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdp
bmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICB9
CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMg
YWZ0ZXIgbGlua2luZy4KKyAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQo
cHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgewor
ICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOworICAgICAgICBhdXRv
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hh
ZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUp
CisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgICAgIG9yaWdp
bmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5z
ZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIGlmIChz
eW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0
eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1h
eSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAg
ICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRl
ciBwcm9ncmFtLgorCisgICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2libHlVbnVz
ZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGNhY2hlZCAhPSBtX3Bvc3Np
Ymx5VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC0+
dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK1N0cmluZyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNb
Ml0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAoc2l6ZV90
IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oU0hBREVS
X1NZTUJPTF9UWVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTaGFkZXJTb3VyY2VNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7Cisg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25zdCBTaGFk
ZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0YXRpY19j
YXN0PGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0
cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuYW1lOworfQorCitpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAg
ICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIC0xOworCisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUo
cHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAgTE9HKFdl
YkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0
ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIDo6Z2xH
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
CitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICgh
cHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ym9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGlt
aXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCisgICAgLy8gYSBwcm9i
bGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVy
cm9yLgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBO
T19FUlJPUi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAg
ICAgR0NHTGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciA9PSBO
T19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5h
ZGQoZXJyb3IpOworICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBtb3ZlZEFuRXJyb3I7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRFcnJvcigpCit7CisgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhl
dGljIGVycm9yIGxpc3QgaW4gY2FzZQorICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFscmVhZHkg
dGhlcmUsIHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCisgICAgICAgIC8vIGds
R2V0RXJyb3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3IgY29kZSBv
bmNlLgorICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICAgICAg
cmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOworICAgIH0KKworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElP
TjsKKworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4g
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
YnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CisKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAg
IHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIp
Cit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwor
CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30KKworR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30KKworR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJl
bmRlcmJ1ZmZlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFk
ZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJl
KFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0
IHdpZHRoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAg
QVNTRVJUKHByb2dyYW0pOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworCisgICAgR0NHTHNpemVpIGNvdW50ID0gMDsKKyAgICBQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIs
ICZjb3VudCwgc2hhZGVycyk7CisKKyAgICBpZiAoY291bnQgPT0gMikKKyAgICAgICAgbV9saW5r
ZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0sIHNoYWRl
cnNbMV0pKTsKKworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQg
cGFyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NHTGZs
b2F0IHVuaXRzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBmIHZhbHVl
LCBHQ0dMYm9vbGVhbiBpbnZlcnQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFNjaXNz
b3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBz
dHJpbmcpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKworICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5
OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9zaGFkZXJTb3VyY2VNYXAu
c2V0KHNoYWRlciwgV1RGTW92ZShlbnRyeSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQg
bWFzaykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBH
Q0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbEZ1
bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsTWFz
ayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0g
ZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsT3BTZXBh
cmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4UGFy
YW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUsIGFycmF5
LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0y
Zihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFy
cmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0yZnYo
bG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZihsb2NhdGlv
biwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkK
K3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0
aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAs
IEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm00
Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5p
Zm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGludCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIGFycmF5
LmJ1ZlNpemUsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zaShsb2Nh
dGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkp
Cit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNpdihsb2Nh
dGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwg
R0NHTGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRpKGxvY2F0
aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJy
YXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRpdihs
b2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sK
KyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
YXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybU1h
dHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJyYXkuZGF0
YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAxNikpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRyYW5zcG9z
ZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVBy
b2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0p
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWYWxp
ZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRl
eEF0dHJpYjFmKGluZGV4LCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
LCAxPiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihp
bmRleCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IGFy
cmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0
cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgMz4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWlu
dCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4
QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6
ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0
YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
fQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0
ZXhBcnJheSgpCit7CisgICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0ZXhBcnJh
eU9FUygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhB
cnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQoreworICAgIGdldEV4dGVuc2lvbnMoKS5kZWxl
dGVWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit7CisgICAg
cmV0dXJuIGdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmpl
Y3QgYXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJh
eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xl
bnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEJvb2xlYW52
KHBuYW1lLCB2YWx1ZS5kYXRhKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQor
eworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxH
Q0dMZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmRhdGEpOworfQor
CitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51
bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0NHTGludDY0IHZhbHVlID0g
MDsKKyAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmly
c3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5n
IHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAgIC8vIDo6Z2xHZXRJ
bnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50
NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUs
IEdDR0x1aW50IGluZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7CisgICAgLy8gRklYTUUgMTQxMTc4
OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5n
IGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNp
bmcgT3BlbkdMIEVTIDMuMC4KKyAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1lLCBpbmRl
eCwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEdDR0xp
bnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkK
KyAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRU
QUNITUVOVCwgZWl0aGVyIHdvcmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJl
dHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJv
Z3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBHQ0dMaW50
IHZhbHVlID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAmdmFsdWUp
OworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChBQ1RJVkVfQVRU
UklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOworICAgIGlmICgh
dmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX3No
YWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICAqdmFsdWUgPSByZXN1
bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0aXZlU2hh
ZGVyU3ltYm9sQ291bnRzKCkpOworICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9s
Q291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKS0+dmFs
dWU7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxkIGEgZmls
dGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcgb2YKKyAgICAvLyBvdXIgaW50ZXJuYWwgYXR0cmli
dXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUgT3BlbkdM
LgorICAgIEdDR0xpbnQgYXR0cmlidXRlQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYo
cHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7CisgICAgZm9yIChH
Q0dMaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICBBY3RpdmVJ
bmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwgaW5mbyk7
CisgICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0
ZUluZGV4TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gRG8gdGhlIHNhbWUgZm9y
IHVuaWZvcm1zLgorICAgIEdDR0xpbnQgdW5pZm9ybUNvdW50ID0gMDsKKyAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7CisgICAgZm9y
IChHQ0dMaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICAgICAgQWN0aXZl
SW5mbyBpbmZvOworICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpLCBpbmZv
KTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1
YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAqdmFsdWUgPSBz
eW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
c1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBMT0coV2Vi
R0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7CisK
KyAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAxMjM0NTY3
ODlhYmNkZWZBQkNERUZdKyIpOworCisgICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRMb2c7Cisg
ICAgCisgICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8gdGhlIHNo
YWRlciBzb3VyY2UgdGhhdAorICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBjb21waWxl
cnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKKyAgICAvLyB0aGlzIHdhcm5pbmcgdG8gdGhl
IHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAorICAgIC8vIGlzIGNh
dXNpbmcgaXQuCisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYW5nbGVX
YXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRlcjUnIGlz
IG5vdCBzdXBwb3J0ZWRcbiJfcyB9OworICAgIGludCBzdGFydEZyb20gPSBsb2cuc3RhcnRzV2l0
aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsKKyAgICBp
bnQgbWF0Y2hlZExlbmd0aCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGludCBzdGFydCA9IHJl
Z0V4cC5tYXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOworICAgICAgICBpZiAo
c3RhcnQgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwcm9jZXNzZWRMb2cu
YXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkpOworICAg
ICAgICBzdGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7CisKKyAgICAgICAgY29uc3Qg
U3RyaW5nJiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hlZExlbmd0
aCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3ltYm9sTmFt
ZShzaGFkZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7CisgICAgICAgIExPRyhXZWJHTCwgIkRl
bWFuZ2xpbmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBtYXBwZWRT
eW1ib2wudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobWFwcGVk
U3ltYm9sKTsKKyAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+KGxvZy5s
ZW5ndGgoKSkpOworCisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0
RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2ViR0wsICJVbm1h
bmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOworfQorCitTdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBHTGludCBs
ZW5ndGggPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVO
R1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5n
dGgpOworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBp
bmZvLmRhdGEoKSk7CisKKyAgICBHQ0dMc2l6ZWkgY291bnQ7CisgICAgUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQs
IHNoYWRlcnMpOworCisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgY291
bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xHZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVy
biB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
aShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgQVNTRVJU
KHNoYWRlcik7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisKKyAgICBjb25zdCBhdXRvJiByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgCisgICAgc3dpdGNoIChw
bmFtZSkgeworICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKKyAgICBjYXNlIFNIQURFUl9UWVBFOgor
ICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8
aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElO
Rk9fTE9HX0xFTkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5l
bmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0
aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAg
ICAgICB2YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VO
VU0pOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sK
KyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hh
ZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291
cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgY29uc3QgU2hh
ZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBpZiAoIWVudHJ5Lmlz
VmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBHTGludCBsZW5ndGggPSAw
OworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0
aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBH
THNpemVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKKyAgICA6
OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsK
KworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07CisgICAg
cmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgp
LCBzaXplKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
U291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOwor
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFk
ZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsgCisKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3VyY2U7Cit9
CisKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEdDR0xmbG9hdCB2YWx1ZSA9
IDAuZjsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Cisg
ICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
R0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1l
LCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9ybWZ2KHBy
b2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldFVuaWZvcm1pdihwcm9n
cmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHBy
b2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiAtMTsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9s
TmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7CisgICAgTE9H
KFdlYkdMLCAiOjpnZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUu
dXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gOjpn
bEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwor
fQorCitHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJp
Yk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHZvaWQqIHBvaW50
ZXIgPSAwOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZw
b2ludGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lk
PiBwaXhlbHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9P
RVMpCisgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgorCisgICAgaWYg
KG1fdXNpbmdDb3JlUHJvZmlsZSkgIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0
IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNv
cmUgcHJvZmlsZSwgc28gd2UgbmVlZAorICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBhcyB3ZSBk
byBpbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgorICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEFMUEhBOgorICAgICAgICAgICAgLy8gV2UgYXJl
IHVzaW5nIEdMX1JFRCB0byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCisg
ICAgICAgICAgICBmb3JtYXQgPSBSRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkcgdG8g
YmFjayBHTF9MVU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAgICAgICAg
ICAgIGZvcm1hdCA9IFJHOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiB3ZSB3
aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRo
IGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KKyAgICA6
OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdl
U2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKworUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdWludCBvID0gMDsK
KyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBH
THVpbnQgbyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVy
biBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKK30KKworUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IEdMdWludCBvID0gMDsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJl
dHVybiBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlw
ZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NI
QURFUik7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVRleHR1cmUoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8p
OworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7CisgICAgcmV0dXJuIG87Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3VuZERyYXdG
Qk8pIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcg
dG8gYmUgdXNlZCBmb3IgZHJhd2luZworICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdl
dHMgZGVsZXRlZC4KKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKKyAg
ICB9CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dy
YW0pOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVy
YnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5
VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7
CisgICAgfSk7CisgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgbV9zdGF0
ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit7Cisg
ICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVy
cm9yIGxpc3QgdG8KKyAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBzbyBhIGNh
bGxlciB0byBnZXRFcnJvciB3aWxsIGdldAorICAgIC8vIGFueSBlcnJvcnMgZnJvbSBnbEVycm9y
IGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemluZy4KKyAgICBtb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0KCkKK3sK
KyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAg
ICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVjeWNsZUNvbnRleHQoKQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29w
eVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRleHQoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3Io
bV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZp
Y2F0aW9uKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRE
aXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKK3sKKyAg
ICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBj
b3VudCwgcHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwg
R0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNp
emVpIHByaW1jb3VudCkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKKyAgICBjaGVj
a0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQoreworICAgIGdl
dEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwor
fQorCisjaWYgSEFWRShPUEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRleCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4KGluZGV4KTsKK30KKyNlbmRpZgorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29uc3Qgdm9p
ZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVu
Z3RoKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShkYXRh
KTsKKyAgICBVTlVTRURfUEFSQU0odXNhZ2UpOworICAgIFVOVVNFRF9QQVJBTShzcmNPZmZzZXQp
OworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RCeXRl
T2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50
IGxlbmd0aCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0o
ZHN0Qnl0ZU9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY0RhdGEpOworICAgIFVOVVNFRF9Q
QVJBTShzcmNPZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCisjaWYgSEFW
RShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdy
aXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQs
IEdDR0xzaXplaXB0ciBzaXplKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3
cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOworfQorI2Vsc2UKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtLCBH
Q0dMZW51bSwgR0NHTGludHB0ciwgR0NHTGludHB0ciwgR0NHTHNpemVpcHRyKQoreworfQorI2Vu
ZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEp
Cit7CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgR0NHTHZvaWQqIHB0ciA9
IDo6Z2xNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBHcmFwaGlj
c0NvbnRleHRHTDo6TUFQX1JFQURfQklUKTsKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJu
OworICAgIG1lbWNweShkYXRhLmRhdGEsIHB0ciwgZGF0YS5idWZTaXplKTsKKyAgICBpZiAoITo6
Z2xVbm1hcEJ1ZmZlcih0YXJnZXQpKQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZGF0
YSk7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BF
UkFUSU9OKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
aXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gx
LCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRz
dFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQor
eworICAgIFVOVVNFRF9QQVJBTShzcmNYMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kwKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3JjWDEpOworICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7CisgICAgVU5V
U0VEX1BBUkFNKGRzdFgwKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTApOworICAgIFVOVVNFRF9Q
QVJBTShkc3RYMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAgICBVTlVTRURfUEFSQU0o
bWFzayk7CisgICAgVU5VU0VEX1BBUkFNKGZpbHRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IGxheWVyKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNF
RF9QQVJBTShhdHRhY2htZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dHVyZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBHQ0dMaW50
IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVTRURfUEFS
QU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3JjKTsKK30KKworI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
U3BhbjxHQ0dMaW50PiBkYXRhKQoreworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEludGVybmFs
Zm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGRhdGEuYnVmU2l6ZSwgZGF0
YS5kYXRhKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BB
UkFNKGludGVybmFsZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNF
RF9QQVJBTShidWZTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKKyNlbmRpZgorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhT
dG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xUZXhT
dG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IDo6Z2xUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisjZWxzZQordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xlbnVt
LCBHQ0dMU3BhbjxHQ0dMaW50PikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdD
R0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBH
Q0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwor
ICAgIFVOVVNFRF9QQVJBTSh4b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeW9mZnNldCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHpvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVT
RURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0o
aGVpZ2h0KTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhZ0Rh
dGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKG5hbWUpOwor
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCit7CisgICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odjApOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBH
Q0dMdWludCB2MSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NH
THVpbnQgdjEsIEdDR0x1aW50IHYyKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Cisg
ICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAgICBVTlVTRURfUEFSQU0odjEpOworICAgIFVOVVNFRF9Q
QVJBTSh2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2Miwg
R0NHTHVpbnQgdjMpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURf
UEFSQU0odjApOworICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5VU0VEX1BBUkFNKHYyKTsK
KyAgICBVTlVTRURfUEFSQU0odjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShk
YXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7CisgICAgVU5V
U0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7
CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURf
UEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkK
K3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bv
c2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5V
U0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0
aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0
YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGluZGV4
LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit7CisgICAgVU5V
U0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFN
KHkpOworICAgIFVOVVNFRF9QQVJBTSh6KTsKKyAgICBVTlVTRURfUEFSQU0odyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFS
QU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWlu
dCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQoreworICAgIFVOVVNFRF9Q
QVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsK
KyAgICBVTlVTRURfUEFSQU0oeik7CisgICAgVU5VU0VEX1BBUkFNKHcpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBpbmRleCwg
R0NHTFNwYW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
aW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNl
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShzaXplKTsK
KyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0cmlkZSk7CisgICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWlu
dCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Cit7CisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAgIFVOVVNFRF9QQVJBTShzdGFydCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAgICBVTlVT
RURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVt
PiBidWZzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZzKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJh
d2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQoreworICAgIFVOVVNFRF9Q
QVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBVTlVTRURf
UEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJC
dWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNv
bnN0IEdDR0x1aW50PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisgICAg
VU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1
ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVl
cykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0oZHJhd2J1
ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdi
dWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQoreworICAgIFVOVVNFRF9Q
QVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBVTlVTRURf
UEFSQU0oZGVwdGgpOworICAgIFVOVVNFRF9QQVJBTShzdGVuY2lsKTsKK30KKworUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQoreworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeShQ
bGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQoreworICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Cit9CisK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeShHQ0dM
ZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQoreworICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisKKyAgICByZXR1
cm4gMDsKK30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2Jq
ZWN0dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgVU5V
U0VEX1BBUkFNKHF1ZXJ5KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIHJldHVybiAw
OworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
YW1wbGVyKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit7CisgICAgVU5V
U0VEX1BBUkFNKHNhbXBsZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURf
UEFSQU0oc2FtcGxlcik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odW5pdCk7CisgICAgVU5VU0VEX1BBUkFN
KHNhbXBsZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFy
YW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50
IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0o
cG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwg
R0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Ft
cGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYW0p
OworfQorCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgcmV0
dXJuIDAuZjsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxl
clBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKKwor
eworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwor
ICAgIHJldHVybiAwOworfQorCitHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVu
Y2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQoreworICAgIFVO
VVNFRF9QQVJBTShjb25kaXRpb24pOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3lu
YyhHQ0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyhH
Q0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKK30KKworR0NHTGVudW0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdD
R0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIFVOVVNFRF9QQVJB
TShzeW5jKTsKKyAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJBTSh0aW1l
b3V0KTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbnQ2NCB0
aW1lb3V0KQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFSQU0oZmxh
Z3MpOworICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsKK30KKworR0NHTGludCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAg
cmV0dXJuIDA7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1H
TE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaWQpOworfQorCitHQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2Jq
ZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTShpZCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgaWQpCit7CisgICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2Rl
KQoreworICAgIFVOVVNFRF9QQVJBTShwcmltaXRpdmVNb2RlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQoreworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51
bSBidWZmZXJNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURf
UEFSQU0odmFyeWluZ3MpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXJNb2RlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKQorewor
ICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCkK
K3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVl
ZGJhY2soKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVy
QmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oaW5k
ZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRl
eCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlw
dHIgc2l6ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0o
aW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShvZmZz
ZXQpOworICAgIFVOVVNFRF9QQVJBTShzaXplKTsKK30KKworVmVjdG9yPEdDR0x1aW50PiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQoreworICAgIFVOVVNF
RF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybU5hbWVzKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0
b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCit7CisgICAgVmVj
dG9yPEdDR0xpbnQ+IHJlc3VsdCh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOworI2lmIEhBVkUo
T1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCisgICAgQVNTRVJUKHByb2dyYW0pOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAg
ICA6OmdsR2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCks
IHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHJlc3VsdC5kYXRhKCkpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyNlbmRp
ZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0dDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7
CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja05hbWUpOworICAgIHJldHVybiAwOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1C
bG9ja0luZGV4KTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tC
aW5kaW5nKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0o
dW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tCaW5kaW5n
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0
aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGZvcm1hdCk7
CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihH
Q0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3Jh
bSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICBVTlVTRURfUEFS
QU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSAsIEdDR0xp
bnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNp
emVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50
LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NH
TGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dM
aW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBH
Q0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwg
R0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVu
dW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50
LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NH
TGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwg
R0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVu
dW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0s
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NH
TFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTGlu
dHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQoreworICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNl
ZEFOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3Qg
R0NHTHNpemVpPiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQoreworICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzQU5H
TEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiwgR0NHTHNpemVpKQoreworICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0s
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
aW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQoreworICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKK3sKKyAgICBB
U1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIgfHwgdW5w
YWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOworICAgIFVuaXF1ZUFy
cmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CisgICAgdW5zaWduZWQgc2l6ZSA9IDA7CisgICAgaWYg
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CisgICAgICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFy
YW1zOworICAgICAgICBwYXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50OworICAgICAg
ICBHQ0dMZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwg
d2lkdGgsIGhlaWdodCwgMSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAg
ICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+
KHNpemUpOworICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7
CisgICAgfQorICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4oemVyby5nZXQo
KSwgc2l6ZSkpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTEwMyw2ICszMTc3
LDYgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW4KICAgICByZXR1cm4gcmVhZENvbXBvc2l0ZWRS
ZXN1bHRzKCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30KIAotI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDZjODFlYTdhODg5NTQwZDUzZTA2NWQ0
NTM0YjQ2OTU2ZjIwY2ZhMWYuLmJhOWQ1YWY5MGQ3NDg1YTc2NDM1NjkyZGI1NjBhYmJlOWQ4MTUw
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC0yNSw1MyArMjUsMTcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoV0VCR0wpCisjaWYgRU5BQkxFKFdFQkdM
KSAmJiAhVVNFKEFOR0xFKQogCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKKyNpbmNs
dWRlICJFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKICNpbmNsdWRlIDxt
ZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCIKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNlbmRp
ZgotCi0jaWYgVVNFKENBKQotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgotI2VuZGlmCi0K
LSNpZiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiQU5HTEVVdGlsaXRpZXMuaCIKLSNlbHNlCi0jaW5j
bHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xD
b21tb24uaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIlNjb3BlZEhp
Z2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QuaCIKLSNlbmRpZgotCi0vLyBGSVhNRTogRmluZCBhIGJl
dHRlciB3YXkgdG8gYXZvaWQgdGhlIG5hbWUgY29uZmxpY3Rpb24gZm9yIE5PX0VSUk9SLgotI2lm
IFBMQVRGT1JNKFdJTikKLSN1bmRlZiBOT19FUlJPUgotI2VsaWYgUExBVEZPUk0oR1RLKQotLy8g
VGhpcyBkZWZpbmUgaXMgZnJvbSB0aGUgWDExIGhlYWRlcnMsIGJ1dCBpdCdzIHVzZWQgYmVsb3cs
IHNvIHdlIG11c3QgdW5kZWZpbmUgaXQuCi0jdW5kZWYgVkVSU0lPTgotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLU9CSkNfQ0xBU1MgV2ViR0xMYXll
cjsKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTsK
LX0KLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQogI2lmIFVTRShOSUNPU0lBKQogbmFtZXNw
YWNlIE5pY29zaWEgewogY2xhc3MgR0NHTExheWVyOwpAQCAtODAsOSArNDQsNyBAQCBjbGFzcyBH
Q0dMTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV4dGVuc2lvbnNHTDsKLSNp
ZiBVU0UoQU5HTEUpCi1jbGFzcyBFeHRlbnNpb25zR0xBTkdMRTsKLSNlbGlmIFVTRShPUEVOR0xf
RVMpCisjaWYgVVNFKE9QRU5HTF9FUykKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVTOwogI2Vs
aWYgVVNFKE9QRU5HTCkKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTDsKQEAgLTk3LDI4ICs1OSwx
MSBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAKIHR5cGVkZWYgSGFz
aE1hcDxDU3RyaW5nLCB1aW50NjRfdD4gU2hhZGVyTmFtZUhhc2g7CiAKKy8vIEJhc2UgY2xhc3Mg
Zm9yIEdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIE9wZW5HTCBvciBPcGVuR0wg
RVMuCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCA6IHB1Ymxp
YyBHcmFwaGljc0NvbnRleHRHTAogewogcHVibGljOgogICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKCk7Ci0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IG92ZXJyaWRlOwotI2lmIFVTRShBTkdMRSkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
RGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdDsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Q7Ci0gICAgR0NHTGVudW0gZHJhd2lu
Z0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICBzdGF0aWMgR0NHTGVudW0gZHJhd2luZ0J1ZmZl
clRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1Rhcmdl
dCk7Ci0gICAgc3RhdGljIEdDR0xpbnQgRUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRGb3JE
cmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOwotICAgIGVudW0gY2xhc3MgUmVs
ZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgewotICAgICAgICAvLyBSZWxlYXNlcyBjdXJyZW50
IGNvbnRleHQgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgY2FsbHMgZG9uZSBpbiB0aGUg
dGhyZWFkLgotICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCi0gICAgICAgIC8vIFJlbGVh
c2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNh
bGxzIGRvbmUgaW4gdGhlIHRocmVhZC4KLSAgICAgICAgUmVsZWFzZVRocmVhZFJlc291cmNlcywK
LSAgICAgICAgLy8gUmVsZWFzZXMgYWxsIGdsb2JhbCBzdGF0ZS4gU2hvdWxkIGJlIHVzZWQgb25s
eSBhZnRlciBhbGwgZGVwZW5kaW5nIG9iamVjdHMgaGF2ZQotICAgICAgICAvLyBiZWVuIHJlbGVh
c2VkLgotICAgICAgICBUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzCi0gICAgfTsK
LSAgICBzdGF0aWMgYm9vbCByZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNv
dXJjZUJlaGF2aW9yKTsKLSNlbmRpZgogCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBi
bGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBwcmVwYXJl
VGV4dHVyZSgpOwpAQCAtMTMyLDE1ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBFcXVpdmFsZW50
IHRvIDo6Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBwaXhlbHM9PTAgd2l0aCBubyBhbGxvY2F0aW9u
LgogICAgIHZvaWQgdGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscyk7CiAKLSNpZiAhVVNFKEFOR0xFKQotICAgIC8vIEhlbHBlciB0byB0
ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAw
LgotICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgotICAg
IC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQgc2V0dGlu
Zy4KICAgICBib29sIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50IGFsaWdubWVudCA9IDQpOwotI2VuZGlmCiAKICAgICBib29sIGlzR0xFUzJD
b21wbGlhbnQoKSBjb25zdCBmaW5hbDsKLQogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEVu
dHJ5IHBvaW50cyBmb3IgV2ViR0wuCiAgICAgLy8KQEAgLTIwNiw5ICsxNDUsNyBAQCBwdWJsaWM6
CiAgICAgR0NHTGludDY0IGdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkgZmluYWw7CiAgICAg
R0NHTGludDY0IGdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4KSBm
aW5hbDsKICAgICBHQ0dMaW50IGdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
R0NHTGVudW0gcG5hbWUpIGZpbmFsOwotI2lmICFVU0UoQU5HTEUpCiAgICAgdm9pZCBnZXROb25C
dWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51
bSBwbmFtZSwgR0NHTGludCogdmFsdWUpOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAgICAgU3Ry
aW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwogICAgIFN0cmlu
ZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3RbMl0sIEdDR0xzaXplaSwgY29u
c3QgU3RyaW5nJik7CiAgICAgR0NHTGludCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwpAQCAtMjg2LDEwICsyMjMsOCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CiAg
ICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7Ci0jaWYgIVVT
RShBTkdMRSkKICAgICBib29sIGNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xPYmplY3Qg
dmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdDsKICAg
ICBib29sIHByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxh
dGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7Ci0jZW5kaWYKIAogICAgIHZvaWQg
dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4KSBmaW5hbDsKICAgICB2
b2lkIHZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0LCAxPiB2YWx1ZXMpIGZpbmFsOwpAQCAtMzE3LDEwICsyNTIsOCBAQCBwdWJsaWM6CiAKICAg
ICAvLyA9PT09PT09PT09IFdlYkdMMiBlbnRyeSBwb2ludHMuCiAKLSNpZiAhVVNFKEFOR0xFKQog
ICAgIHZvaWQgYnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNvbnN0IHZvaWQqIGRhdGEsIEdD
R0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxlbmd0aCk7CiAgICAg
dm9pZCBidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RCeXRlT2Zm
c2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxl
bmd0aCk7Ci0jZW5kaWYKICAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRU
YXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xp
bnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKSBmaW5hbDsKIAogICAgIHZvaWQg
Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dM
U3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CkBAIC00NDUsOSArMzc4LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImKSBmaW5h
bDsKICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b1BpeGVsQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9D
YW52YXMoSW1hZ2VCdWZmZXImKSBmaW5hbDsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAg
IFJlZlB0cjxNZWRpYVNhbXBsZT4gcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUo
KSBmaW5hbDsKLSNlbmRpZgogCiAgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFJl
bmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwogICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CkBAIC00NTYsOSArMzg2LDYg
QEAgcHVibGljOgogICAgIHZvaWQgcHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50KTsKICNl
bmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1
cmVkKCk7Ci0jZW5kaWYKIAogICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmlu
YWw7CiAKQEAgLTQ4NCwxMiArNDExLDggQEAgcHVibGljOgogICAgIC8vIGFsbCBtZXRob2RzIGl0
IGNvbnRhaW5zIG1heSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0ZWQgb24gdGhlCiAgICAgLy8gY3Vy
cmVudCBoYXJkd2FyZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnNHTDo6c3VwcG9ydHMoKSB0bwogICAg
IC8vIGRldGVybWluZSB0aGlzLgotI2lmICFVU0UoQU5HTEUpCiAgICAgLy8gVXNlIGNvdmFyaWFu
dCByZXR1cm4gdHlwZSBmb3IgT1BFTkdML09QRU5HTF9FUwogICAgIEV4dGVuc2lvbnNHTE9wZW5H
TENvbW1vbiYgZ2V0RXh0ZW5zaW9ucygpIGZpbmFsOwotI2Vsc2UKLSAgICBFeHRlbnNpb25zR0wm
IGdldEV4dGVuc2lvbnMoKSBmaW5hbDsKLSNlbmRpZgogCiAgICAgdm9pZCBzaW11bGF0ZUV2ZW50
Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcpIG92ZXJyaWRlOwogCkBAIC00OTcs
MzEgKzQyMCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgb3Zl
cnJpZGU7CiAKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0gICAgR3Jh
cGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBzdGF0aWMgdm9p
ZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVs
QnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwot
Ci0jaWYgVVNFKEFOR0xFKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5
cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQTEFZOwotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgbG93UG93ZXJE
aXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5cGUsIC0xKTsKLSAgICBjb25zdGV4
cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQZXJmb3JtYW5jZURpc3BsYXkgPSBF
R0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwotI2VuZGlmCi0jZW5kaWYKLQogcHJv
dGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47Ci0gICAgRUdMRGlzcGxheSBtX2Rpc3BsYXlPYmog
eyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmog
eyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBtX2NvbmZp
Z09iaiB7IG51bGxwdHIgfTsKLSNlbmRpZgorCiAgICAgR0NHTHVpbnQgbV90ZXh0dXJlIHsgMCB9
OwogCi1wcml2YXRlOgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5
IHBvaW50cyB0aGF0IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgLy8gQ2FsbGVkIG9uY2Ug
YnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIG9mIEV4dGVuc2lvbnNHTCB0aGF0IGV2ZW50
dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBXQVJOX1VO
VVNFRF9SRVRVUk47CkBAIC01NDcsMjQgKzQ1MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNv
bHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsK
ICAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1aW50IGlu
dGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCi0jaWYg
VVNFKEFOR0xFKQotICAgIGJvb2wgcmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCk7Ci0jZW5k
aWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIGFsbG9jYXRlQW5kQmluZERpc3BsYXlC
dWZmZXJCYWNraW5nKCk7Ci0gICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7Ci0gICAgc3RhdGlj
IGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXksIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0wpOwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEU7Ci0jZW5kaWYKLSNpZiBVU0UoQU5HTEUpCi0gICAgLy8gUmV0dXJucyBmYWxzZSBp
ZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgotICAgIGJvb2wgd2FpdEFu
ZFVwZGF0ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgLy8gUGxhdGZv
cm0gc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKLSAgICBzdGF0aWMg
dm9pZCBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKLSNlbmRpZgogCi0jaWYgIVVT
RShBTkdMRSkKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBVbmlxdWVSZWY8c2g6OlNoYWRl
clZhcmlhYmxlPj4gU2hhZGVyU3ltYm9sTWFwOwogCiAgICAgc3RydWN0IFNoYWRlclNvdXJjZUVu
dHJ5IHsKQEAgLTYzMSwxMiArNTE3LDggQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPFN0
cmluZz4gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFNoYWRlck5hbWVIYXNoPiBuYW1lSGFzaE1hcEZvclNoYWRlcnM7Ci0j
ZW5kaWYgLy8gIVVTRShBTkdMRSkKIAotI2lmIFVTRShBTkdMRSkKLSAgICBmcmllbmQgY2xhc3Mg
RXh0ZW5zaW9uc0dMQU5HTEU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnNHTEFOR0xF
PiBtX2V4dGVuc2lvbnM7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVOR0xfRVMp
CiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVTOwogICAgIGZyaWVuZCBjbGFz
cyBFeHRlbnNpb25zR0xPcGVuR0xDb21tb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lv
bnNHTE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CkBAIC02NDgsOSArNTMwLDcgQEAgcHJpdmF0ZToK
IAogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+PiBtX3ZlcnRleEFycmF5OwogCi0jaWYgIVVTRShB
TkdMRSkKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOwotI2VuZGlmCiAKICAgICBH
Q0dMdWludCBtX2ZibyB7IDAgfTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBAIC02
NTgsNTQgKzUzOCwxNCBAQCBwcml2YXRlOgogICAgIEdDR0x1aW50IG1faW50ZXJtZWRpYXRlVGV4
dHVyZSB7IDAgfTsKICNlbmRpZgogCi0jaWYgIVVTRShBTkdMRSkgJiYgVVNFKE9QRU5HTF9FUykK
KyNpZiBVU0UoT1BFTkdMX0VTKQogICAgIEdDR0x1aW50IG1fZGVwdGhCdWZmZXIgeyAwIH07CiAg
ICAgR0NHTHVpbnQgbV9zdGVuY2lsQnVmZmVyIHsgMCB9OwogI2VuZGlmCiAgICAgR0NHTHVpbnQg
bV9kZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CiAKICAgICBHQ0dMdWludCBtX2ludGVybmFsQ29s
b3JGb3JtYXQgeyAwIH07Ci0jaWYgVVNFKEFOR0xFKQotICAgIEdDR0x1aW50IG1faW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQgeyAwIH07Ci0jZW5kaWYKLSAgICBzdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZSB7Ci0gICAgICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKLSAgICAg
ICAgR0NHTHVpbnQgYm91bmREcmF3RkJPIHsgMCB9OwotICAgICAgICBHQ0dMZW51bSBhY3RpdmVU
ZXh0dXJlVW5pdCB7IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCB9OwotCi0gICAgICAgIHVz
aW5nIEJvdW5kVGV4dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCi0gICAgICAgICAgICBzdGQ6
OnBhaXI8R0NHTHVpbnQsIEdDR0xlbnVtPiwKLSAgICAgICAgICAgIEludEhhc2g8R0NHTGVudW0+
LAotICAgICAgICAgICAgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWlu
dD4sCi0gICAgICAgICAgICBQYWlySGFzaFRyYWl0czxXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxH
Q0dMdWludD4+Ci0gICAgICAgID47Ci0gICAgICAgIEJvdW5kVGV4dHVyZU1hcCBib3VuZFRleHR1
cmVNYXA7Ci0gICAgICAgIEdDR0x1aW50IGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJl
dHVybiBib3VuZFRleHR1cmUoYWN0aXZlVGV4dHVyZVVuaXQpOyB9Ci0gICAgICAgIEdDR0x1aW50
IGJvdW5kVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1cmVVbml0
KTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5kKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9Ci0g
ICAgICAgIEdDR0xlbnVtIGJvdW5kVGFyZ2V0KEdDR0xlbnVtIHRleHR1cmVVbml0KSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZp
bmQodGV4dHVyZVVuaXQpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4dHVy
ZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLnNlY29u
ZDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRC
b3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQsIEdDR0x1aW50IHRleHR1cmUsIEdDR0xl
bnVtIHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgYm91bmRUZXh0dXJlTWFwLnNldCh0
ZXh0dXJlVW5pdCwgc3RkOjptYWtlX3BhaXIodGV4dHVyZSwgdGFyZ2V0KSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVp
bnQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PEdDR0x1aW50Pj47Ci0gICAgICAgIFRleHR1cmVTZWVkQ291bnQgdGV4dHVyZVNlZWRDb3VudDsK
LSAgICB9OwogCiAgICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBtX3N0YXRlOwogCkBAIC03MTQs
MTYgKzU1NCw2IEBAIHByaXZhdGU6CiAgICAgR0NHTHVpbnQgbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlciB7IDAgfTsKICAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIg
eyAwIH07CiAKLSNpZiBVU0UoQU5HTEUpCi0gICAgLy8gRm9yIHByZXNlcnZlRHJhd2luZ0J1ZmZl
cjp0cnVlIHdpdGhvdXQgbXVsdGlzYW1wbGluZy4KLSAgICBHQ0dMdWludCBtX3ByZXNlcnZlRHJh
d2luZ0J1ZmZlclRleHR1cmUgeyAwIH07Ci0gICAgLy8gQXR0YWNoZXMgbV90ZXh0dXJlIHdoZW4g
bV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIGlzIG5vbi16ZXJvLgotICAgIEdDR0x1aW50
IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPIHsgMCB9OwotICAgIC8vIFF1ZXJpZWQgYXQgZGlz
cGxheSBzdGFydHVwLgotICAgIEVHTGludCBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0IHsg
LTEgfTsKLQotI2VuZGlmCi0KICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVy
cm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0NHTGVudW0+IG1fc3ludGhldGljRXJyb3JzOwogCkBA
IC03NDQsMjkgKzU3NCw4IEBAIHByaXZhdGU6CiAjaWYgVVNFKENBSVJPKQogICAgIFBsYXRmb3Jt
R0xPYmplY3QgbV92YW8geyAwIH07CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IC8vIEJhY2tpbmcgc3RvcmUgZm9yIHRoZSB0aGUgYnVmZmVyIHdoaWNoIGlzIGV2ZW50dWFsbHkg
dXNlZCBmb3IgZGlzcGxheS4KLSAgICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9PSBm
YWxzZSwgdGhpcyBpcyB0aGUgZHJhd2luZyBidWZmZXIgYmFja2luZyBzdG9yZS4KLSAgICAvLyBX
aGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9PSB0cnVlLCB0aGlzIGlzIGJsaXR0ZWQgdG8gZHVy
aW5nIGRpc3BsYXkgcHJlcGFyZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX2Rp
c3BsYXlCdWZmZXJCYWNraW5nOwotICAgIHZvaWQqIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIgeyBu
dWxscHRyIH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgYm9vbCBtX3N3aXRjaGVz
R1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uIHsgZmFsc2UgfTsKLSAgICBTY29wZWRIaWdoUGVy
Zm9ybWFuY2VHUFVSZXF1ZXN0IG1faGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdDsKLSNlbmRpZgot
I2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFPiBtX2N2OwotI2VuZGlmCi0jaWYgVVNFKEFOR0xF
KQotICAgIGJvb2wgbV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxpbWl0ID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4UGVuZGluZ0ZyYW1lcyA9IDM7Ci0gICAgc2l6
ZV90IG1fb2xkZXN0RnJhbWVDb21wbGV0aW9uRmVuY2UgeyAwIH07Ci0gICAgU2NvcGVkR0xGZW5j
ZSBtX2ZyYW1lQ29tcGxldGlvbkZlbmNlc1ttYXhQZW5kaW5nRnJhbWVzXTsKLSNlbmRpZgogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
bW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3MzBkNmQzNjdmMWY5NTQ0NWIwYTc5YzE3NGRhODhhM2VlNTFjYjljLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyODg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
Q2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAx
MiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCi0KLSNpZiBFTkFCTEUoV0VC
R0wpICYmICFVU0UoQU5HTEUpCi0KLSNpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIkV4dGVu
c2lvbnNHTE9wZW5HTEVTLmgiCi0jZWxzZQotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5o
IgotI2VuZGlmCi0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgot
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVk
ZSA8d3RmL0hleE51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpZiBVU0UoTElCRVBPWFkpCi0j
aW5jbHVkZSAiRXBveHlTaGltcy5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJP
cGVuR0xFU1NoaW1zLmgiCi0jZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKLSNp
bmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlcigpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwot
ICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWROYW1lSGFz
aDsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10gewotICAgICAgICBzaGFyZWROYW1l
SGFzaCA9IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OwotICAgIH0pOwotCi0g
ICAgcmV0dXJuICpzaGFyZWROYW1lSGFzaDsKLX0KLQotc3RhdGljIHZvaWQgc2V0Q3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkKLXsKLSAg
ICAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFzaDsKLX0K
LQotLy8gSGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2NvbXBpbGVy
IHRvIGRvCi0vLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBt
ZXRob2QsIGJlZm9yZQotLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXIKLS8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0aGUgY3Vy
cmVudCBpbnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KLQotc3RhdGljIHVpbnQ2
NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5ndGgpCi17
Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ1N0cmluZyBuYW1l
QXNDU3RyaW5nID0gQ1N0cmluZyhuYW1lKTsKLQotICAgIC8vIExvb2sgdXAgbmFtZSBpbiBvdXIg
bG9jYWwgbWFwLgotICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyID0gKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOwotICAgIFNoYWRlck5hbWVI
YXNoOjppdGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5m
aW5kKG5hbWVBc0NTdHJpbmcpOwotICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlci0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZTsK
LQotICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOwotCi0gICAg
Ly8gQ29udmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8gYSA2NC1i
aXQgcmVzdWx0Ci0gICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUgb2Ygb3Vy
IHRhYmxlLiBPdmVyZmxvdyB3b3VsZAotICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlmIHdlJ3Jl
IGFscmVhZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCi0gICAgLy8gd2UncmUgaG9w
aW5nIHRoYXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKLSAgICAvLyBkb24n
dCBoYXZlIHRoYXQgbWFueSBzeW1ib2xzKS4KLQotICAgIHVpbnQ2NF90IHJlc3VsdCA9IGhhc2hW
YWx1ZTsKLSAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXItPnNpemUoKSArIDEpOwotCi0gICAgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVy
LT5zZXQobmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBj
aGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCi17Ci0gICAgYXV0byBhdHRycyA9IGNv
bnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIGV4dGVu
c2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAgICAg
ICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkg
ewotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNp
bEV4dGVuc2lvbik7Ci0gICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRy
dWUuCi0gICAgICAgICAgICBhdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgICAgICBzZXRDb250ZXh0QXR0cmli
dXRlcyhhdHRycyk7Ci0gICAgfQotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1faXNGb3JX
ZWJHTDIpIHsKLSAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7Ci0gICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBm
YWxzZTsKLSAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLQotI2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgVGVt
cG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFM
U0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwg
R0xfRkFMU0UpOwotI2VuZGlmCi0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxp
YXMpCi0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLQotI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2NvbXBv
c2l0b3JUZXh0dXJlKTsKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVkaWF0ZVRl
eHR1cmUpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsK
LSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0gICAg
Z2xGbHVzaCgpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCi0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgZWxzZQotICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAg
IHJldHVybjsKLSNlbmRpZgotCi0gICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwot
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3N0YXRlLmJvdW5kVGFyZ2V0KEdM
X1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUoR0xfVEVY
VFVSRTApIDogMCk7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJl
VW5pdCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmRE
cmF3RkJPKTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCi0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBt
X3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVz
dWx0cygpCi17Ci0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlmIChjb250
ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGlu
Z0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG11c3RSZXN0b3JlRkJPID0g
dHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8g
PT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdG
Qk8gIT0gbV9mYm8pIHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX2Zibyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXV0byByZXN1bHQgPSByZWFkUGl4
ZWxzRm9yUGFpbnRSZXN1bHRzKCk7Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9z
dGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAg
IGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0g
MCk7Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7Ci0gICAg
bV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0K
LSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNU
LCBHTF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xf
RElUSEVSLCBHTF9GQUxTRSk7Ci0gICAgCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHJlc2hh
cGVGQk9zKEludFNpemUod2lkdGgsIGhlaWdodCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSByZW5k
ZXJidWZmZXJzIHRvIDAuCi0gICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7MCwgMCwgMCwgMH0s
IGNsZWFyRGVwdGggPSAwOwotICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7Ci0gICAgR0xib29s
ZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBk
ZXB0aE1hc2sgPSBHTF9UUlVFOwotICAgIEdMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmYs
IHN0ZW5jaWxNYXNrQmFjayA9IDB4ZmZmZmZmZmY7Ci0gICAgR0xiaXRmaWVsZCBjbGVhck1hc2sg
PSBHTF9DT0xPUl9CVUZGRVJfQklUOwotICAgIDo6Z2xHZXRGbG9hdHYoR0xfQ09MT1JfQ0xFQVJf
VkFMVUUsIGNsZWFyQ29sb3IpOwotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAg
IDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Ci0gICAgOjpn
bENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKLQotICAgIGF1
dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJzLmRlcHRoKSB7
Ci0gICAgICAgIDo6Z2xHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRo
KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7Ci0gICAg
ICAgIDo6Z2xHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOwotICAg
ICAgICA6OmdsRGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQ
VEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAg
OjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOwot
ICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKDApOwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xf
U1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2sp
KTsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1BU0ssIHJl
aW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7Ci0gICAgICAgIDo6Z2xT
dGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKLSAgICAgICAgOjpnbFN0
ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgMHhmZmZmZmZmZik7Ci0gICAgICAgIGNsZWFyTWFz
ayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgfQotCi0gICAgOjpnbENsZWFyKGNsZWFy
TWFzayk7Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFd
LCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKLSAgICA6OmdsQ29sb3JNYXNrKGNvbG9y
TWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7Ci0gICAg
aWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7Ci0g
ICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwo
Y2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQs
IHN0ZW5jaWxNYXNrKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywg
c3RlbmNpbE1hc2tCYWNrKTsKLSAgICB9Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
LCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0KLSAgICBhdXRvIGVycm9yID0gOjpnbEdldEVycm9y
KCk7Ci0gICAgaWYgKGVycm9yICE9IEdMX05PX0VSUk9SKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
KFdlYkdMLCAiRmF0YWw6IE9wZW5HTCBlcnJvciBkdXJpbmcgR3JhcGhpY3NDb250ZXh0R0wgYnVm
ZmVyIGluaXRpYWxpemF0aW9uICglZCkuIiwgZXJyb3IpOwotICAgICAgICBmb3JjZUNvbnRleHRM
b3N0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICA6OmdsRmx1c2goKTsKLX0KLQot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmcoUGxhdGZv
cm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNo
YWRlcikpOwotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNo
YWRlcikpOwotICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAu
ZmluZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5
ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwotCi0gICAg
SGFzaE1hcDxTdHJpbmcsIHNoOjpTaGFkZXJWYXJpYWJsZT4gY29tYmluZWRWYXJ5aW5nczsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA6IHZlcnRleEVudHJ5LnZhcnlpbmdNYXAp
IHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBzeW1ib2xOYW1lID0gdmVydGV4U3ltYm9sLmtleTsK
LSAgICAgICAgLy8gVGhlIHZhcnlpbmcgbWFwIGluY2x1ZGVzIHZhcmlhYmxlcyBmb3IgZWFjaCBp
bmRleCBvZiBhbiBhcnJheSB2YXJpYWJsZS4KLSAgICAgICAgLy8gV2Ugb25seSB3YW50IGEgc2lu
Z2xlIHZhcmlhYmxlIHRvIHJlcHJlc2VudCB0aGUgYXJyYXkuCi0gICAgICAgIGlmIChzeW1ib2xO
YW1lLmVuZHNXaXRoKCJdIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBE
b24ndCBjb3VudCBidWlsdCBpbiB2YXJ5aW5ncy4KLSAgICAgICAgaWYgKHN5bWJvbE5hbWUgPT0g
ImdsX0ZyYWdDb29yZCIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciIHx8IHN5bWJv
bE5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgY29uc3QgYXV0byYgZnJhZ21lbnRTeW1ib2wgPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAu
ZmluZChzeW1ib2xOYW1lKTsKLSAgICAgICAgaWYgKGZyYWdtZW50U3ltYm9sICE9IGZyYWdtZW50
RW50cnkudmFyeWluZ01hcC5lbmQoKSkKLSAgICAgICAgICAgIGNvbWJpbmVkVmFyeWluZ3MuYWRk
KHN5bWJvbE5hbWUsIGZyYWdtZW50U3ltYm9sLT52YWx1ZSk7Ci0gICAgfQotCi0gICAgc2l6ZV90
IG51bVZhcnlpbmdzID0gY29tYmluZWRWYXJ5aW5ncy5zaXplKCk7Ci0gICAgaWYgKCFudW1WYXJ5
aW5ncykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzdGQ6OnZlY3RvcjxzaDo6U2hhZGVy
VmFyaWFibGU+IHZhcmlhYmxlczsKLSAgICB2YXJpYWJsZXMucmVzZXJ2ZShjb21iaW5lZFZhcnlp
bmdzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2YXJ5aW5nU3ltYm9sIDogY29tYmlu
ZWRWYXJ5aW5ncy52YWx1ZXMoKSkKLSAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2YXJ5aW5n
U3ltYm9sKTsKLQotICAgIEdDR0xpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSAwOwotI2lmIFVTRShP
UEVOR0xfRVMpCi0gICAgOjpnbEdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZtYXhW
YXJ5aW5nVmVjdG9ycyk7Ci0jZWxzZQotICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAgICAgICA6
OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdWZWN0b3Jz
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgR0NHTGludCBtYXhWYXJ5aW5nRmxvYXRzID0gMDsKLSAg
ICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgJm1heFZhcnlpbmdG
bG9hdHMpOwotICAgICAgICBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1heFZhcnlpbmdGbG9hdHMgLyA0
OwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBzaDo6Q2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNr
aW5nTGltaXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJpYWJsZXMpOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVjdCB2ZXJ0
ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOwotICAgIEFT
U0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOwotICAgIGNv
bnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0ZXhTaGFk
ZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwotCi0gICAgSGFzaE1hcDxTdHJpbmcs
IHNoOjpHTGVudW0+IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcDsKLQotICAgIGZvciAoY29uc3Qg
YXV0byYgZW50cnkgOiB2ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKSB7Ci0gICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKLSAg
ICAgICAgdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmFkZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0
cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSwgZW50cnkudmFsdWUuZ2V0KCkucHJlY2lzaW9uKTsK
LSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRyeS51bmlm
b3JtTWFwKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnku
dmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKLSAgICAgICAgY29uc3QgYXV0byYgdmVydGV4U3ltYm9s
ID0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmZpbmQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIo
KSwgbWFwcGVkTmFtZS5sZW5ndGgoKSkpOwotICAgICAgICBpZiAodmVydGV4U3ltYm9sICE9IHZl
cnRleFN5bWJvbFByZWNpc2lvbk1hcC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVlICE9IGVu
dHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVy
ZVVuaXQgPSB0ZXh0dXJlOwotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQocHJvZ3Jh
bSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVt
b3ZlKHByb2dyYW0pOwotICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkK
LXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xO
YW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwotICAgIExP
RyhXZWJHTCwgIjo6YmluZEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgOjpnbEJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwg
YnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0x1aW50IGZi
bzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSBidWZmZXI7Ci0gICAgZWxzZQotICAg
ICAgICBmYm8gPSAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxl
RkJPIDogbV9mYm8pOwotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIpOwotICAg
IEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0g
ICAgaWYgKGZibyAhPSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewotICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKHRhcmdldCwgZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8g
PSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IGZibzsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9y
bUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQs
IHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9z
dGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4dHVyZSwg
dGFyZ2V0KTsKLSAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NH
TGNsYW1wZiBncmVlbiwgR0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xC
bGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCbGVuZEVx
dWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhhKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NH
TGVudW0gZGZhY3RvcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfSAgICAg
ICAKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUoR0NH
TGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBHQ0dMZW51
bSBkc3RBbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0Fs
cGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZl
ckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2Up
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bh
bjxjb25zdCB2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVyRGF0YSh0YXJn
ZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRy
IG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJ1ZmZlclN1YkRh
dGEodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhKTsKLX0KLQotR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVu
dW0gdGFyZ2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLQotICAgIHJldHVybiA6OmdsQ2hlY2tGcmFtZWJ1
ZmZlclN0YXR1c0VYVCh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckNvbG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmIGIsIEdD
R0xjbGFtcGYgYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENsZWFy
KG1hc2spOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyU3RlbmNpbChHQ0dMaW50IHMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENsZWFyU3RlbmNpbChzKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFu
IHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29sZWFuIGFs
cGhhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFR1cm4gb24gbmFtZSBtYXBwaW5nLiBE
dWUgdG8gdGhlIHdheSBBTkdMRSBuYW1lIGhhc2hpbmcgd29ya3MsIHdlCi0gICAgLy8gcG9pbnQg
YSBnbG9iYWwgaGFzaG1hcCB0byB0aGUgbWFwIG93bmVkIGJ5IHRoaXMgY29udGV4dC4KLSAgICBT
aEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBtX2NvbXBpbGVyLmdldFJlc291cmNl
cygpOwotICAgIFNoSGFzaEZ1bmN0aW9uNjQgcHJldmlvdXNIYXNoRnVuY3Rpb24gPSBBTkdMRVJl
c291cmNlcy5IYXNoRnVuY3Rpb247Ci0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0g
bmFtZUhhc2hGb3JTaGFkZXI7Ci0KLSAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKLSAg
ICAgICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4o
KTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFk
ZXJzLmdldCgpKTsKLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7
Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9ucy0+Z2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7Ci0KLSAgICBBTkdMRVJlc291cmNl
cy5IYXNoRnVuY3Rpb24gPSBwcmV2aW91c0hhc2hGdW5jdGlvbjsKLSAgICBtX2NvbXBpbGVyLnNl
dFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyKG51bGxwdHIpOwotCi0gICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0
aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hh
ZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwotICAgIGNvbnN0IGNo
YXIqIHRyYW5zbGF0ZWRTaGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5kYXRhKCk7
Ci0gICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmlu
Zy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBvcmlnaW5hbCBzaGFkZXIg
c291cmNlIC0tLVxuJXNcbi0tLSBlbmQgb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIGdl
dFNoYWRlclNvdXJjZShzaGFkZXIpLnV0ZjgoKS5kYXRhKCkpOwotICAgIExPRyhXZWJHTCwgIi0t
LSBiZWdpbiB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCB0cmFuc2xh
dGVkIHNoYWRlciBzb3VyY2UgLS0tIiwgdHJhbnNsYXRlZFNoYWRlclB0cik7Ci0KLSAgICA6Omds
U2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVk
U2hhZGVyTGVuZ3RoKTsKLSAgICAKLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotICAg
IAotICAgIGludCBjb21waWxlU3RhdHVzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFk
ZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAgICBTaGFkZXJTb3VyY2VN
YXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAg
ICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAgLy8gUG9w
dWxhdGUgdGhlIHNoYWRlciBsb2cKLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6Z2xHZXRT
aGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAgICBpZiAo
bGVuZ3RoKSB7Ci0gICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgICAgIFZlY3RvcjxHTGNo
YXI+IGluZm8obGVuZ3RoKTsKLSAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBs
ZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICAgICAgUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICAgICAgZW50cnkubG9nID0gZ2V0VW5tYW5n
bGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLSAgICB9
Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyAhPSBHTF9UUlVFKSB7Ci0gICAgICAgIGVudHJ5Lmlz
VmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IHNoYWRlciB0cmFuc2xh
dG9yIHByb2R1Y2VkIGEgc2hhZGVyIHRoYXQgT3BlbkdMIHdvdWxkIG5vdCBjb21waWxlLiIpOwot
ICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRp
cmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNo
TWFwPFBsYXRmb3JtR0xPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0
ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2hhZGVyU291
cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKLQotICAgIGNvbnN0IENTdHJpbmcmIHNo
YWRlclNvdXJjZUNTdHJpbmcgPSBlbnRyeS5zb3VyY2UudXRmOCgpOwotICAgIGNvbnN0IGNoYXIq
IHNoYWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOwotICAgIGludCBz
aGFkZXJTb3VyY2VMZW5ndGggPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmxlbmd0aCgpOwotCi0gICAg
TE9HKFdlYkdMLCAiLS0tIGJlZ2luIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBl
bmQgZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4iLCBzaGFkZXJTb3VyY2VQdHIpOwotCi0gICAg
OjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZzaGFkZXJTb3Vy
Y2VMZW5ndGgpOwotCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLQotICAgIGludCBj
b21waWxlU3RhdHVzOwotCi0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFU
VVMsICZjb21waWxlU3RhdHVzKTsKLQotICAgIGlmIChjb21waWxlU3RhdHVzID09IEdMX1RSVUUp
IHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIExPRyhXZWJHTCwgIkRp
cmVjdCBjb21waWxhdGlvbiBvZiBzaGFkZXIgc3VjY2VlZGVkLiIpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGVudHJ5LmlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6
IGRpcmVjdCBjb21waWxhdGlvbiBvZiBzaGFkZXIgZmFpbGVkLiIpOwotICAgIH0KLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBU1NFUlQobV9zdGF0
ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewot
ICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJv
cmRlcik7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9
PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBU1NFUlQobV9zdGF0ZS5ib3Vu
ZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChhdHRycy5hbnRpYWxp
YXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAg
ICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhl
aWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0g
ICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRp
c2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEN1bGxGYWNlKG1v
ZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0NHTGVu
dW0gZnVuYykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRGVwdGhNYXNrKGZs
YWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBB
U1NFUlQocHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9s
Q291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwotICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJvZ3JhbSwg
c2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dM
ZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbERpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xz
aXplaSBjb3VudCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotICAgIGNo
ZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdF
bGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsK
LSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmFibGUoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xFbmFibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5k
ZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRmluaXNoKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRmx1c2goKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRnJhbWVidWZmZXJU
ZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
KTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5k
VGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbEZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xH
ZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwotICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmli
dXRlU2l6ZSk7Ci0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXplKTsgLy8g
R0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24u
Ci0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBH
TGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwg
bWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkp
OwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVS
X1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7
Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEo
KSwgbmFtZUxlbmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFj
dGl2ZSBhdHRyaWJ1dGUgJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5p
Zm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOwotI2Vu
ZGlmCi0KLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Ci0gICAgaW5mby50eXBlID0gdHlw
ZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBHQ0dMaW50
IHN5bWJvbENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5
bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xD
b3VudChwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX0FUVFJJQlVURVMsICZzeW1i
b2xDb3VudCk7Ci0gICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFw
LmZpbmQocHJvZ3JhbSk7Ci0gICAgfQotICAgIAotICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50
cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAgICBHQ0dMdWludCByYXdJbmRleCA9
IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAu
c2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXBb
aW5kZXhdIDogLTE7Ci0KLSAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBy
YXdJbmRleCwgaW5mbyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYo
cHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsK
LQotICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4VW5pZm9ybVNpemUpOyAvLyBHTF9BQ1RJVkVf
VU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCi0gICAgR0xzaXpl
aSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0gdHlwZSA9
IDA7Ci0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVuaWZvcm1T
aXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAgaWYgKCFu
YW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3RyaW5nIG9yaWdp
bmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVf
VU5JRk9STSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7Ci0gICAgCi0jaWZuZGVm
IE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7
Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSB1bmlmb3JtICVk
IGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5k
YXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotICAgIAotICAgIGlu
Zm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8u
c2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBHQ0dMaW50IHN5bWJvbENvdW50
OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChw
cm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFw
LmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChwcm9ncmFt
LCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291bnQpOwotICAg
ICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0p
OwotICAgIH0KLSAgICAKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50
cyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1i
b2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCkpID8gc3ltYm9s
Q291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhdIDogLTE7Ci0gICAg
Ci0gICAgcmV0dXJuIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJhd0luZGV4LCBpbmZv
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJz
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHNpemVpIG1heENvdW50LCBHQ0dMc2l6ZWkq
IGNvdW50LCBQbGF0Zm9ybUdMT2JqZWN0KiBzaGFkZXJzKQotewotICAgIGlmICghcHJvZ3JhbSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3Vu
dCwgc2hhZGVycyk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIYXNoZWROYW1lKGNvbnN0
IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBuYW1lOwotICAgIHVpbnQ2NF90IG51bWJlciA9IG5hbWVIYXNoRm9yU2hhZGVyKG5hbWUudXRm
OCgpLmRhdGEoKSwgbmFtZS5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIndlYmds
XyIsIGhleChudW1iZXIsIExvd2VyY2FzZSkpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFN0cmluZz4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5k
KCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRvJiBzeW1i
b2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBhdXRvIHN5
bWJvbEVudHJ5ID0gc3ltYm9sTWFwLmZpbmQobmFtZSk7Ci0gICAgaWYgKHN5bWJvbEVudHJ5ID09
IHN5bWJvbE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGF1
dG8mIG1hcHBlZE5hbWUgPSBzeW1ib2xFbnRyeS0+dmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKLSAg
ICByZXR1cm4gU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSk7
Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0NHTHNpemVpIGNvdW50ID0gMDsKLSAgICBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJz
KHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICBmb3IgKEdDR0xzaXplaSBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3lt
Ym9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAg
ICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUo
KTsKLSAgICB9Ci0KLSAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhl
IHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KLSAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVy
TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5l
bmQoKSkgewotICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOwotICAg
ICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5r
ZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1hcHBlZE5h
bWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAgICAgICBtYXBw
ZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5zZWNv
bmQsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHN5bWJvbFR5
cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJl
cXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAotICAgICAgICAv
LyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dy
YW0uCi0gICAgICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICAgICAgbmFt
ZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsKLSAgICAg
ICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5n
ZXQoKSk7Ci0KLSAgICAgICAgYXV0byBnZW5lcmF0ZWROYW1lID0gZ2VuZXJhdGVIYXNoZWROYW1l
KG5hbWUpOwotCi0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRy
KTsKLQotICAgICAgICBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLnNldChnZW5lcmF0ZWRO
YW1lLCBuYW1lKTsKLQotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkTmFtZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFk
ZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAgPSByZXN1
bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHN5
bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAgICAgIGlmIChuYW1lID09IHN5bWJvbEVudHJ5
LnZhbHVlLmdldCgpLm1hcHBlZE5hbWUuY19zdHIoKSkKLSAgICAgICAgICAgIHJldHVybiBzeW1i
b2xFbnRyeS5rZXk7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLVN0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKLXsKLSAgICBHQ0dMc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXJzWzJdOwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQs
IHNoYWRlcnMpOwotICAgIAotICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJT
b3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmln
aW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAg
fQotCi0gICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJz
IGFmdGVyIGxpbmtpbmcuCi0gICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5k
KHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsK
LSAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKLSAgICAgICAgYXV0
byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNo
YWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1l
KQotICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgICAgICBvcmln
aW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMu
c2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAgICBpZiAo
c3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1w
dHkoKSkgewotICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBt
YXkgYmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCi0g
ICAgICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFk
ZXIgcHJvZ3JhbS4KLQotICAgICAgICBjb25zdCBhdXRvJiBjYWNoZWQgPSBtX3Bvc3NpYmx5VW51
c2VkQXR0cmlidXRlTWFwLmZpbmQobmFtZSk7Ci0gICAgICAgIGlmIChjYWNoZWQgIT0gbV9wb3Nz
aWJseVVudXNlZEF0dHJpYnV0ZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBjYWNoZWQt
PnZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotfQotCi1TdHJpbmcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJz
WzJdLCBzaXplX3QgY291bnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBmb3IgKHNpemVf
dCBzeW1ib2xUeXBlID0gMDsgc3ltYm9sVHlwZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KFNIQURF
Ul9TWU1CT0xfVFlQRV9WQVJZSU5HKTsgKytzeW1ib2xUeXBlKSB7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgU2hhZGVyU291cmNlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcnNbaV0pOwot
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29uc3QgU2hh
ZGVyU3ltYm9sTWFwJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzdGF0aWNf
Y2FzdDxlbnVtIEFOR0xFU2hhZGVyU3ltYm9sVHlwZT4oc3ltYm9sVHlwZSkpOwotICAgICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewotICAgICAgICAg
ICAgICAgIGlmIChuYW1lID09IHN5bWJvbEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWUuY19z
dHIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAg
ICAgIHJldHVybiAtMTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiAtMTsKLQotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1l
KHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwotICAgIExPRyhX
ZWJHTCwgIjo6Z2xHZXRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51
dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiA6Omds
R2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLX0K
LQotaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAo
IXByb2dyYW0pCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiAtMTsKLQotCi0gICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1ib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7Ci0KLSAgICAvLyBTZXQgYW4gYXJiaXRyYXJ5IGxp
bWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgotICAgIC8vIGEgcHJv
YmxlbSBkcml2ZXIgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIG5ldmVyIGNsZWFyIHRoZSBl
cnJvci4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdvdWxkIGp1c3QgbG9vcCB1bnRpbCB3ZSBnb3Qg
Tk9fRVJST1IuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7Ci0gICAg
ICAgIEdDR0xlbnVtIGVycm9yID0gZ2xHZXRFcnJvcigpOwotICAgICAgICBpZiAoZXJyb3IgPT0g
Tk9fRVJST1IpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMu
YWRkKGVycm9yKTsKLSAgICAgICAgbW92ZWRBbkVycm9yID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbW92ZWRBbkVycm9yOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0RXJyb3IoKQotewotICAgIGlmICghbV9zeW50aGV0aWNFcnJvcnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRo
ZXRpYyBlcnJvciBsaXN0IGluIGNhc2UKLSAgICAgICAgLy8gdGhhdCBlcnJvciBpcyBhbHJlYWR5
IHRoZXJlLCBzaW5jZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgYm90aAotICAgICAgICAvLyBn
bEdldEVycm9yIGFuZCBnZXRFcnJvciBpcyB0byBvbmx5IHJlcG9ydCBlYWNoIGVycm9yIGNvZGUg
b25jZS4KLSAgICAgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgICAg
IHJldHVybiBtX3N5bnRoZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsKLSAgICB9Ci0KLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJ
T047Ci0KLSAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJu
IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKG5hbWUp
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBtb2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0KLUdDR0xi
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwot
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OwotCi0gICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZmZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAg
ICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVy
KQotewotICAgIGlmICghZnJhbWVidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsK
LQotICAgIHJldHVybiA6OmdsSXNGcmFtZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Ci19Ci0KLUdD
R0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLUdDR0xi
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVChy
ZW5kZXJidWZmZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFzaGFkZXIpCi0g
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hh
ZGVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVy
ZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0ZXh0dXJl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9h
dCB3aWR0aCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQotewotICAg
IEFTU0VSVChwcm9ncmFtKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLQotICAgIEdDR0xzaXplaSBjb3VudCA9IDA7Ci0gICAgUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXJzWzJdID0geyB9OwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAy
LCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAgaWYgKGNvdW50ID09IDIpCi0gICAgICAgIG1fbGlu
a2VkU2hhZGVyTWFwLnNldChwcm9ncmFtLCBzdGQ6Om1ha2VfcGFpcihzaGFkZXJzWzBdLCBzaGFk
ZXJzWzFdKSk7Ci0KLSAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50
IHBhcmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xm
bG9hdCB1bml0cykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1
ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTY2lz
c29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYg
c3RyaW5nKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRy
eTsKLQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291cmNlTWFw
LnNldChzaGFkZXIsIFdURk1vdmUoZW50cnkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50
IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwg
R0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxG
dW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNpbE1h
c2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVt
IGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNpbE9wU2Vw
YXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMZmxvYXQgdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFBh
cmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJh
eS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3Jt
MmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBh
cnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMmZ2
KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRp
b24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkp
Ci17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNmdihsb2Nh
dGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3Jt
NGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVu
aWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xpbnQgdjApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJh
eS5idWZTaXplLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xV
bmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2kobG9j
YXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5
KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zaXYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAs
IEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdDR0xpbnQgdjMpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm00aShsb2Nh
dGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFy
cmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm00aXYo
bG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17
Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihs
b2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA5KSk7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm1N
YXRyaXgzZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA5LCB0cmFuc3Bvc2UsIGFycmF5LmRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMTYpKTsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bv
c2UsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQ
cm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVXNlUHJvZ3JhbShwcm9ncmFt
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmFs
aWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0
ZXhBdHRyaWIxZihpbmRleCwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dCwgMT4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkuZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMmYo
aW5kZXgsIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAyPiBh
cnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgs
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0
dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQsIDM+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5LmRhdGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQ0dM
dWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NH
TGZsb2F0IHYzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gYXJyYXkpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRl
eEF0dHJpYjRmdihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6
ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlk
ZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNp
emUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihz
dGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
LX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVy
dGV4QXJyYXkoKQotewotICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuY3JlYXRlVmVydGV4QXJy
YXlPRVMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4
QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkuZGVs
ZXRlVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQotewotICAg
IHJldHVybiBnZXRFeHRlbnNpb25zKCkuaXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2Jq
ZWN0IGFycmF5KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5iaW5kVmVydGV4QXJyYXlPRVMoYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dM
ZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+IHZhbHVlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRCb29sZWFu
dihwbmFtZSwgdmFsdWUuZGF0YSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkK
LXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGZsb2F0PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZS5kYXRhKTsKLX0K
LQotR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjQoR0NHTGVu
dW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdDR0xpbnQ2NCB2YWx1ZSA9
IDA7Ci0gICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZp
cnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGlu
ZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KLSAgICAvLyA6OmdsR2V0
SW50ZWdlcjY0dihwbmFtZSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGlu
dDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1l
LCBHQ0dMdWludCBpbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIFVOVVNF
RF9QQVJBTShpbmRleCk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwotICAgIC8vIEZJWE1FIDE0MTE3
ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2lu
ZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVz
aW5nIE9wZW5HTCBFUyAzLjAuCi0gICAgLy8gOjpnbEdldEludGVnZXI2NGlfdihwbmFtZSwgaW5k
ZXgsIHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dM
aW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQp
Ci0gICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FU
VEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKLSAgICBy
ZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFBy
b2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgR0NHTGlu
dCB2YWx1ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgJnZhbHVl
KTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoQUNUSVZFX0FU
VFJJQlVURVMgPT0gcG5hbWUgfHwgQUNUSVZFX1VOSUZPUk1TID09IHBuYW1lKTsKLSAgICBpZiAo
IXZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclBy
b2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0gbV9z
aGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgKnZhbHVlID0gcmVz
dWx0LT52YWx1ZS5jb3VudEZvclR5cGUocG5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuc2V0KHByb2dyYW0sIEFjdGl2ZVNo
YWRlclN5bWJvbENvdW50cygpKTsKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJv
bENvdW50cyA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSktPnZh
bHVlOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIGFjdGl2ZSBhdHRyaWJ1dGVzLCBidWlsZCBhIGZp
bHRlcmVkIGNvdW50LCBhbmQgYSBtYXBwaW5nIG9mCi0gICAgLy8gb3VyIGludGVybmFsIGF0dHJp
YnV0ZXMgaW5kZXhlcyB0byB0aGUgcmVhbCB1bmZpbHRlcmVkIGluZGV4ZXMgaW5zaWRlIE9wZW5H
TC4KLSAgICBHQ0dMaW50IGF0dHJpYnV0ZUNvdW50ID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2
KHByb2dyYW0sIEFDVElWRV9BVFRSSUJVVEVTLCAmYXR0cmlidXRlQ291bnQpOwotICAgIGZvciAo
R0NHTGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKLSAgICAgICAgQWN0aXZl
SW5mbyBpbmZvOwotICAgICAgICBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGksIGluZm8p
OwotICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1
dGVJbmRleE1hcC5hcHBlbmQoaSk7Ci0gICAgfQotICAgIAotICAgIC8vIERvIHRoZSBzYW1lIGZv
ciB1bmlmb3Jtcy4KLSAgICBHQ0dMaW50IHVuaWZvcm1Db3VudCA9IDA7Ci0gICAgOjpnbEdldFBy
b2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfVU5JRk9STVMsICZ1bmlmb3JtQ291bnQpOwotICAgIGZv
ciAoR0NHTGludCBpID0gMDsgaSA8IHVuaWZvcm1Db3VudDsgKytpKSB7Ci0gICAgICAgIEFjdGl2
ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaSwgaW5m
byk7Ci0gICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0
dWFsVW5pZm9ybUluZGV4TWFwLmFwcGVuZChpKTsKLSAgICB9Ci0gICAgCi0gICAgKnZhbHVlID0g
c3ltYm9sQ291bnRzLmNvdW50Rm9yVHlwZShwbmFtZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cnNbMl0sIEdDR0xzaXplaSBjb3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCi17Ci0gICAgTE9HKFdl
YkdMLCAiT3JpZ2luYWwgU2hhZGVySW5mb0xvZzpcbiVzIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwot
Ci0gICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiByZWdFeHAoIndlYmdsX1swMTIzNDU2
Nzg5YWJjZGVmQUJDREVGXSsiKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgcHJvY2Vzc2VkTG9nOwot
ICAgIAotICAgIC8vIEFOR0xFIGluc2VydHMgYSAiI2V4dGVuc2lvbiIgbGluZSBpbnRvIHRoZSBz
aGFkZXIgc291cmNlIHRoYXQKLSAgICAvLyBjYXVzZXMgYSB3YXJuaW5nIGluIHNvbWUgY29tcGls
ZXJzLiBUaGVyZSBpcyBubyBwb2ludCBzaG93aW5nCi0gICAgLy8gdGhpcyB3YXJuaW5nIHRvIHRo
ZSB1c2VyIHNpbmNlIHRoZXkgZGlkbid0IHdyaXRlIHRoZSBjb2RlIHRoYXQKLSAgICAvLyBpcyBj
YXVzaW5nIGl0LgotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFuZ2xl
V2FybmluZyB7ICJXQVJOSU5HOiAwOjE6IGV4dGVuc2lvbiAnR0xfQVJCX2dwdV9zaGFkZXI1JyBp
cyBub3Qgc3VwcG9ydGVkXG4iX3MgfTsKLSAgICBpbnQgc3RhcnRGcm9tID0gbG9nLnN0YXJ0c1dp
dGgoYW5nbGVXYXJuaW5nKSA/IGFuZ2xlV2FybmluZy5nZXQoKS5sZW5ndGgoKSA6IDA7Ci0gICAg
aW50IG1hdGNoZWRMZW5ndGggPSAwOwotCi0gICAgZG8gewotICAgICAgICBpbnQgc3RhcnQgPSBy
ZWdFeHAubWF0Y2gobG9nLCBzdGFydEZyb20sICZtYXRjaGVkTGVuZ3RoKTsKLSAgICAgICAgaWYg
KHN0YXJ0ID09IC0xKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcHJvY2Vzc2VkTG9n
LmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgc3RhcnQgLSBzdGFydEZyb20pKTsKLSAg
ICAgICAgc3RhcnRGcm9tID0gc3RhcnQgKyBtYXRjaGVkTGVuZ3RoOwotCi0gICAgICAgIGNvbnN0
IFN0cmluZyYgbWFuZ2xlZFN5bWJvbCA9IGxvZy5zdWJzdHJpbmcoc3RhcnQsIG1hdGNoZWRMZW5n
dGgpOwotICAgICAgICBjb25zdCBTdHJpbmcmIG1hcHBlZFN5bWJvbCA9IG1hcHBlZFN5bWJvbE5h
bWUoc2hhZGVycywgY291bnQsIG1hbmdsZWRTeW1ib2wpOwotICAgICAgICBMT0coV2ViR0wsICJE
ZW1hbmdsaW5nOiAlcyB0byAlcyIsIG1hbmdsZWRTeW1ib2wudXRmOCgpLmRhdGEoKSwgbWFwcGVk
U3ltYm9sLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKG1hcHBl
ZFN5bWJvbCk7Ci0gICAgfSB3aGlsZSAoc3RhcnRGcm9tIDwgc3RhdGljX2Nhc3Q8aW50Pihsb2cu
bGVuZ3RoKCkpKTsKLQotICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFy
dEZyb20sIGxvZy5sZW5ndGgoKSAtIHN0YXJ0RnJvbSkpOwotCi0gICAgTE9HKFdlYkdMLCAiVW5t
YW5nbGVkIFNoYWRlckluZm9Mb2c6XG4lcyIsIHByb2Nlc3NlZExvZy50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgIHJldHVybiBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKTsKLX0KLQotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgR0xpbnQg
bGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xF
TkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVu
Z3RoKTsKLSAgICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAmc2l6ZSwg
aW5mby5kYXRhKCkpOwotCi0gICAgR0NHTHNpemVpIGNvdW50OwotICAgIFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyc1syXTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50
LCBzaGFkZXJzKTsKLQotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIGNv
dW50LCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotR0NHTGludCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6OmdsR2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1
cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRl
cmkoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEFTU0VS
VChzaGFkZXIpOwotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotCi0gICAgY29uc3QgYXV0byYgcmVz
dWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIAotICAgIHN3aXRjaCAo
cG5hbWUpIHsKLSAgICBjYXNlIERFTEVURV9TVEFUVVM6Ci0gICAgY2FzZSBTSEFERVJfVFlQRToK
LSAgICAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgIGlmIChyZXN1bHQgIT0g
bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0
PGludD4ocmVzdWx0LT52YWx1ZS5pc1ZhbGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
TkZPX0xPR19MRU5HVEg6Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5n
dGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKLSAg
ICAgICAgdmFsdWUgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9F
TlVNKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17
Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNv
dXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIGNvbnN0IFNo
YWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgaWYgKCFlbnRyeS5p
c1ZhbGlkKQotICAgICAgICByZXR1cm4gZW50cnkubG9nOwotCi0gICAgR0xpbnQgbGVuZ3RoID0g
MDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5n
dGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAg
R0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAg
OjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7
Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OwotICAg
IHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEo
KSwgc2l6ZSkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRl
clNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsK
LQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291cmNlOwot
fQotCi1HQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMZmxvYXQgdmFsdWUg
PSAwLmY7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHZh
bHVlOwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwot
ICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAg
IEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFt
ZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldFVuaWZvcm1mdihw
cm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJv
Z3JhbSwgbG9jYXRpb24sIHZhbHVlLmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRVbmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48R0NHTHVpbnQ+IHZhbHVlKQotewotICAgIFVOVVNFRF9QQVJBTShw
cm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1M
b2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsK
LSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJv
bE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOwotICAgIExP
RyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIDo6
Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsK
LX0KLQotR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x2b2lkKiBwb2lu
dGVyID0gMDsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAm
cG9pbnRlcik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xzaXplaXB0cj4ocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGludCB4b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotI2lmICFVU0UoT1BFTkdMX0VTKQotICAgIGlmICh0eXBlID09IEhBTEZfRkxPQVRf
T0VTKQotICAgICAgICB0eXBlID0gR0xfSEFMRl9GTE9BVF9BUkI7Ci0jZW5kaWYKLQotICAgIGlm
IChtX3VzaW5nQ29yZVByb2ZpbGUpICB7Ci0gICAgICAgIC8vIFRoZXJlIGFyZSBzb21lIGZvcm1h
dCB2YWx1ZXMgdXNlZCBpbiBXZWJHTCB0aGF0IGFyZSBkZXByZWNhdGVkIHdoZW4gdXNpbmcgYSBj
b3JlIHByb2ZpbGUsIHNvIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gYWRhcHQgdGhlbSwgYXMgd2Ug
ZG8gaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoKS4KLSAgICAgICAgc3dp
dGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBBTFBIQToKLSAgICAgICAgICAgIC8vIFdlIGFy
ZSB1c2luZyBHTF9SRUQgdG8gYmFjayBHTF9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgot
ICAgICAgICAgICAgZm9ybWF0ID0gUkVEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdMX1JHIHRv
IGJhY2sgR0xfTFVNSU5BTkNFX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCi0gICAgICAg
ICAgICBmb3JtYXQgPSBSRzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogd2Ug
d2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0
aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUuCi0gICAg
OjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFn
ZVNpemUsIGRhdGEuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0
YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29tcHJlc3NlZFRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCBpbWFnZVNpemUsIGRhdGEuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLVBsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQgbyA9IDA7
Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
R0x1aW50IG8gPSAwOwotICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKLSAgICByZXR1
cm4gbzsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKLSAgICBy
ZXR1cm4gbzsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2xDcmVhdGVTaGFkZXIoKHR5
cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9T
SEFERVIpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVUZXh0dXJlKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlblRleHR1cmVzKDEsICZv
KTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwotICAgIHJldHVybiBvOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1H
TE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2Jq
ZWN0IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRl
LmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91bmREcmF3
RkJPKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5n
IHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBn
ZXRzIGRlbGV0ZWQuCi0gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwgMCk7Ci0g
ICAgfQotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9n
cmFtKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRl
cmJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVy
ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8mIGtl
eVZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJl
OwotICAgIH0pOwotICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQotewot
ICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBl
cnJvciBsaXN0IHRvCi0gICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBj
YWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKLSAgICAvLyBhbnkgZXJyb3JzIGZyb20gZ2xFcnJv
ciBiZWZvcmUgdGhlIGVycm9yIHdlIGFyZSBzeW50aGVzaXppbmcuCi0gICAgbW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCgpCi17
Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAg
ICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlY3ljbGVDb250ZXh0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNv
cHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250ZXh0KCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5n
ZWROb3RpZmljYXRpb24oKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9y
KG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlm
aWNhdGlvbigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJE
RGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVk
Q291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBH
Q0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCi17Ci0g
ICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwg
Y291bnQsIHByaW1jb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUs
IEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xz
aXplaSBwcmltY291bnQpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7Ci0gICAgY2hl
Y2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKLXsKLSAgICBn
ZXRFeHRlbnNpb25zKCkudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsK
LX0KLQotI2lmIEhBVkUoT1BFTkdMXzQpICYmIEVOQUJMRShXRUJHTDIpCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQgaW5kZXgpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbFByaW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNvbnN0IHZv
aWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxl
bmd0aCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGF0
YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzYWdlKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjT2Zmc2V0
KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgZHN0Qnl0
ZU9mZnNldCwgY29uc3Qgdm9pZCogc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWlu
dCBsZW5ndGgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGRzdEJ5dGVPZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShzcmNEYXRhKTsKLSAgICBVTlVTRURf
UEFSQU0oc3JjT2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLX0KLQotI2lmIEhB
VkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3
cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0
LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwg
d3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKLX0KLSNlbHNlCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSwg
R0NHTGVudW0sIEdDR0xpbnRwdHIsIEdDR0xpbnRwdHIsIEdDR0xzaXplaXB0cikKLXsKLX0KLSNl
bmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRh
KQotewotI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdDR0x2b2lkKiBwdHIg
PSA6OmdsTWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwgR3JhcGhp
Y3NDb250ZXh0R0w6Ok1BUF9SRUFEX0JJVCk7Ci0gICAgaWYgKCFwdHIpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtZW1jcHkoZGF0YS5kYXRhLCBwdHIsIGRhdGEuYnVmU2l6ZSk7Ci0gICAgaWYgKCE6
OmdsVW5tYXBCdWZmZXIodGFyZ2V0KSkKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRh
dGEpOwotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09Q
RVJBVElPTik7Ci0jZW5kaWYKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNY
MSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBk
c3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikK
LXsKLSAgICBVTlVTRURfUEFSQU0oc3JjWDApOwotICAgIFVOVVNFRF9QQVJBTShzcmNZMCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHNyY1gxKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTEpOwotICAgIFVO
VVNFRF9QQVJBTShkc3RYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFkwKTsKLSAgICBVTlVTRURf
UEFSQU0oZHN0WDEpOwotICAgIFVOVVNFRF9QQVJBTShkc3RZMSk7Ci0gICAgVU5VU0VEX1BBUkFN
KG1hc2spOwotICAgIFVOVVNFRF9QQVJBTShmaWx0ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZl
bCwgR0NHTGludCBsYXllcikKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVT
RURfUEFSQU0oYXR0YWNobWVudCk7Ci0gICAgVU5VU0VEX1BBUkFNKHRleHR1cmUpOwotICAgIFVO
VVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxheWVyKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRh
cmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQotewotICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAg
ICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVudHMpOwot
ICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHNyYyk7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18z
KQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NH
TFNwYW48R0NHTGludD4gZGF0YSkKLXsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRJbnRlcm5h
bGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBkYXRhLmJ1ZlNpemUsIGRh
dGEuZGF0YSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9Q
QVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVT
RURfUEFSQU0oYnVmU2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVGV4
U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsVGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotI2Vsc2UKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMZW51
bSwgR0NHTFNwYW48R0NHTGludD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSwgR0NHTHNpemVpLCBH
Q0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVp
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKLXsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQs
IEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxldmVsKTsK
LSAgICBVTlVTRURfUEFSQU0oeG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHlvZmZzZXQpOwot
ICAgIFVOVVNFRF9QQVJBTSh6b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGhlaWdodCk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdE
YXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShuYW1lKTsK
LQotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwKQotewotICAgIFVOVVNFRF9QQVJB
TShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwg
R0NHTHVpbnQgdjEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURf
UEFSQU0odjApOwotICAgIFVOVVNFRF9QQVJBTSh2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdD
R0x1aW50IHYxLCBHQ0dMdWludCB2MikKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwot
ICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHYxKTsKLSAgICBVTlVTRURf
UEFSQU0odjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIs
IEdDR0x1aW50IHYzKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VE
X1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFSQU0odjEpOwotICAgIFVOVVNFRF9QQVJBTSh2Mik7
Ci0gICAgVU5VU0VEX1BBUkFNKHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
ZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewotICAgIFVO
VVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NH
THVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURf
UEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24p
OwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4MmZ2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VE
X1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odHJhbnNw
b3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVT
RURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVO
VVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRh
dGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgz
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQotewotICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJB
TSh5KTsKLSAgICBVTlVTRURfUEFSQU0oeik7Ci0gICAgVU5VU0VEX1BBUkFNKHcpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1aW50IGlu
ZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50LCA0PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVp
bnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKLXsKLSAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHopOwotICAgIFVOVVNFRF9QQVJBTSh3KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShzdHJpZGUpOwotICAg
IFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkcmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwgR0NHTHVp
bnQgZW5kLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KQotewotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhcnQpOwot
ICAgIFVOVVNFRF9QQVJBTShlbmQpOwotICAgIFVOVVNFRF9QQVJBTShjb3VudCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51
bT4gYnVmcykKLXsKLSAgICBVTlVTRURfUEFSQU0oYnVmcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRy
YXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURf
UEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
QnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMdWludD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwotICAg
IFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1
ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKGRyYXdi
dWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3
YnVmZmVyLCBHQ0dMZmxvYXQgZGVwdGgsIEdDR0xpbnQgc3RlbmNpbCkKLXsKLSAgICBVTlVTRURf
UEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKGRlcHRoKTsKLSAgICBVTlVTRURfUEFSQU0oc3RlbmNpbCk7Ci19Ci0KLVBsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnko
UGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkpOwotfQot
Ci1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdM
T2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9i
amVjdHVpKFBsYXRmb3JtR0xPYmplY3QgcXVlcnksIEdDR0xlbnVtIHBuYW1lKQotewotICAgIFVO
VVNFRF9QQVJBTShxdWVyeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
U2FtcGxlcigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewotICAgIFVO
VVNFRF9QQVJBTShzYW1wbGVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHNhbXBsZXIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kU2FtcGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9ybUdMT2Jq
ZWN0IHNhbXBsZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVuaXQpOwotICAgIFVOVVNFRF9QQVJB
TShzYW1wbGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBh
cmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGlu
dCBwYXJhbSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VEX1BBUkFN
KHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgcGFyYW0pCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNh
bXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFt
KTsKLX0KLQotR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFy
YW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQotewotICAg
IFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIHJl
dHVybiAwLmY7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBs
ZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCi0K
LXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZl
bmNlU3luYyhHQ0dMZW51bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKLXsKLSAgICBV
TlVTRURfUEFSQU0oY29uZGl0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwotCi0gICAg
cmV0dXJuIDA7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5
bmMoR0NHTHN5bmMgc3luYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMo
R0NHTHN5bmMgc3luYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci19Ci0KLUdDR0xlbnVt
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGllbnRXYWl0U3luYyhHQ0dMc3luYyBzeW5jLCBH
Q0dMYml0ZmllbGQgZmxhZ3MsIEdDR0x1aW50NjQgdGltZW91dCkKLXsKLSAgICBVTlVTRURfUEFS
QU0oc3luYyk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKLSAgICBVTlVTRURfUEFSQU0odGlt
ZW91dCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQg
dGltZW91dCkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BBUkFNKGZs
YWdzKTsKLSAgICBVTlVTRURfUEFSQU0odGltZW91dCk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQot
ewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAg
IHJldHVybiAwOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3Jt
R0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGlkKTsKLX0KLQotR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9i
amVjdCBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2so
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpZCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJpbWl0aXZlTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKLXsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywgR0NHTGVu
dW0gYnVmZmVyTW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHZhcnlpbmdzKTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyTW9kZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikKLXsK
LSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5zZm9ybUZl
ZWRiYWNrKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZl
ckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlu
ZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5k
ZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVp
cHRyIHNpemUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci19Ci0KLVZlY3RvcjxHQ0dMdWludD4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHVuaWZvcm1OYW1lcykKLXsKLSAgICBVTlVT
RURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1OYW1lcyk7Ci0KLSAg
ICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8R0NHTGludD4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVj
dG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIFZl
Y3RvcjxHQ0dMaW50PiByZXN1bHQodW5pZm9ybUluZGljZXMuc2l6ZSgpLCAwKTsKLSNpZiBIQVZF
KE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0g
ICAgOjpnbEdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMuc2l6ZSgp
LCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCByZXN1bHQuZGF0YSgpKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1HQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25z
dCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0p
OwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tOYW1lKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tO
YW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3Jt
QmxvY2tJbmRleCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2Nr
QmluZGluZykKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrQmluZGlu
Zyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxzKEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0od2lk
dGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIFVOVVNFRF9QQVJBTShmb3JtYXQp
OwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYo
R0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBwYXJhbXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dy
YW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0s
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0gLCBHQ0dM
aW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFn
ZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGlu
dCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdD
R0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikKLXsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NH
TGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQs
IEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xl
bnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGlu
dCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdD
R0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xl
bnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVt
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBH
Q0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xp
bnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRU
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50
LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsKLSAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5j
ZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsKLSAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0FO
R0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4sIEdDR0xzaXplaSkKLXsKLSAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVt
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NH
TGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsKLSAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotfQot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCB1bnBhY2tBbGlnbm1lbnQpCi17Ci0gICAg
QVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAyIHx8IHVu
cGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKLSAgICBVbmlxdWVB
cnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOwotICAgIHVuc2lnbmVkIHNpemUgPSAwOwotICAgIGlm
ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgewotICAgICAgICBQaXhlbFN0b3JlUGFyYW1zIHBh
cmFtczsKLSAgICAgICAgcGFyYW1zLmFsaWdubWVudCA9IHVucGFja0FsaWdubWVudDsKLSAgICAg
ICAgR0NHTGVudW0gZXJyb3IgPSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUs
IHdpZHRoLCBoZWlnaHQsIDEsIHBhcmFtcywgJnNpemUsIG51bGxwdHIsIG51bGxwdHIpOwotICAg
ICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgemVybyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFy
PihzaXplKTsKLSAgICAgICAgaWYgKCF6ZXJvKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUp
OwotICAgIH0KLSAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHplcm8uZ2V0
KCksIHNpemUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKSAmJiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAppbmRleCBlNjZlMDBhZGIyODc1YWRmNjlhMTk3ZmNjNjkyMzE2ZGE2
Zjk2ZTZlLi5kMjk5YTE5ZmE4NjYzOTc1NTJkZDZkZTc4ODBjY2E0MzM4MmYyOGE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcApAQCAtMjgsOSAr
MjgsMTMgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKIAorI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmgiCisjZWxzZQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmgiCisjZW5kaWYKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFn
ZXIoKQpAQCAtNTYsNyArNjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
cjo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
IGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6YWRkQ29udGV4
dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKiBjb250ZXh0KQogewogICAgIEFTU0VSVChjb250
ZXh0KTsKICAgICBpZiAoIWNvbnRleHQpCkBAIC02Niw3ICs3MCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KiBjb250ZXh0CiAgICAgbV9jb250ZXh0cy5hcHBlbmQoY29udGV4dCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250ZXh0KEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6
OnJlbW92ZUNvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCogY29udGV4dCkKIHsKICAg
ICBpZiAoIW1fY29udGV4dHMuY29udGFpbnMoY29udGV4dCkpCiAgICAgICAgIHJldHVybjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaAppbmRleCAwZWY4NmRj
NmRlN2YyMWQ1ZThlOTEyMGU5YTMyYjBhOGIxZjFmNzMxLi5kMTQ4MzQxMGQwMjNmODMwMzZkOTc4
NTY0MzVmYWU1NTg0YjA0NjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMTWFuYWdlci5oCkBAIC0zNiwxNSArMzYsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
b25zdCB1bnNpZ25lZCBNYXhDb250ZXh0cyA9IDE2OwogCisjaWYgVVNFKEFOR0xFKQorY2xhc3Mg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCiBjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDsKKyNlbmRpZgogCiBjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIgewog
ICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI+
OwogcHVibGljOgorI2lmIFVTRShBTkdMRSkKKyAgICB1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCisgICAgdXNpbmcgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOworI2VuZGlmCisK
ICAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyJiBzaGFyZWRNYW5hZ2Vy
KCk7CiAgICAgCi0gICAgdm9pZCBhZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKik7
Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKik7CisgICAg
dm9pZCBhZGRDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wqKTsKKyAgICB2b2lkIHJl
bW92ZUNvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCopOwogICAgIAogICAgIHZvaWQg
cmVjeWNsZUNvbnRleHRJZk5lY2Vzc2FyeSgpOwogICAgIGJvb2wgaGFzVG9vTWFueUNvbnRleHRz
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0cy5zaXplKCkgPj0gTWF4Q29udGV4dHM7IH0KQEAg
LTU5LDcgKzY5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqPiBtX2NvbnRleHRzOworICAgIFZlY3RvcjxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
Kj4gbV9jb250ZXh0czsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlci5jcHAKaW5kZXggMDU3NTQ0NDhiOTAzZTE0OTkzZWQzMWIwY2JkNjFlODY5
NGE5ZWU5OS4uOTc2ZTNhYmU1YmIzYWM0MGFmOGYyMGM5ZWU0ZWU4YTI1NTNiMGE0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKQEAgLTg3LDEy
ICs4NywxMCBAQCBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyPiBHcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcgogR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyOjp+R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKCkgPSBkZWZhdWx0Owog
CiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVy
ZU1hcHBlcihHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQotICAgIDog
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woV1RGTW92ZShhdHRyaWJ1dGVzKSkKKyAgICA6IEdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2UoV1RGTW92ZShhdHRyaWJ1dGVzKSkKIHsKIH0K
IAotLy8gRklYTUU6IEJlbG93IGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlIG1vdmVkIHRvIEdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciB0byBzaW1wbGlmeSB0aGUgYmFzZSBjbGFzcy4KLQog
UmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMPiBjcmVhdGVXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0
R0woY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQogewogICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CkBAIC0xMjUsMzE0ICsxMjMsNyBAQCBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0R0w+IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRH
TChjb25zdCBHcmFwaGljc0NvbnRleAogICAgIHJldHVybiBjb250ZXh0OwogfQogCi0jaWYgVVNF
KEFOR0xFKQotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgIDogR3JhcGhpY3ND
b250ZXh0R0woYXR0cmlidXRlcykKLXsKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAgIG1faXNGb3JX
ZWJHTDIgPSBhdHRyaWJ1dGVzLndlYkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTFdlYkdM
VmVyc2lvbjo6V2ViR0wyOwotI2VuZGlmCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgbV9uaWNvc2lh
TGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xBTkdMRUxheWVyPigqdGhpcyk7Ci0jZWxz
ZQotICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZv
cm1MYXllcj4oKnRoaXMpOwotI2VuZGlmCi0gICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLQotICAgIHZh
bGlkYXRlQXR0cmlidXRlcygpOwotICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygp
OyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCi0KLSAgICBHTGVu
dW0gdGV4dHVyZVRhcmdldCA9IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7Ci0gICAgLy8g
Q3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50by4KLSAgICBnbDo6R2VuVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fdGV4dHVy
ZSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdf
RklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQs
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVy
aSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0g
ICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCAwKTsK
LQotICAgIC8vIENyZWF0ZSBhbiBGQk8uCi0gICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9m
Ym8pOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1f
Y29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRl
cmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9D
TEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICBnbDo6R2VuVGV4dHVyZXMo
MSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVU
YXJnZXQsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotCi0gICAgZ2w6OkJp
bmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYSBt
dWx0aXNhbXBsZSBGQk8uCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3Rh
dGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAg
ICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIGds
OjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAg
ICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9tdWx0
aXNhbXBsZUZCTzsKLSAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmli
dXRlcy5kZXB0aCkKLSAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBCaW5k
IGNhbnZhcyBGQk8uCi0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IG1fZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9IG1fZmJvOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpCi0gICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOwotICAgIH0KLQotICAgIGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwot
fQotI2Vsc2UKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IEdyYXBoaWNz
Q29udGV4dEdMKGF0dHJpYnV0ZXMpCi17Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgbV9uaWNvc2lh
TGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xMYXllcj4oKnRoaXMpOwotI2Vsc2UKLSAg
ICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5
ZXI+KCp0aGlzKTsKLSNlbmRpZgotCi0gICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLQotICAgIHZhbGlk
YXRlQXR0cmlidXRlcygpOwotICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAv
LyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCi0KLSAgICAvLyBDcmVh
dGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgotICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsK
LSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxU
RVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICA6
OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xB
TVBfVE9fRURHRSk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0g
ICAgLy8gQ3JlYXRlIGFuIEZCTy4KLSAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7
Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAmbV9jb21w
b3NpdG9yVGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29t
cG9zaXRvclRleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1Q
X1RPX0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLQotICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAm
bV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBh
cmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9T
LCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhIG11bHRp
c2FtcGxlIEZCTy4KLSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5i
b3VuZERyYXdGQk8pOwotICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICA6
OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAg
IG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRpc2Ft
cGxlRkJPOwotICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVz
LmRlcHRoKQotICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJpbmQgY2Fu
dmFzIEZCTy4KLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0g
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgICAg
ICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygx
LCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAg
ICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYK
LSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAg
ICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0g
ICAgfQotCi0jaWYgIVVTRShPUEVOR0xfRVMpCi0gICAgOjpnbEVuYWJsZShHTF9WRVJURVhfUFJP
R1JBTV9QT0lOVF9TSVpFKTsKLQotICAgIGlmIChHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lv
bigpID49IDMyMCkgewotICAgICAgICBtX3VzaW5nQ29yZVByb2ZpbGUgPSB0cnVlOwotCi0gICAg
ICAgIC8vIEZyb20gdmVyc2lvbiAzLjIgb24gd2UgdXNlIHRoZSBPcGVuR0wgQ29yZSBwcm9maWxl
LCBzbyByZXF1ZXN0IHRoYXQgb3VwdXQgdG8gdGhlIHNoYWRlciBjb21waWxlci4KLSAgICAgICAg
Ly8gT3BlbkdMIHZlcnNpb24gMy4yIHVzZXMgR0xTTCB2ZXJzaW9uIDEuNTAuCi0gICAgICAgIG1f
Y29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNMXzE1MF9DT1JFX09VVFBVVCk7Ci0K
LSAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHBy
b2ZpbGUsIGFuZCB3ZSBuZWVkIGEgVkFPIGZvciByZW5kZXJpbmcuCi0gICAgICAgIC8vIEEgVkFP
IGNvdWxkIGJlIGNyZWF0ZWQgYW5kIGJvdW5kIGJ5IGVhY2ggY29tcG9uZW50IHVzaW5nIEdMIHJl
bmRlcmluZyAoVGV4dHVyZU1hcHBlciwgV2ViR0wsIGV0YykuIFRoaXMgaXMKLSAgICAgICAgLy8g
YSBzaW1wbGVyIHNvbHV0aW9uOiB0aGUgZmlyc3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgY3Jl
YXRlZCBvbiBhIEdMQ29udGV4dCB3aWxsIGNyZWF0ZSBhbmQgYmluZCBhIFZBTyBmb3IgdGhhdCBj
b250ZXh0LgotICAgICAgICBHQ0dMaW50IGN1cnJlbnRWQU8gPSBnZXRJbnRlZ2VyKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpWRVJURVhfQVJSQVlfQklORElORyk7Ci0gICAgICAgIGlmICghY3Vy
cmVudFZBTykgewotICAgICAgICAgICAgbV92YW8gPSBjcmVhdGVWZXJ0ZXhBcnJheSgpOwotICAg
ICAgICAgICAgYmluZFZlcnRleEFycmF5KG1fdmFvKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIEZvciBsb3dlciB2ZXJzaW9ucyByZXF1ZXN0IHRoZSBjb21wYXRpYmlsaXR5
IG91dHB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgotICAgICAgICBtX2NvbXBpbGVyID0gQU5H
TEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF9DT01QQVRJQklMSVRZX09VVFBVVCk7Ci0KLSAgICAgICAg
Ly8gR0xfUE9JTlRfU1BSSVRFIGlzIG5lZWRlZCBpbiBsb3dlciB2ZXJzaW9ucy4KLSAgICAgICAg
OjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOwotICAgIH0KLSNlbHNlCi0gICAgLy8gQWRqdXN0
IHRoZSBzaGFkZXIgc3BlY2lmaWNhdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciBHTEVTMyAoaS5l
LiBXZWJHTDIgc3VwcG9ydCkgd2FzIHJlcXVlc3RlZC4KLSNpZiBFTkFCTEUoV0VCR0wyKQotICAg
IG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCwgKGF0dHJpYnV0
ZXMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDIp
ID8gU0hfV0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKLSNlbHNlCi0gICAgbV9jb21waWxl
ciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBTSF9XRUJHTF9TUEVDKTsKLSNl
bmRpZgotI2VuZGlmCi0KLSAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KLSAgICBTaEJ1aWx0
SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7Ci0gICAgc2g6OkluaXRCdWlsdEluUmVzb3VyY2Vz
KCZBTkdMRVJlc291cmNlcyk7Ci0KLSAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJz
ID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9BVFRSSUJT
KTsKLSAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IGdldEludGVn
ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTKTsK
LSAgICBBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyA9IGdldEludGVnZXIoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMpOwotICAgIEFOR0xFUmVzb3Vy
Y2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICBBTkdMRVJl
c291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdlcihHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAg
IEFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdlcihHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgIEFOR0xFUmVz
b3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKTsKLQotICAgIC8vIEFs
d2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgotICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdC
dWZmZXJzID0gMTsKLQotICAgIEdDR0xpbnQgcmFuZ2VbMl0geyB9OwotICAgIEdDR0xpbnQgcHJl
Y2lzaW9uID0gMDsKLSAgICBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkZSQUdNRU5UX1NIQURFUiwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkhJR0hf
RkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKLSAgICBBTkdMRVJlc291cmNlcy5GcmFnbWVudFBy
ZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0gfHwgcHJlY2lzaW9uKTsKLQotICAg
IG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLQotICAgIDo6Z2xDbGVh
ckNvbG9yKDAsIDAsIDAsIDApOwotfQotI2VuZGlmCi0KLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKLXsKLSAgICBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0
KHRoaXMpOwotICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFT
U0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAg
ICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgZ2w6OkRl
bGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgYXV0
byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRyaWJ1dGVz
LmFudGlhbGlhcykgewotICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBnbDo6RGVsZXRlRnJh
bWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJpYnV0
ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0jaWYgIVVTRShBTkdMRSkgJiYgVVNF
KE9QRU5HTF9FUykKLSAgICAgICAgaWYgKG1fZGVwdGhCdWZmZXIpCi0gICAgICAgICAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwotCi0gICAgICAgIGlmIChtX3N0
ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3Rl
bmNpbEJ1ZmZlcik7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQot
ICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKLSAgICB9Ci0gICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1f
aW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0jZW5kaWYKLQotI2lmIFVTRShDQUlSTykKLSAgICBpZiAo
bV92YW8pCi0gICAgICAgIGRlbGV0ZVZlcnRleEFycmF5KG1fdmFvKTsKLSNlbmRpZgotfQotI2Vs
c2UKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQot
ewotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJl
bW92ZUNvbnRleHQodGhpcyk7Ci0gICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAgICBpZiAobV90ZXh0
dXJlKQotICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQotICAg
ICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlm
Ci0KLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYg
KGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5z
dGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVy
YnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIDo6
Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAgIH0gZWxzZSBp
ZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSNpZiBVU0UoT1BF
TkdMX0VTKQotICAgICAgICBpZiAobV9kZXB0aEJ1ZmZlcikKLSAgICAgICAgICAgIGdsRGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKG1fc3RlbmNp
bEJ1ZmZlcikKLSAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2ls
QnVmZmVyKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCi0gICAg
ICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OwotICAgIH0KLSAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV9pbnRl
cm1lZGlhdGVUZXh0dXJlKTsKLSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotICAgIGlmIChtX3Zh
bykKLSAgICAgICAgZGVsZXRlVmVydGV4QXJyYXkobV92YW8pOwotI2VuZGlmCi19Ci0jZW5kaWYg
Ly8gVVNFKEFOR0xFKQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4
dEN1cnJlbnQoKQotewotI2lmIFVTRShOSUNPU0lBKQotICAgIHJldHVybiBtX25pY29zaWFMYXll
ci0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jZWxzZQotICAgIHJldHVybiBtX3RleG1hcExheWVy
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCi17Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAotewotI2lmIFVTRShBTkdMRSkKLSAg
ICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0gICAgcmV0dXJu
IHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1QbGF0Zm9ybUxh
eWVyKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CitQbGF0
Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIo
KSBjb25zdAogewogI2lmIFVTRShOSUNPU0lBKQogICAgIHJldHVybiAmbV9uaWNvc2lhTGF5ZXIt
PmNvbnRlbnRMYXllcigpOwpAQCAtNDQxLDM4ICsxMzIsOCBAQCBQbGF0Zm9ybUxheWVyKiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiAjZW5kaWYKIH0KIAot
I2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShBTkdMRSkKLUV4dGVuc2lvbnNHTE9wZW5HTENvbW1v
biYgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICgh
bV9leHRlbnNpb25zKSB7Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgLy8gZ2xHZXRTdHJp
bmdpIGlzIG5vdCBhdmFpbGFibGUgb24gR0xFUzIuCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1h
a2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+KHRoaXMsICBmYWxzZSk7Ci0jZWxzZQotICAg
ICAgICAvLyBGcm9tIE9wZW5HTCAzLjIgb24gd2UgdXNlIHRoZSBDb3JlIHByb2ZpbGUsIGFuZCB0
aGVyZSB3ZSBtdXN0IHVzZSBnbEdldFN0cmluZ2kuCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1h
a2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMPih0aGlzLCBHTENvbnRleHQ6OmN1cnJlbnQoKS0+
dmVyc2lvbigpID49IDMyMCk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuICptX2V4dGVuc2lv
bnM7Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2V0Q29udGV4
dFZpc2liaWxpdHkoYm9vbCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcoU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nIGV2ZW50KQot
ewotICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0Zh
aWx1cmUpCi0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKLXsKLX0KLQogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCi1SZWZQdHI8TWVkaWFTYW1wbGU+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBsZSgpCitSZWZQdHI8
TWVkaWFTYW1wbGU+IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGFpbnRDb21wb3Np
dGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUoKQogewogI2lmIFVTRShHU1RSRUFNRVIpCiAgICAgaWYg
KGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKSkKQEAgLTQ4MiwxMSAr
MTQzLDYgQEAgUmVmUHRyPE1lZGlhU2FtcGxlPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFp
bnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUKIH0KICNlbmRpZgogCi1zdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRS
ZXN1bHRzKCkKLXsKLSAgICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKLX0KLQogI2lm
IEVOQUJMRShWSURFTykKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpjb3B5
VGV4dHVyZUZyb21NZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBQbGF0Zm9ybUdMT2JqZWN0IG91
dHB1dFRleHR1cmUsIEdDR0xlbnVtIG91dHB1dFRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlci5oCmluZGV4IGU0NjYyYjY4M2VhNDViNmYxOTY2YjMxOTczMzkz
MzAzYWFmODYwOTUuLmQxYWMwZWI3YzBhZGEyZmY4OGYxNzlkYjljZDRlYzBhMDVlNzZjYTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgKQEAgLTI3LDE4
ICsyNywzNCBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCisjaWYgVVNFKEFOR0xFKQorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKKyNlbHNlCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCB7CisjaWYgVVNFKEFOR0xFKQordXNpbmcgR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSA9IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxz
ZQordXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSA9IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOworI2VuZGlmCisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBw
ZXJCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlcj4gY3JlYXRlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYm
KTsKICAgICB+R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKCk7CiAKKyAgICAvLyBHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJCYXNlIG92ZXJyaWRlcy4KKyAgICBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IGJvb2wgY29weVRleHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5ZXImLCBQbGF0Zm9ybUdMT2JqZWN0
IHRleHR1cmUsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sIGZsaXBZKSBmaW5hbDsKICNlbmRpZgorI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRp
YVNhbXBsZSgpIGZpbmFsOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYp
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
QU5HTEUuY3BwCmluZGV4IDA4NTM5YTdkOTI5ODExNDVkYzA2MDAxYjU3NGNhOGM5YTcxZjg5NTUu
LjE0Nzg3YjViNzA4Y2U3OTI1OTAzZGE1YjdiY2EzOTZmOGYyM2U2NWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXJBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcApAQCAtMzEs
NiArMzEsOCBAQAogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCiAjaW5jbHVkZSAiQU5HTEVV
dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIgogCiAjaWYgVVNFKE5JQ09TSUEpCiAjaW5j
bHVkZSAiTmljb3NpYUdDR0xBTkdMRUxheWVyLmgiCkBAIC00MCw3ICs0MiwxMDUgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKK0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQor
eworI2lmIEVOQUJMRShXRUJHTDIpCisgICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0ZXMud2Vi
R0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CisjZW5k
aWYKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsKKyNlbHNlCisgICAgbV90ZXhtYXBMYXllciA9
IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7CisjZW5k
aWYKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Cisg
ICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hh
bmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KKworICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKKyAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJl
bmRlciBpbnRvLgorICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICBnbDo6
QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFyYW1l
dGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Cisg
ICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
Z2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOworCisgICAgLy8gQ3JlYXRlIGFuIEZC
Ty4KKyAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Cisg
ICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fY29tcG9zaXRvclRleHR1cmUpOwor
ICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGds
OjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKKworICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0
dXJlKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdl
dCwgMCk7CisjZW5kaWYKKworICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICBB
U1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAg
IGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3
RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgICAgICBn
bDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAg
ICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9mYm87CisgICAgICAg
IGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAg
IGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQor
CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdM
QU5HTEU6On5HcmFwaGljc0NvbnRleHRHTEFOR0xFKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOworICAg
IGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQo
c3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgZ2w6OkRlbGV0
ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVz
KDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgYXV0byBhdHRyaWJ1dGVz
ID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykg
eworICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRl
cHRoKQorICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8
fCBhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikK
KyAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgfQorICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZt
X2ludGVybWVkaWF0ZVRleHR1cmUpOworI2VuZGlmCit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtRGlzcGxheSgpIGNv
bnN0CiB7CiAjaWYgVVNFKE5JQ09TSUEpCiAgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0
Zm9ybURpc3BsYXkoKTsKQEAgLTQ5LDcgKzE0OSw3IEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25z
CiAjZW5kaWYKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGxhdGZvcm1Db25maWcoKSBjb25zdAorUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTENvbmZpZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybUNvbmZpZygpIGNv
bnN0CiB7CiAjaWYgVVNFKE5JQ09TSUEpCiAgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0
Zm9ybUNvbmZpZygpOwpAQCAtNTgsNyArMTU4LDI4IEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0xDb25maWcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QK
ICNlbmRpZgogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4
dEN1cnJlbnQoKQoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25pY29zaWFMYXll
ci0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjZWxzZQorICAgIHJldHVybiBtX3RleG1hcExheWVy
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNoZWNrR1BVU3RhdHVzKCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQoreworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnByZXBhcmVGb3JEaXNwbGF5KCkKK3sKK30KKworYm9vbCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogewogICAgIGF1
dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogICAgIGNvbnN0IGF1dG8gc2l6ZSA9IGdl
dEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7CkBAIC04Miw3ICsyMDMsNyBAQCBib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJl
bGVhc2VUaHJlYWRSZXNvdXJjZXMoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0
Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9y
bUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwCmluZGV4IGY0NGM3YTA5MzRhYTBiMmUzMjRh
YjM4MzhiODg4ZGJkMTA3YjBhYzcuLmVkNmI5Y2UyZTcxNTEyZWFmYWM4YTg1M2YwMDIzZDZmZTNj
MzQ3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIu
Y3BwCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCitUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3Jt
TGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXImIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKIHsKICAgICBh
dXRvIHNoYXJpbmdDb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29t
cG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oCmluZGV4IGM3NGU3NTU0MjFl
MGMxNGQ2NzE3YmRmOWIwNjNhNDdkODg2NGYyY2QuLjczYzY1MGYwYWQxOGU0M2ViYWYyZWUwYTc3
OGY5NmIyNWY3YmI2NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9y
bUxheWVyLmgKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQ
cm92aWRlci5oIgpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5OwogY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyIDogcHVibGlj
IFBsYXRmb3JtTGF5ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCYpOworICAgIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRH
TFRleHR1cmVNYXBwZXImKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3Jt
TGF5ZXIoKTsKIAogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC01MCw3ICs1MCw3
IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMJiBtX2NvbnRleHQ7CisgICAgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyJiBtX2Nv
bnRleHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gbV9nbENvbnRleHQ7CiAK
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJl
Y3QyRC5jcHAKaW5kZXggMTIxNTBiMWQ1MGU1YmM4OTM3NGVhYTgxMWUyMzJiM2NjNTBmMzE1MS4u
M2I0Yjc1ODAyN2Y2OTY0ZTAwOWViMmU1NzIwZDRhM2MxYmNjZWRiNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0
MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRHTERpcmVjdDJELmNwcApAQCAtNDgsNyArNDgsNyBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgaQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25z
dCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xHTDo6cGFpbnRUb0NhbnZh
cyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiB7CiAgICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVNpemUuaXNFbXB0eSgpIHx8IGNhbnZh
c1NpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KaW5kZXggOTU0NGI1MWMyNzhkZjU2OWVh
NGFiMGJmZWY3ZWY3NDRhYzUyYzczNS4uNmQ3NzA3ZDQwYzMyZjI4NDI5YzNkMzI0NTE1YTVjYzY5
Nzc2MWJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJD
b3JlVGhyZWFkLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29y
ZVRocmVhZC5tbQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW1wb3J0ICJDb21tb25WTS5oIgogI2lt
cG9ydCAiRmxvYXRpbmdQb2ludEVudmlyb25tZW50LmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgogI2ltcG9y
dCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW1w
b3J0ICJUaHJlYWRHbG9iYWxEYXRhLmgiCkBAIC03NywxMyArNzcsMTMgQEAgdm9pZCBSZWxlYXNl
V2ViVGhyZWFkR2xvYmFsU3RhdGUoKQogICAgIC8vIEluIHNpbmdsZS10aHJlYWRlZCBlbnZpcm9u
bWVudHMgd2UgZG8gbm90IG5lZWQgdG8gdW5zZXQgdGhlIGNvbnRleHQsIGFzIHRoZXJlIHNob3Vs
ZCBub3QgYmUgYWNjZXNzIGZyb20KICAgICAvLyBtdWx0aXBsZSB0aHJlYWRzLgogICAgIEFTU0VS
VChXZWJUaHJlYWRJc0VuYWJsZWQoKSk7Ci0gICAgdXNpbmcgUmVsZWFzZVRocmVhZFJlc291cmNl
QmVoYXZpb3IgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UmVsZWFzZVRocmVh
ZFJlc291cmNlQmVoYXZpb3I7CisgICAgdXNpbmcgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZp
b3IgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpSZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VCZWhhdmlvcjsKICAgICAvLyBGb3Igd2ViIHRocmVhZCwganVzdCByZWxlYXNlIHRoZSBjb250
ZXh0IGFzIHdlIGtub3cgd2Ugd2lsbCBzZWUgY2FsbHMgdG8gaXQgYWdhaW4uCiAgICAgLy8gRm9y
IG5vbi13ZWIgdGhyZWFkcywgZS5nLiB0aGlyZC1wYXJ0eSBjbGllbnQgdGhyZWFkcywgd2UgZG9u
J3Qga25vdyBpZiB3ZSBldmVyIHNlZSBhbm90aGVyIGNhbGwgZnJvbSB0aGUKICAgICAvLyB0aHJl
YWQsIHNvIHdlIGFsc28gcmVsZWFzZSB0aGUgdGhyZWFkIHJlc291cmNlcy4KICAgICBSZWxlYXNl
VGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNlQmVoYXZpb3IgPQogICAgICAgICBXZWJUaHJl
YWRJc0N1cnJlbnQoKSA/IFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpSZWxlYXNlQ3Vy
cmVudENvbnRleHQgOiBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6UmVsZWFzZVRocmVh
ZFJlc291cmNlczsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFz
ZVRocmVhZFJlc291cmNlcyhyZWxlYXNlQmVoYXZpb3IpOworICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMocmVsZWFzZUJlaGF2aW9yKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKaW5kZXggYWM5NTk1MjBhMmUzZGZhZDlm
Y2Q4MmIzOTJmMTBhOWE1YTYwNDg0MC4uODRiMmU2ODQ1ZDA3NDljZGFhMWU3OGI4NTMwZDhmOGVh
NWEwZTA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC0yMzYsNyArMjM2LDcgQEAg
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZm
ZXIoc3RkOjpvcHRpb25hbDxXZWJDb3IKICAgICAgICAgICAgIC8vIEhlcmUgd2UgZG8gbm90IHRy
eSB0byBwbGF5IGJhY2sgcGVuZGluZyBjb21tYW5kcyBmb3IgaW1hZ2VCdWZmZXIuIEN1cnJlbnRs
eSB0aGlzIGNhbGwgaXMgb25seSBtYWRlIGZvciBlbXB0eQogICAgICAgICAgICAgLy8gaW1hZ2Ug
YnVmZmVycyBhbmQgdGhlcmUncyBubyBnb29kIHdheSB0byBhZGQgZGlzcGxheSBsaXN0cy4KICAg
ICAgICAgICAgIGlmIChwaXhlbEJ1ZmZlcikKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb250ZXh0QXR0cmlidXRlcywgV1RGTW92ZSgqcGl4
ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50VG9DYW52YXMo
Y29udGV4dEF0dHJpYnV0ZXMsIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXItPmJh
Y2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuY2xlYXJSZWN0KHsgSW50UG9p
bnQoKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkgfSk7CiAgICAgICAgICAgICAvLyBVbmZv
cnR1bmF0ZWx5ICJmbHVzaCIgaW1wbGVtZW50YXRpb24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCBvdmVybG9hZHMgb3JkZXJpbmcgYW5kIGVmZmVjdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJl
bmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCmluZGV4IDVhNmNlNjVlNzQ0N2QyNGUxZTc3MzYw
ZjJkOGNmZTY0ZWE4OGIzMmEuLjBkYTdiOTVkMTRlOWFkZmNkZDM2NjkzOTkzM2Q4MDBmMDBiZjhm
YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRX
ZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3Bw
CkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5o
IgogI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dEdMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvU2Vj
b25kcy5oPgogCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNv
dXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXMoKQogICAgIGlmIChzX3Jl
cXVlc3RzKQogICAgICAgICByZXR1cm47CiAgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xTdHJl
YW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbXSB7Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6VGVybWluYXRlQW5k
UmVsZWFzZVRocmVhZFJlc291cmNlcyk7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6OlRlcm1pbmF0ZUFuZFJlbGVh
c2VUaHJlYWRSZXNvdXJjZXMpOwogICAgIH0pOwogfQogCg==
</data>
<flag name="commit-queue"
          id="470543"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445385</attachid>
            <date>2021-11-29 23:21:31 -0800</date>
            <delta_ts>2021-11-30 00:07:11 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211130092128.patch</filename>
            <type>text/plain</type>
            <size>577169</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5hMjc3NmJmMzcwMzNkNDc5NGRjNTk0YTJlNDdlZjNkNmNk
ZmI4ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MDUsNiArMTQwNSw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0FOR0xFSGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGls
aXRpZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4
MDExODYuLjE1ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
N2I2ZDU2MTQ2OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVj
MmQ1MzE4YWIzOTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEz
Niw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvaXNvL0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09WVFRDdWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTky
OTQ5ODk1MjBjMjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVy
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlNGQ5ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJl
ZTAyNmE2YTlkMTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBA
CiAJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAv
KiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAq
LzsgfTsKIAkJN0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRl
eHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYw
OTRERDI3MEM0NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAv
KiBBTkdMRVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJm
b3JtYW5jZUdQVVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFu
Y2VHUFVSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIz
MDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRl
eHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVE
Mjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYw
Q0UgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0No
ZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAy
MTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBH
cmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVG
MjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBB
MThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEw
MzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFB
QyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xDVkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ix
NjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4
MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1
Nyw4IEBACiAJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhD
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCOTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAw
NjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0
QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJ
CTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJ
CQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJ
CQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
ICovLAorCQkJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmggKi8sCiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xF
U2V0dGluZy5jcHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFy
eUFOR0xFU2V0dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3
QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgg
Ki8sCiAJCQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAw
MDA2MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2
OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBA
QAogCQkJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJ
CTdCOEVENUVGMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEw
MzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdC
MTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICov
LAotCQkJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCAqLywKKwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8q
IEltYWdlUm90YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdG
RjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4
MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0
MjYyLDE2IEBACiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4
dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3Jh
cGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3
MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdCOTVDRkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIx
MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAv
KiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4
MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0
MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5
RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGlj
c0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5
MTVmYTVmNzRkYzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2
MzQ1NTlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8g
UmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRh
KEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25l
ZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50
UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGlu
dCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0R0xTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNi
NGQ3ZTljZWUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBH
Q0dMdWludCBib3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVu
aXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4
dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwg
R0NHTGVudW0+LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJh
aXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5k
VGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0K
KyAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91
bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0
dXJlLCBHQ0dMZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0
KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIElu
dEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1
aW50Pj47CisgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYw
ZmI1ZWUxYWMzOTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2
NDBmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNp
bmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dM
QU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
KQorRXh0ZW5zaW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUqIGNvbnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhm
YWxzZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5k
ZXggMGE2MWVmYzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRi
OWY2MTVjM2IzYTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0z
MiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMu
Ci0gICAgZXhwbGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
KTsKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVu
c2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRl
bnNpb25zR0xBTkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4
ICs2NCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRl
bnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAg
Ly8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFj
ayB0byBHcmFwaGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUq
IG1fY29udGV4dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0
aW5nLXBvaW50IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAg
ICBib29sIG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBk
ZmEyYjdhNTA5Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmgiCiAKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJl
c3Npb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFW
Rk9VTkRBVElPTikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBk
ZWZpbml0aW9uIHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAg
LTc2LDggKzcxLDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpCiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEp
CiAgICAgICAgIEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3Jt
Q29uZmlnKCksIEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQor
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBz
d2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyAr
OTksNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2lu
Z1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1Rh
cmdldCkgewogICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZv
ckRyYXdpbmdUYXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJl
aGF2aW9yIHJlbGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNl
QmVoYXZpb3IpCiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAg
LTE2MSw3ICsxNTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xf
UmVsZWFzZVRocmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFp
bnRSZXN1bHRzKCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpA
QCAtMTg3LDE0ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBw
aXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1
dGVzKCkKIHsKICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygp
LmFscGhhID8gR0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11
c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hE
ZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChH
THVpbnQgaW50ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3Bl
ZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAg
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+
IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBnbDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwg
bnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBw
cmVjaXNpb25UeXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lz
aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48
R0NHTGludCwgMj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xl
bnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNo
YWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAg
ICAgICAgIGludGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihn
ZXRFeHRlbnNpb25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZz
ZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQg
eW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0wKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwg
R0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewogICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VT
aXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNl
dCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQg
eW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBH
Q0dMY2xhbXBmIHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGds
OjpEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oekZhcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRo
KEdDR0xjbGFtcGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVw
dGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVw
dGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lv
bnMpCiAgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+
KHRoaXMpOwogICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpy
ZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0
YS5kYXRhLCBmYWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRu
UGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJ
bXBsKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBs
ZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0
YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMs
IEdDR0xzaXplaSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZm
ZXJPYmplY3QpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYK
IH0KIAotLy8gVGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZv
bGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygp
OwogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZv
cm1zIGFyZSBub3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQog
ICAgICAgICByZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFT
U0VSVCghbV9sYXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVS
ZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5i
b3VuZFJlYWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpA
QCAtNTg3LDcgKzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhl
bHNGb3JQYWludFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBt
X2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1
cm47CkBAIC02NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0
dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTY4Miw3ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVU
ZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNT
RVJUKHNoYWRlcik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8K
ICAgICBnbDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC03MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0CiB9CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGds
OjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xj
bGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBn
cmVlbiwgR0NHTGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVu
dW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dM
ZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dM
ZW51bSBtb2RlQWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9
CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShH
Q0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xl
bnVtIGRzdEFscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBh
cmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEs
IEdDR0xlbnVtIGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJH
QgogICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0
ciBzaXplLCBHQ0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRh
dGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xT
cGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdD
R0x2b2lkPiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0
YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciBy
ZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVh
ZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NH
TGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0
aXZSb2J1c3RBTkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXpl
LCBudWxscHRyLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODQ4LDcgKzg0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
IGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgs
IGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRl
ciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAg
Z2w6OlRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6
ZSwgcGl4ZWxzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQq
PihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50
IHhvZmYKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIHBpeGVscy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50
IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4
OTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
aW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+
KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5
MDcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1
YkltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZz
ZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0Qo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBw
bmFtZSkKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVV
bmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4m
IHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4g
cmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpA
QCAtOTI5LDcgKzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwpAQCAtOTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6
OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNs
YW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTk0NSw3ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNv
bG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVh
cihHQ0dMYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05
NjIsNyArOTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KEdDR0xpbnQgcykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdy
ZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwg
R0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNv
bXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEw
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEw
MzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAg
ICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVu
YyhmdW5jKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdD
R0xib29sZWFuIGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhH
Q0dMYm9vbGVhbiBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxh
Zyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAg
QVNTRVJUKHNoYWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMTwogICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAg
IGdsOjpEaXNhYmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODks
NyArMTA4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5
cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBm
aXJzdCwgR0NHTHNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xlCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2Fw
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0NHTHVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50
IGluZGV4KQogICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1
c2goKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExMzksNyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNo
KCkKICAgICBnbDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBs
ZXZlbCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMTU2LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE2NCw3ICsxMTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3Miw3ICsxMTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVN
aXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9W
QUxVRSk7CkBAIC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwg
aW5mbyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1J
bXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDRwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJv
Z3JhbSwgaW5kZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4
Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZv
cm1HTE9iamVjdCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwg
bWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBp
ZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAg
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0
cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJu
IG1vdmVkQW5FcnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEVycm9yKCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsK
ICAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCkBAIC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0xMzA3LDcgKzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0
cmluZyhHQ0dMZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1v
ZGUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTMxNSw3ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2Rl
KTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKICAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0xMzM0LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXAp
OwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZl
cihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQog
ewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEz
NDUsNyArMTMzOSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0Zy
YW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJ
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpA
QCAtMTM1Niw3ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1By
b2dyYW0ocHJvZ3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgcmVuZGVyYnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBy
ZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
QEAgLTEzODksNyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNU
ZXh0dXJlKHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0
aCh3aWR0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQgcGFyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFt
KQogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9h
dCB1bml0cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dM
ZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYg
dmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAs
NyArMTQyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdl
KEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVy
YWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
Y2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0x
NDUxLDcgKzE0NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJT
b3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0g
ZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBt
YXNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE0NTksNyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywg
R0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGlu
dCByZWYsIEdDR0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLAogICAgIGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQ3NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE1hc2soR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0
ZShmYWNlLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdD
R0xlbnVtCiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShm
YWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xm
bG9hdCB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsx
NTAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2
YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyAr
MTUxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbAogICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAg
ICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0y
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsK
ICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAog
ICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2
MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXpl
ICUgMykpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyAr
MTU3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlm
b3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJh
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50
IHYxCiAgICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
IHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bgogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXku
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCwgR0NHTGludCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAzLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xp
bnQgdjIsIEdDR0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBH
Q0dMaW50IHYzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQog
ewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
CiAgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1N
YXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAg
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAg
ICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MTY3NSw3ICsxNjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRl
eEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAg
ICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZgogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxv
YXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBn
bDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgND4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cK
ICAgICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRl
eCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBH
Q0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNp
emUsCiAgICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1h
bGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTc3Myw3ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVy
dGV4QXR0cmliSVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
CiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE3OTQsNyArMTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTgwNiw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0
ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTE4MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGds
OjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4MjgsNyArMTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJv
b2xlYW4+CiAgICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNp
emUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0g
MDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAg
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xF
KHBuYW1lLCB2YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdD
R0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBu
YW1lKQorR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dM
ZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgpCiB7CiAgICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYs
NyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTg5MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBj
b25zdCBTdHJpbmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAg
VU5VU0VEX1BBUkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sCiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogCkBAIC0xOTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmko
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChz
aGFkZXIpOwogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTcz
LDEyICsxOTY3LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVk
SW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxh
dGZvcm1HTE9iamVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAg
IEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTk4Nyw3ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlv
biwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9n
cmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3
ICsyMDE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVp
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5k
YXRhKTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogCkBAIC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAg
IHJldHVybiBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CiB9CiAKLUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQg
aW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5k
ZXgsIEdDR0wKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAg
IHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICBy
ZXR1cm4gbzsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlUHJvZ3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVByb2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVh
dGVQcm9ncmFtKCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
ICAgIHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIw
ODMsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
aGFkZXIoR0NHTGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9
PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURF
Uik7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRleHR1cmUoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVh
dGVUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRl
bGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAg
ICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6
RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVy
KQogICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6
OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2
MSw3ICsyMTU1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LnJlbW92ZUFsbCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQg
dG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRv
CiAgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0
RXJyb3Igd2lsbCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50
aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zm9yY2VDb250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNl
Q29udGV4dExvc3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNw
YXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIy
MjMsNyArMjIxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0
ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIy
Niw3IEBAIEdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJ
bmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3Jt
QmxvY2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yMjUyLDcgKzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTAogCiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0
dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGds
OjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6
OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRRdWVyeU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogCiAvLyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVl
ZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5z
Zm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAg
ICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVk
YmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0
IHRyYW5zZm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xP
YmplY3QgdHJhbnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9y
bUZlZWRiYWNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1G
ZWVkYmFjaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MzM0LDcgKzIzMjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNm
b3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJh
bnNmb3JtRmVlZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1G
ZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2Rl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjM1MCw3ICsyMzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dM
ZW51bSBidWZmZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyhwcm9ncmFtLCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3Mu
ZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0g
MDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAg
Z2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZT
aXplKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBp
bmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsCiAgICAgZ2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNy
Y1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50
IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dM
Yml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNDAzLDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpC
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NH
TGludCBsYXllcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0
dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVM
YXllcih0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0
YXJnZXQsIGF0dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVi
dWZmZXIodGFyZ2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRC
dWZmZXIoR0NHTGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNy
Yyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlclRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIC0xOwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMK
ICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yNDc2LDcgKzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlm
b3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSwgR0NHTHVpbnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
NDg0LDcgKzI0NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3Jt
M3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYw
LCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dQogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gMiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCgh
KGRhdGEuYnVmU2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MjUxOCw3ICsyNTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9y
bTN1aXYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1CiAgICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSA2KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyAr
MjUzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgy
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgz
eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlv
biwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZT
aXplIC8gOCwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xl
YW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAg
ICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJh
bnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQo
IShkYXRhLmJ1ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yNTcyLDcgKzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlm
b3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRh
dGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDEyKSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyAr
MjU3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dM
dWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShp
bmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+
IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyAr
MjU5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0
aXYoaW5kZXgsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQg
eSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwg
R0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4
LCBHQ0dMdQogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMu
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1l
bnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50
IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcK
ICAgICBnbDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3Qg
R0NHTGVudW0+IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6
OkRyYXdCdWZmZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIs
IGRyYXdidWZmZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZh
bHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZm
ZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRo
LCBHQ0dMaW50IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsCiAgICAgZ2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3Rl
bmNpbCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
ICAgICBnbDo6RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJu
IGdsOjpJc1F1ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVl
KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
U2FtcGxlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0
ZVNhbXBsZXIoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAg
ICBnbDo6RGVsZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIp
CiAgICAgcmV0dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcy
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJp
KHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAK
LUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NH
TGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dM
c3luYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9u
LCBHQ0dMYml0ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZp
ZWxkIGZsYQogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQog
Ci1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5
bmMpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMg
c3luYykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMo
c3luYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NH
THN5bmMgc3luYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dM
c3luYyBzeW5jKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xz
eW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywg
R0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4
OSw3ICsyNzgzLDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdh
aXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNs
aWVudFdhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdz
LCBHQ0dMaW50NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5
bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
Nzk3LDcgKzI3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhH
Q0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3lu
YyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBw
bmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1G
ZWVkYmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVl
ZGJhY2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVk
YmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgyMyw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgzMSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6
QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0K
IAotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5p
Zm9ybU5hbWVzKQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRV
bmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB1bmlmb3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBw
YXJhbXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJs
b2NraXZSb2J1c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFt
cy5idWZTaXplLCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xzaXplaSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRp
RHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZp
cnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjg1OSw3ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVs
dGlEcmF3QXJyYXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291
bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJz
dHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBt
b2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBH
Q0dMc2l6ZWkgZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTCiAgICAgZ2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5k
YXRhLCBjb3VudHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
ODgwLDcgKzI4NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdF
bGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURy
YXdFbGVtZW50c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCks
IGRyYXdjb3VudCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9m
ZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3
Y291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjg5Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVs
dGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6
TXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwg
cG9pbnRlcnMuZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQog
ewogICAgIHNpemVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVD
b21wbGV0aW9uRmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKQEAgLTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVs
YXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVk
RXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1
cmUpIHsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29t
cGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVm
ZmVyKSwgaW1hZ2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RG
TW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZl
ci5jb250ZXh0KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAg
ICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRp
cGx5aW5nLCB3aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byBy
ZXN1bHRzID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1
bHRzICYmICFyZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1
bHRzLT5mb3JtYXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0
cy0+Zm9ybWF0KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAg
Ly8gRklYTUU6IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJv
d0J5dGVzIGFuZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXpl
ID0gcmVzdWx0cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6
ZS53aWR0aCgpICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRh
dGEoKTsKKyAgICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAx
KSAqIHJvd1N0cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChu
ZXcgdWludDhfdFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9w
ICs9IHJvd1N0cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5
KHRlbXAuZ2V0KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0
b20sIHRvcCwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCks
IHJvd1N0cmlkZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHNGb3JQYWludGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRlMzBiY2JjNDc3NDViYjhiNDIxNTI3YmZkMzQ5YmFkNjc3YmQwNjcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29z
aWEgeworY2xhc3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBI
b3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNz
IFBpeGVsQnVmZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBo
aWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7Cisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
OworICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGlj
IEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0
KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0
KTsKKyAgICBlbnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAg
ICAgLy8gUmVsZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRl
eHQsCisgICAgICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRl
LiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisg
ICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNh
bXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAg
dm9pZCBwcmVwYXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlv
biB3aXRob3V0IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAg
aW50IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2lu
ZyB0aHJvdWdoIEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdM
T2JqZWN0KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dz
IHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkg
ZmluYWw7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRp
b24oUGxhdGZvcm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkg
ZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCkgZmluYWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVu
ZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUs
IEdDR0xjbGFtcGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51
bSBtb2RlKSBmaW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBt
b2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdD
R0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRG
dW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNy
Y0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAg
dm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEsIEdDR0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEpIGZpbmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVu
dW0gdGFyZ2V0KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4s
IEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVh
ckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdD
R0xpbnQgcykgZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dM
Ym9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFs
OworICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0g
bW9kZSkgZmluYWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7Cisg
ICAgdm9pZCBkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0
aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9p
ZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7
CisgICAgdm9pZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0Fy
cmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFs
OworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxl
KEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lk
IGZsdXNoKCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dM
ZW51bSB0YXJnZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBi
b29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7Cisg
ICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSog
Y291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmli
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAg
ICB2b2lkIGdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4g
dmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZp
bmFsOworICAgIHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxv
YXQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBw
bmFtZSkgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5n
IGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJp
KFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0
U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5h
bDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIFN0cmluZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0
IGdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CisgICAgR0NHTGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7
CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRV
bmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTHVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdD
R0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBt
b2RlKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBm
aW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAg
IEdDR0xib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVh
biBpc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgo
R0NHTGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qp
IGZpbmFsOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pIGZpbmFsOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCByZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUs
IEdDR0xib29sZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAg
IHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFs
OworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1
aW50IG1hc2spIGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7Cisg
ICAgdm9pZCBzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAg
dm9pZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAg
dm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwg
R0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVs
cykgZmluYWw7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
aW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgp
IGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gdikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGludCB4LCBHQ0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2
b2lkIHVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJv
Z3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NH
THVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NH
TGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBH
Q0dMZmxvYXQgeikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHks
IEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmlu
YWw7CisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdD
R0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
c29yKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmlu
YWw7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICBHQ0dMYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZv
aWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVU
YXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NH
THNpemVpcHRyKSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdD
R0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAs
IEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51
bSBmaWx0ZXIpIGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0
ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0
dGFjaG1lbnRzKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7
CisgICAgdm9pZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXpl
aSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5h
bDsKKyAgICB2b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9p
ZCB0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNl
dCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRy
IG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dM
aW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNz
ZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmlu
YWw7CisgICAgR0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZp
bmFsOworICAgIHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3Vp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAg
ICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCB1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwg
R0NHTGludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBH
Q0dMdWludCB6LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2
KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1
aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdi
dWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xm
bG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVF1ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2Jq
ZWN0IHF1ZXJ5KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmpl
Y3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0g
dGFyZ2V0KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0
dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2Ft
cGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlz
U2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNh
bXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAg
ICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRl
cmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBh
cmFtKSBmaW5hbDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRT
YW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
KSBmaW5hbDsKKyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dM
Yml0ZmllbGQgZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykg
ZmluYWw7CisgICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51
bSBjbGllbnRXYWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0
IHRpbWVvdXQpIGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVs
ZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2ko
R0NHTHN5bmMsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1Ry
YW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmlu
ZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkg
ZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2
ZU1vZGUpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAg
ICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lk
IHBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9y
bUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAg
dm9pZCBiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZp
bmFsOworICAgIFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsK
KyAgICBWZWN0b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsK
KyAgICBTdHJpbmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9p
ZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykg
ZmluYWw7CisgICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRl
OworICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBtdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRz
LCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZUJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZm
ZXIoKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsK
KyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdl
dEV4dGVuc2lvbnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsK
KyAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZp
bmFsOworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisgICAgdm9p
ZCBwcmVwYXJlRm9yRGlzcGxheSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBmb3JjZUNvbnRleHRM
b3N0KCk7CisgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOworICAgIHZvaWQgZGlzcGF0Y2hDb250
ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CisjZW5kaWYK
KyAgICB1bnNpZ25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKTsKKworICAgIGNvbnN0
ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVG
QVVMVF9ESVNQTEFZOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNvbnN0ZXhwciBzdGF0aWMg
RUdMTmF0aXZlRGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZl
RGlzcGxheVR5cGUsIC0xKTsKKyAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlU
eXBlIGhpZ2hQZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlw
ZSwgLTIpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xF
KEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxs
IHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAg
ICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5z
aW9uc0dMIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50
IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKKyAgICAv
LyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGlj
aCBjb3VsZCBvcgorICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBh
YmlsaXRpZXMgb2YgdGhlIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQg
dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKTsKKyAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgdm9pZCByZWFkblBp
eGVsc0ltcGwoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpKiBsZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dz
LCBHQ0dMdm9pZCogZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCk7CisKKyAg
ICAvLyBEaWQgdGhlIG1vc3QgcmVjZW50IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUg
aW4gYW4gYWNjZXB0YWJsZSBzdGF0ZT8KKyAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsK
KworICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcHJlcGFy
ZVRleHR1cmVJbXBsKCk7CisgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsKKyAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3Rl
bmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CisgICAg
c3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXks
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOworI2VuZGlmCisgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgorICAgIGJvb2wgd2Fp
dEFuZFVwZGF0ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gUGxh
dGZvcm0gc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICBzdGF0
aWMgdm9pZCBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKKworICAgIEdDR0x1aW50
IG1fdGV4dHVyZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKKyAgICBHQ0dMdWlu
dCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsQ29s
b3JGb3JtYXQgeyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCB7IDAgfTsKKyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OworICAgIEdDR0x1
aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OworICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdp
bmdCdWZmZXI6dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCisgICAgR0NHTHVpbnQgbV9wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIHsgMCB9OworICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVy
ZSB3aGVuIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KKyAgICBH
Q0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKKyAgICAvLyBRdWVyaWVk
IGF0IGRpc3BsYXkgc3RhcnR1cC4KKyAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRh
cmdldCB7IC0xIH07CisgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigp
LgorICAgIExpc3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKyAgICBib29s
IG1faXNGb3JXZWJHTDIgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3Vu
dCB7IDAgfTsKKyAgICBib29sIG1fZmFpbE5leHRTdGF0dXNDaGVjayB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3VzZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKKyAgICBzaXplX3QgbV9v
bGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKKyAgICBTY29wZWRHTEZlbmNlIG1fZnJh
bWVDb21wbGV0aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOworICAgIEdyYXBoaWNzQ29udGV4
dEdMU3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+
IG1fZXh0ZW5zaW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIEdyYXBoaWNzQ29udGV4
dEdMSU9TdXJmYWNlU3dhcENoYWluIG1fc3dhcENoYWluOworICAgIEVHTERpc3BsYXkgbV9kaXNw
bGF5T2JqIHsgbnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0T2JqIHsgbnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcg
bV9jb25maWdPYmogeyBudWxscHRyIH07CisgICAgLy8gQmFja2luZyBzdG9yZSBmb3IgdGhlIHRo
ZSBidWZmZXIgd2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5LgorICAgIC8vIFdo
ZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3aW5nIGJ1
ZmZlciBiYWNraW5nIHN0b3JlLgorICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09
IHRydWUsIHRoaXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7CisgICAgdm9p
ZCogbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24g
eyBmYWxzZSB9OworICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9oaWdoUGVy
Zm9ybWFuY2VHUFVSZXF1ZXN0OworI2VuZGlmCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorICAgIEdDR0x1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisgICAgR0NHTHVpbnQg
bV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsgMCB9OworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisg
ICAgc3RkOjp1bmlxdWVfcHRyPE5pY29zaWE6OkdDR0xMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Cisj
ZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKKyNlbmRpZgorCisgICAgZnJpZW5k
IGNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOworI2lmIFVTRShOSUNPU0lBKQorICAgIGZyaWVuZCBj
bGFzcyBOaWNvc2lhOjpHQ0dMTGF5ZXI7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAg
ZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyNlbmRpZgorfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXggY2Nj
YjU3MjRhNGNkOTJmZjBiZjhlNzM4M2M1ZDlmZTY4OWQ3N2I4Ni4uNGQ1OWNiMTJjNWU0NDc1Mzdk
ZTBhZWUyMTBkZTAwMmNiZDc5ZmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5j
cHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0
ZXMsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50
VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0
QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVCghcGl4ZWxC
dWZmZXIuc2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAppbmRleCBmNzlmMjJlMzEzZWExMTczODljNWY0MDlkZDBmNDk0
YWUxNWFlYjkzLi5hZjRjMTdkNTFmYTU5ZjQ2ODhkZjQzOTY1MzUxOGY1Y2EwZGFhZjIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3Vy
Y2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50
U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBj
b25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAg
ICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFz
U2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKaW5kZXggMjU1NWZm
MDgzMjhlMzQ2OWNkN2E0YTI5N2RiZWY3OTBmNjMwNTI4OC4uZTQwOTVhMmIxOWUyNGQxZGI4MDlj
MTgyZjY0MzJiZGMwY2I3ODZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApAQCAt
MjcsMTIgKzI3LDE4IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIK
ICNpbmNsdWRlICJJT1N1cmZhY2UuaCIKIAorI2lmIEVOQUJMRShWSURFTykKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTsKK30KKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgeworY2xhc3MgV0VCQ09S
RV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRH
TEFOR0xFIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMQ29j
b2E+IGNyZWF0ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAg
fkdyYXBoaWNzQ29udGV4dEdMQ29jb2EoKTsKQEAgLTQ5LDE0ICs1NSwyNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwog
I2VuZGlmCiAKLSAgICAvLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBvdmVycmlkZXMuCisgICAg
Ly8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICBi
b29sIGNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgYm9vbCBmbGlwWSkgZmluYWw7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
R3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOworI2VuZGlmCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3Vs
dHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBo
aWNzQ29udGV4dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYp
OwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3
MmM3N2VjYjIxOWUzOS4uMDI5Y2MzZmFlNDdmODcwMjNjNWMzMDIyNWUwMjU5YTA0MWYwZDY2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5k
aWYKIAogI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxh
dGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJs
ZSgpID09IHRydWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJl
YWRlZCBtYW5uZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxz
ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1
dCBhbHdheXMgc2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIg
YW5kIG51bGxwdHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUqIGN1cnJlbnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGlj
dGFibGUoKQogewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxp
emVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAg
ICAgfQogCiAgICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNr
ZW5kLiIsIGF0dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRp
dmVEaXNwbGF5VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
ZmF1bHREaXNwbGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNl
TWV0YWwpIHsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9Q
TEFURk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0
YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAg
ICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0Vf
QU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9X
RVJfQU5HTEUpOwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpsb3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYg
KHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJl
ZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRl
cy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxh
eUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5h
dGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlz
cGxheTsKKyAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpoaWdoUGVyZm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFw
aGljc0NvbnRleHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xB
TkdMRShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVu
Y3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29h
IHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJz
KQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRy
cykKIHsKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVu
c2lvbik7CiAgICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0g
ICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRo
cm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkg
b24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3Rz
IGFyZSBub3Qgc2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVy
cywgc28KICAgICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0
bGluZy4gT3BlbkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21l
IHNvcnQgb2YgaW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAot
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIs
IHRoaXMpOworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
ICglcCkuIiwgdGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVu
dCgpKSB7CkBAIC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAh
PSB0aGlzKTsKICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9H
KFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlz
KTsKKyAgICBMT0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICgl
cCkuIiwgdGhpcyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgp
IGNvbnN0CkBAIC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6
OmlzVmFsaWQoKSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRm
b3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXND
aGVjaykgewogICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0
ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRT
dGF0dXMgPSAwOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0
VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIGlmICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUy
MCw3ICs1MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIGlmIChtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcg
KzUyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQoKQogICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5n
KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNr
aW5nKCkKIHsKICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0
eSgpKTsKICAgICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxs
b2NhdGluZyBhIG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVz
c3VyZS4KQEAgLTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAg
ICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBh
dXRvIGJhY2tpbmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoKQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShi
YWNraW5nKSwgcGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5n
LCB2b2lkKiBwYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCog
cGJ1ZmZlcikKIHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJp
bmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4
dHVyZVRhcmdldCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNU
QU5HTEVfQVJCKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtl
Q3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VS
RkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNo
bWVudFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwg
R0NHTHVpbnQgcGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewog
ICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19j
YXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2
NywyNCArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZh
Y2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1faXNGb3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNp
bXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsK
LSAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdl
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdl
cigpLmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJl
KSB7Ci0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JE
aXNwbGF5KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXko
KQogewogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0
LDE1ICs3MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRp
c3BsYXkoKQogCiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGlj
c0NvbnRleHRHTENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1f
Y3YuZ2V0KCk7CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHMoKQogewogICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVm
ZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIu
aGFuZGxlKQpAQCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxN
ZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvTWVkaWFTYW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFp
bi5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRp
c3BsYXlCdWZmZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZv
cm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3Jt
RwogfQogI2VuZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZp
ZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdP
Ymo7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxF
KFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRl
ICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSA8cGFsL3NwaS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi9TY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNp
bmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0
dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNp
emU7IgotICAgICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBp
bnQgdV9mbGlwWTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4o
KSIKLSAgICAieyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAx
LjApOyIKLSAgICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41
ICsgLjU7IgotICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFs
aXplZFBvc2l0aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2
X3lUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2
VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19Owot
Ci1zdGF0aWMgY29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
IHsKLSAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1
X3lUZXh0dXJlU2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29y
ZGluYXRlOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAg
InZvaWQgbWFpbigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9z
aXRpb24sIDAsIDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bv
c2l0aW9uICogLjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAg
ICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIK
LSAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95
VGV4dHVyZVNpemU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXpl
ZFBvc2l0aW9uICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHBy
IGF1dG8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVu
aWZvcm0gc2FtcGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JN
YXRyaXg7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2
YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0g
ICAgInsiCi0gICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1
X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0
ZXh0dXJlMkQodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIg
ICAgeXV2LmEgPSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1h
dHJpeDsiCi0gICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdt
ZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3Jt
IHNhbXBsZXIyRFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1h
dHJpeDsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZh
cnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAg
ICAieyIKLSAgICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVj
dCh1X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2Ig
PSB0ZXh0dXJlMkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIK
LSAgICAiICAgIHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVf
Y29sb3JNYXRyaXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2Ugewot
ICAgIFVua25vd24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJh
bnNmZXJGdW5jdGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBr
SVRVX1JfNjAxXzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQ
M19ENjUsCi0gICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJh
bmdlRnJvbVBpeGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBp
eGVsRm9ybWF0KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4Ogot
ICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhB
VkUoQ09SRVZJREVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlm
Ci0gICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
X0FSR0IyMTAxMDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBD
YkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZ
cENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0
NFlwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NF
RF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxS
YW5nZTo6RnVsbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5r
bm93bjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5j
dGlvbkZyb21TdHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQot
ICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAg
ICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENG
RXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkp
Ci0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0g
ICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1Az
KCkgJiYgQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkK
LSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2Fu
TG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVW
aWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0
cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0
dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVy
RnVuY3Rpb25DVjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAg
ICAgR0xmbG9hdCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxv
YXQgY2I7Ci0gICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07
Ci0KLSAgICBjb25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZs
b2F0IGIpCi0gICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkK
LSAgICAgICAgOiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAg
IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xm
bG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0K
LX07Ci0KLXN0cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBibGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRD
b2xvciB3aGl0ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xv
ciByZWQgICAgIHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBn
cmVlbiAgIHswLCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVl
ICAgIHswLCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAg
IHswLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsx
LCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAx
LCAwfTsKLX07Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0
XVs0XTsKLQotICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNi
Q29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25z
dCBHTGZsb2F0KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0g
ICAgfQotCi0gICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9h
dENvbG9yJikgY29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4
KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZm
aWNpZW50KQotICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlD
YkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiAr
IEtnICogRyArIEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0g
ICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFs
dWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlz
IGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0
aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6
Ci0gICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAq
ICgxIC0gS2IpKSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtn
KSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8g
V2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBb
MTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEg
cmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZh
bHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFu
Z2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2Vm
ZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0
IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5m
IC8gMjE5LmY7Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVs
UmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlT
Y2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNy
U2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10g
PSAwOwotCi0gICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0g
PSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZm
aWNpZW50IC8gY2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZm
aWNpZW50KTsKLSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGlu
Z0ZhY3RvcjsKLSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBj
YkNvZWZmaWNpZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsK
LQotICAgIHJvd3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11b
Ml0gPSAwOwotICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5h
bCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4
XQotICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0
byBbMTYsIDI0MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7
ICsrcm93TnVtYmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAg
ICAgICAgYXV0byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAg
ICAgYXV0byYgeiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAg
ICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJh
bmdlOjpWaWRlbykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQot
Y29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxv
YXRDb2xvciYgY29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAg
ICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsg
cm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVsw
XSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAq
IGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJn
Yi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5i
ICsgcm93c1syXVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRv
UkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRy
YW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9
IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1h
dHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20g
dGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAg
Ly8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0
YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4x
MTRmLCAwLjI5OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxs
TWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAx
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwg
MCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
eWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRy
aWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2
IDIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJU
LjcwOS0yLTE5OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5Vmlk
ZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25z
dGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVs
bCwgMC4wNzIyLCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwg
MjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAg
IDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQs
IDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRh
LCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFn
ZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBm
dWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTks
ICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAg
ICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIu
NzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRo
ZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8v
IGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAu
MDU5MywgMC4yNjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAx
MjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxh
Y2sgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIw
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVu
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMx
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2Vu
dGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwg
MCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0g
ICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01Q
VEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVl
Lm9yZy9kb2N1bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXgg
c21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07
Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQw
TVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNN
UFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0
MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVs
bG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNv
bG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRl
MjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwg
IDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJl
ZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJT
TVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAx
LCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpj
eWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsK
LSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8s
IFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAg
ICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJh
bnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAg
IG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1h
dHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVu
Y3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlv
bkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMu
Z2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNW
OjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQo
KS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjpr
U01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQot
ICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQg
d2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxS
YW5nZTo6VW5rbm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0g
ICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBt
YXRyaWNlcy5nZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8g
QXNzdW1lIHVua25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRl
cmF0b3IgPT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmlj
ZXMuZ2V0KCkuZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7
Ci0KLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJl
dHVybiBpdGVyYXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4
dCkgfTsKLSAgICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rl
c3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFOjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmIG93bmVyKQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0
aWJsZSBjb250ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBk
b2VzIG5vdAotICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5Lgot
ICAgIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09O
VEVYVF9DTElFTlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAy
LAotICAgICAgICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUs
Ci0gICAgICAgIEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19F
TkFCTEVEX0FOR0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJ
TkRfR0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAg
ICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0
Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25m
aWcoKTsKLSAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5
LCBjb25maWcsIG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlm
IChjb250ZXh0ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAg
YXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRl
eHQpOwotICAgIH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQp
IHsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9y
ZWN0YW5nbGUiKTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3Rl
eHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBH
TF9OT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdM
aW50IHZlcnRleFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0g
ICAgR0xpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUik7Ci0gICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAg
IGF1dG8gcHJvZ3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyLCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4
U2hhZGVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAg
ICAgIGdsOjpEZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNl
IGFyZSB3cml0dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQg
dnNMZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5n
dGgoKSA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBH
TGludCBmc0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
MkQubGVuZ3RoKCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgo
KTsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBz
X3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUy
RCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4
dHVyZVJlY3RhbmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAm
dmVydGV4U2hhZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJh
Z21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBn
bDo6Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNo
YWRlcik7Ci0gICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2w6OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlz
IGNoZWNrZWQgYWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24g
YmVuZWZpdC4KLQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5C
dWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVs
ZXRlQnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0
aWNlc1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsK
LSAgICBnbDo6QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0
aWNlcywgR0xfU1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAg
ICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1
ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGlu
dCBzdGF0dXMgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFt
LCBHTF9MSU5LX1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMp
IHsKLSAgICAgICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZS
b2J1c3RBTkdMRSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAm
dnNTdGF0dXMpOwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRT
aGFkZXJpdlJvYnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwg
bnVsbHB0ciwgJmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFKCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIs
IHRoaXMsIHN0YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjb250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xl
YW51cC5yZWxlYXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBt
X2Rpc3BsYXkgPSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25m
aWcgPSBjb25maWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0g
ICAgbV9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7
Ci0gICAgbV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9u
KHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4
Iik7Ci0gICAgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRp
b24oeXV2UHJvZ3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2Nh
dGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXpl
Iik7Ci0gICAgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1M
b2NhdGlvbih5dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlv
bkF0dHJpYnV0ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJh
X3Bvc2l0aW9uIik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdo
aWxlIHRoZSBwcm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0o
eXV2UHJvZ3JhbSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRp
b25BdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQ
b3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAg
IGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2Us
IFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQy
MGYnIHBpeGVsIGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3Jt
YXRzLgotICAgIE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1h
dFR5cGUoaW1hZ2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVf
NDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShD
T1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVs
Rm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9S
YW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZv
cm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJl
ZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFz
dXJmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVk
ID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0Rmxp
cFkKLSAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1
cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7
Ci0gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRo
ZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhp
cyBpcyBhIG5vLW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2Nv
bnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXks
IG1fY29udGV4dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9
IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4
ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmlu
aXRpYWxpemVkIGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAv
LyBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xf
VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUs
IG51bGxwdHIpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0g
ICAgfSk7Ci0gICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0g
ICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBn
bDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0
YXR1cyA9IGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBp
ZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1
cmUuIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0
ZXh0dXJlcyBmb3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9T
dXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0
ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxh
bmVXaWR0aCA9IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRv
IHV2UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwot
Ci0gICAgR0xlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5U
ZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtl
U2NvcGVFeGl0KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1
dlRleHR1cmUpOwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsK
LSAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3Jl
OjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZp
ZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1
dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEp
OwotICAgIGlmICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2
SGFuZGxlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFu
ZGxlXSB7Ci0gICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNl
KGRpc3BsYXksIHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7
Ci0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNs
ZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4
dHVyZXMoMSwgJnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9
IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2Nv
bmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwg
R0xfUkVELCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJm
YWNlLCAwKTsKLSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBh
dXRvIHlIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwg
eUhhbmRsZV0gewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNw
bGF5LCB5SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBw
YXJhbWV0ZXJzLgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwg
MCk7Ci0gICAgZ2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0g
ICAgZ2w6OlVuaWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlw
WTo6WWVzID8gMSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYo
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWln
aHQpOwotCi0gICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxG
b3JtYXQpOwotICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9t
U3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50
KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBj
b2xvck1hdHJpeCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24o
cmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29s
b3JNYXRyaXhVbmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAg
ICAvLyBEbyB0aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5H
TEVTLCAwLCA2KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1
cmZhY2VTZWVkID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91
dHB1dFRleHR1cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1f
bGFzdEZsaXBZID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
QU5HTEUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQz
MDFmMTI1MWI3MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5o
IgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0v
LyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9m
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBp
bnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5H
TEUgQ29jb2EuCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUo
Q1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBGbGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4
dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RU
ZXh0dXJlU2VlZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmIG1fb3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9k
aXNwbGF5IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9j
b25maWcgeyBudWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIg
eyAwIH07Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAg
ICBHQ0dMaW50IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQg
bV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlw
WVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2Nh
dGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7
IC0xIH07Ci0gICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9
OwotCi0gICAgRmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2lu
dGVyPElPU3VyZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJm
YWNlU2VlZCB7IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dM
dWludCwgdW5zaWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVy
ZVNlZWQ7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBo
aWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJ
T04pCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckND
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVy
ZTJEIHsKKyAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVj
MiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7Igor
ICAgICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVD
b29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZvaWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFf
cG9zaXRpb24sIDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBh
X3Bvc2l0aW9uICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAi
ICAgICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55
OyIKKyAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIK
KyAgICAiICAgIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisg
ICAgIn0iX3MKK307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRl
eHR1cmVSZWN0YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAi
dW5pZm9ybSB2ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIg
dl95VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29y
ZGluYXRlOyIKKyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlv
biA9IHZlYzQoYV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQ
b3NpdGlvbiA9IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09
IDEpIgorICAgICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXpl
ZFBvc2l0aW9uLnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVk
UG9zaXRpb24gKiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5h
dGUgPSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9
OworCitjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0
dXJlOyIKKyAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3Jt
IG1hdDQgdV9jb2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRp
bmF0ZTsiCisgICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2
b2lkIG1haW4oKSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5y
ID0gdGV4dHVyZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAi
ICAgIHl1di5nYiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRl
KS5yZzsiCisgICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5
dXYgKiB1X2NvbG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBh
dXRvIHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsi
CisgICAgInVuaWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0g
bWF0NCB1X2NvbG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGlu
YXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZv
aWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIg
PSB0ZXh0dXJlMkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAg
ICAiICAgIHl1di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29v
cmRpbmF0ZSkucmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0Nv
bG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3Mg
UGl4ZWxSYW5nZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKwor
ZW51bSBjbGFzcyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9S
XzcwOV8yLAorICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtE
Q0lfUDMsCisgICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhl
bFJhbmdlIHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQorewor
ICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
NDQ0QVlwQ2JDcjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoK
KyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAg
IGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisg
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFu
Z2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVv
UmFuZ2U6CisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMp
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVv
UmFuZ2U6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVW
SURFT19DT01QUkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25D
ViB0cmFuc2ZlckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAg
aWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247
CisgICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9S
XzcwOV8yKSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8y
OworICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVf
Ul82MDFfNCkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFf
NDsKKyAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01Q
VEVfMjQwTV8xOTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRF
XzI0ME1fMTk5NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9EQ0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1h
dHJpeF9EQ0lfUDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1Az
OworICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1Az
X0Q2NSgpICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2
NSkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYg
KGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgp
ICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAp
KQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENv
bG9yIHsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0
IHI7CisgICAgICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAg
ICAgIH0gcmdiOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAg
ICAgICAgICAgR0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0g
eWNiY3I7CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBH
TGZsb2F0IGcsIEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7Cisg
ICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBH
TGZsb2F0IHNjYWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8g
c2NhbGUgfQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJz
KEdMZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVl
IDogLXZhbHVlOworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVx
dWFsVG8oY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4
RGVsdGEpOworICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25z
dGV4cHIgR0xmbG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHTGZsb2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR0xmbG9hdENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JN
YXRyaXggeworICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1h
dHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmlj
aWVudCk7CisKKyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRD
b2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4
cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JD
b2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAg
ICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhl
IGZvcm06CisgICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0g
KEIgLSBZKSAvICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAt
IEtyKSkKKyAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBp
biBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0g
MQorICAgIC8vCisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBh
bmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3Ip
KSAqIENyCisgICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkg
LSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3Ig
LyBLZykgKiBDcgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRl
byByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwg
YW5kIENiICYgQ3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0
aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFu
ZCBDciBhbGwgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9m
IDI1Ni4KKworICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0g
Y3JDb2VmZmljaWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4
ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2Nh
bGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIy
NC5mOworCisgICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0g
PSAwOworICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29l
ZmZpY2llbnQpOworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2Fs
aW5nRmFjdG9yOworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEg
LSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAg
cm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
ICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsK
KworICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2Jj
clNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJd
ID0gMDsKKyAgICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJv
d3NbM11bMV0gPSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOwor
CisgICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252
ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2Yg
dmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJv
d051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8m
IHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAg
ICAgYXV0byYgeSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAg
YXV0byYgdyA9IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Cisg
ICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0g
eCAqIDE2IC8gMjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1h
dHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEdMZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsg
cm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93
c1swXVszXSwKKyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAq
IGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAg
ICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5n
ICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0
YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1
bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0
aW9uKQoreworICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0
IFlDYkNyTWF0cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBt
YXRyaWNlczsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8v
IE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYw
MSByZXYgNCBzcGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1S
RUMtQlQuNjAxCisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRy
aXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIg
c3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4x
MTRmLCAwLjI5OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1
LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
ci42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUw
LCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fz
c2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1
LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAx
NzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFu
LCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21w
b25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBz
Oi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywg
MC4wNzIyLCAwLjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEu
NWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChy
NzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDEx
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAx
LjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisK
KyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNr
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJs
YWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41
ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIz
NywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBH
TGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBN
YXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4y
MDIwLTIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVD
LUJULjIwMjAKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0
cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwg
MC4wNTkzLCAwLjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4
ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQs
ICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpy
ZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAx
NiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxs
b3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsK
KworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwg
ICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAx
MSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAv
IDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgY3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJv
bSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAg
ICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNv
bnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJh
bmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1h
dHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEy
IH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYy
LCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAx
MTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Ymx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICog
R0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRh
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
Ojp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3Jl
ZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21w
dGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3
NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUg
MjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRp
c3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFj
ZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYw
MV80KSwgcjYwMVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShN
YXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQp
LCByNjAxRnVsbE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5
KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3
MDlWaWRlb01hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBp
eGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1
bGxNYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVv
TWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5n
ZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRy
aXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpW
aWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlk
ZW9NYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0
ME1GdWxsTWF0cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tl
ZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4K
KyAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdl
ID09IFBpeGVsUmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVs
bDsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5j
dGlvbnMgYXJlIHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQo
KSkKKyAgICAgICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1hdHJpY2VzLmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBH
cmFwaGljc0NvbnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRl
eHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBp
ZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9k
aXNwbGF5LCBtX2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJm1feXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZtX2ZyYW1lYnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2Nv
bnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYShHcmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3du
ZXIpCit7CisgICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0
ZSB3aXRoIG93bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5l
c3Mgb3IgV2ViR0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAg
IG93bmVyLm1faXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdM
X0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAg
IEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZB
TFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlV
TSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdM
RGlzcGxheSBkaXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmln
IGNvbmZpZyA9IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0
ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmos
IGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50
KGRpc3BsYXksIGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6bWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVz
dHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29s
IHVzZVRleHR1cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBH
TF9URVhUVVJFXzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlT
VCkKKyAgICBpZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVz
dEV4dGVuc2lvbkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAg
ICAgaWYgKGdsOjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNo
YWRlcihHTF9WRVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpD
cmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9
IGdsOjpDcmVhdGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAg
ICAgZ2w6OkRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgfSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJl
IGNvbXBpbGUtdGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
VmVydGV4U2hhZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8g
c195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRl
clNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195
dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUy
RCA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRl
clNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7
CisgICAgZ2w6OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVy
U291cmNlLCAmZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7
CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hT
aGFkZXIoeXV2UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1
dlByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgLy8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0
aWNhbCBwYXJhbGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRl
eEJ1ZmZlciA9IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7Cisg
ICAgYXV0byB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4
QnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIp
OworICAgIH0pOworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwg
MSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgeXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZG
RVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBH
THVpbnQgZnJhbWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1l
YnVmZmVyKTsKKyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Zy
YW1lYnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVm
ZmVyKTsKKyAgICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dy
YW1pdlJvYnVzdEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAm
c3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7
CisgICAgICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09N
UElMRV9TVEFUVVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3Rh
dHVzID0gMDsKKyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFk
ZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFp
bGVkIHRvIGxpbms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0
dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2Uo
KTsKKyAgICB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZl
ckNsZWFudXAucmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250
ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1
ZmZlciA9IHl1dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7
CisgICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7Cisg
ICAgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0
aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAg
IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVy
ZVNpemUiKTsKKyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0
cmliTG9jYXRpb24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlz
IGRlbGV0ZWQgYnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGlu
IHVzZS4KKyAgICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6
VmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdM
X0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1
cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJl
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgRmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9u
bHkgc3VwcG9ydHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUg
c3VwcG9ydGluZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0g
Q1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9y
bWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8v
IE5PTElOVAorICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9Q
SVhFTF9GT1JNQVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhl
bEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxS
YW5nZQorI2VuZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBB
c2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywg
Rm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1
ZmZlckdldElPU3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChz
dXJmYWNlKTsKKyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFj
ZSA9PSBtX2xhc3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1
cmZhY2VTZWVkCisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBt
X293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0
ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVk
IHRvIGl0LCBhbmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNp
bmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRo
KGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFn
ZSk7CisKKyAgICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBU
aGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBl
YXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVy
cm9yIGlzIG5vdCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFr
ZVNjb3BlRXhpdChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQs
IHR5cGVdIHsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRl
eHR1cmUpOworICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGds
OjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0
ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUy
RChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91
dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRv
IGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCk7CisKKyAgICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8g
c291cmNlLgorICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUo
c3VyZmFjZSwgMCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRP
ZlBsYW5lKHN1cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3Vy
ZmFjZUdldEhlaWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0
dXJlVGFyZ2V0ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAg
R0x1aW50IHV2VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OworICAgIGF1dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0g
eworICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7Cisg
ICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2
aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRh
Y2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xf
SU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhl
aWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNj
b3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29y
ZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOwor
ICAgIH0pOworCisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMo
MSwgJnlUZXh0dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQo
W3lUZXh0dXJlXSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOwor
ICAgIH0pOworICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6Qmlu
ZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZl
ckFuZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJn
ZXQsIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5
UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhh
bmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRl
c3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0p
OworCisgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVu
aWZvcm0xaShtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFp
KG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2
RmxpcFlVbmlmb3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAg
Z2w6OlVuaWZvcm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgs
IHlQbGFuZUhlaWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdl
ID0gcGl4ZWxSYW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFu
c2ZlckZ1bmN0aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0
PENGU3RyaW5nUmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JH
Qk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlv
bik7CisgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biwgMSwgR0xfRkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJh
d2luZy4KKyAgICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9s
YXN0U3VyZmFjZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNl
U2VlZDsKKyAgICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50
ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAg
ICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0
ZTM5NjBiNmQ3MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx3dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHcmFwaGljc0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxl
bWVudGF0aW9uIGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBw
YXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENv
Y29hLgorY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZD
b2NvYSgpIGZpbmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBGbGlwWSkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
KEdyYXBoaWNzQ29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2Vl
ZChHQ0dMdWludCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVT
ZWVkLmdldCh0ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBt
X293bmVyOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7
IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51
bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsg
bnVsbHB0ciB9OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9Owor
ICAgIFBsYXRmb3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGlu
dCBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3Jt
TG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biB7IC0xIH07CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAt
MSB9OworICAgIEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9Owor
ICAgIEdDR0xpbnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAg
IEZsaXBZIG1fbGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1
cmZhY2VSZWY+IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQg
eyAwIH07CisKKyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVu
c2lnbmVkLCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOwor
fTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xF
TGF5ZXIuY3BwCmluZGV4IDkzYzAyMTRmMzlhODE5MjQyODBmMzczYzlhYzc5Mzg2YmQyMzI0NjAu
LmU3YzI5ZGQ1Y2JmZmYxNDRiZDFiODU1MTkxNmJmOGRiNjc0YWYwNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dM
QU5HTEVMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcApAQCAtMTc3LDcgKzE3Nyw3IEBA
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29u
dGV4dDo6cGxhdGZvcm1Db25maWcoKSBjCiAgICAgcmV0dXJuIG1fY29uZmlnOwogfQogCi1HQ0dM
QU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRl
eHQpCitHQ0dMQU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdM
RSYgY29udGV4dCkKICAgICA6IEdDR0xMYXllcihjb250ZXh0KQogICAgICwgbV9hbmdsZUNvbnRl
eHQoQU5HTEVDb250ZXh0OjpjcmVhdGVDb250ZXh0KCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xF
TGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFw
L05pY29zaWFHQ0dMQU5HTEVMYXllci5oCmluZGV4IDcwNTc5ZDI4YjgwYmI5NDMwZTg4MzU5NDUz
MGIwMjUwZjc4NDUzMjUuLjc4NzM3ODJjM2ZkMjJjNTBhNTc1MDA1YWFkZTBmNGYwMDBmMmIxYWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4
bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCkBAIC03Niw3
ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgRUdMU3VyZmFjZSBtX3N1cmZhY2UgeyBudWxscHRy
IH07CiAgICAgfTsKIAotICAgIEdDR0xBTkdMRUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMJik7CisgICAgR0NHTEFOR0xFTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRSYpOwogICAgIHZpcnR1YWwgfkdDR0xBTkdMRUxheWVyKCk7CiAKICAgICBib29sIG1h
a2VDb250ZXh0Q3VycmVudCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NH
TExheWVyLmNwcAppbmRleCAwMzU3OTQ1OTJkMTZmYmNkZGIxMWQxNTcxYzYzZmNkM2M4YzY0YWE1
Li5hOWI0ZjUwODI4NTc2NTgzYzJmNzJlMmNmMjFhODA0Y2U2M2Q0YzVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NH
TExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2Ug
Tmljb3NpYSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1HQ0dMTGF5ZXI6OkdDR0xM
YXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKK0dDR0xMYXllcjo6R0NHTExh
eWVyKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wmIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKICAgICAsIG1fY29udGVudExheWVyKE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3Jl
YXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5
KCp0aGlzKSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmgKaW5kZXggNDMy
OTkwNDYwOTg2NzViN2JlYWI5NzlmMjE2NTM3NzViZTM1ZTBhMi4uZDFhNWI4ZTQzODdhZWE3NmUw
NDdjODcwYzU5Zjc2NGNjNmQ4YjJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5
ZXIuaApAQCAtMzAsMTAgKzMwLDE1IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShOSUNP
U0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oIgogI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KIAorI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTEFOR0xFLmgiCisjZWxzZQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xDb250ZXh0
OwogfQpAQCAtNDMsNyArNDgsMTIgQEAgbmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgR0NHTExh
eWVyIDogcHVibGljIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEdDR0xMYXll
cihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOworI2lmIFVTRShBTkdMRSkKKyAg
ICB1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMID0gV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTsKKyNlbHNlCisgICAgdXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCA9
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOworI2VuZGlmCisgICAgZXhwbGljaXQg
R0NHTExheWVyKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wmKTsKIAogICAgIHZpcnR1YWwgfkdD
R0xMYXllcigpOwogCkBAIC01NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3YXBCdWZm
ZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCYgbV9jb250ZXh0OworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUmIG1fY29udGV4dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R0xDb250
ZXh0PiBtX2dsQ29udGV4dDsKIAogICAgIFJlZjxDb250ZW50TGF5ZXI+IG1fY29udGVudExheWVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKaW5kZXggYjgzMmExODZhNDJj
OGJlMzIyYTRjNzA4MWY3NWRjZDQ5MGMyN2Y4OC4uMmMwZDk5N2NmMzgwMTgxMTFkYzQ3M2ExZWRm
Yzg1YjNkZjc4ZDhmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCkBA
IC0xLDcgKzEsOCBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBNb3ppbGxhIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENo
YW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyLDIyICsyMywzMDk1IEBACiAgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgogCi0jaWYgRU5BQkxFKFdFQkdMKQorI2lmIEVOQUJMRShXRUJHTCkgJiYg
IVVTRShBTkdMRSkKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgorI2luY2x1ZGUgIkFOR0xF
V2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAiR0xDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgotI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5n
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNp
bmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXku
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworI2lmIFVTRShPUEVOR0xf
RVMpCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCIKKyNlbHNlCisjaW5jbHVkZSAi
RXh0ZW5zaW9uc0dMT3BlbkdMLmgiCisjZW5kaWYKKworI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNs
dWRlICJFcG94eVNoaW1zLmgiCisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIk9wZW5H
TEVTU2hpbXMuaCIKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQorI2luY2x1
ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorI2luY2x1ZGUg
Ik5pY29zaWFHQ0dMTGF5ZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0
YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+JiBnZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAg
ICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiogc2hhcmVkTmFtZUhhc2g7
CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgc2hhcmVkTmFtZUhh
c2ggPSBuZXcgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPjsKKyAgICB9KTsKKworICAg
IHJldHVybiAqc2hhcmVkTmFtZUhhc2g7Cit9CisKK3N0YXRpYyB2b2lkIHNldEN1cnJlbnROYW1l
SGFzaE1hcEZvclNoYWRlcihTaGFkZXJOYW1lSGFzaCogc2hhZGVyTmFtZUhhc2gpCit7CisgICAg
KmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpID0gc2hhZGVyTmFtZUhhc2g7Cit9CisK
Ky8vIEhhc2ggZnVuY3Rpb24gdXNlZCBieSB0aGUgQU5HTEUgdHJhbnNsYXRvci9jb21waWxlciB0
byBkbworLy8gc3ltYm9sIG5hbWUgbWFuZ2xpbmcuIFNpbmNlIHRoaXMgaXMgYSBzdGF0aWMgbWV0
aG9kLCBiZWZvcmUKKy8vIGNhbGxpbmcgY29tcGlsZVNoYWRlciB3ZSBzZXQgY3VycmVudE5hbWVI
YXNoTWFwRm9yU2hhZGVyCisvLyB0byBwb2ludCB0byB0aGUgbWFwIGtlcHQgYnkgdGhlIGN1cnJl
bnQgaW5zdGFuY2Ugb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCisKK3N0YXRpYyB1aW50NjRf
dCBuYW1lSGFzaEZvclNoYWRlcihjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuZ3RoKQorewor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENTdHJpbmcgbmFtZUFz
Q1N0cmluZyA9IENTdHJpbmcobmFtZSk7CisKKyAgICAvLyBMb29rIHVwIG5hbWUgaW4gb3VyIGxv
Y2FsIG1hcC4KKyAgICBTaGFkZXJOYW1lSGFzaComIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRl
ciA9ICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKTsKKyAgICBTaGFkZXJOYW1lSGFz
aDo6aXRlcmF0b3IgZmluZFJlc3VsdCA9IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+Zmlu
ZChuYW1lQXNDU3RyaW5nKTsKKyAgICBpZiAoZmluZFJlc3VsdCAhPSBjdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXItPmVuZCgpKQorICAgICAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWU7CisK
KyAgICB1bnNpZ25lZCBoYXNoVmFsdWUgPSBuYW1lQXNDU3RyaW5nLmhhc2goKTsKKworICAgIC8v
IENvbnZlcnQgdGhlIDMyLWJpdCBoYXNoIGZyb20gQ1N0cmluZzo6aGFzaCBpbnRvIGEgNjQtYml0
IHJlc3VsdAorICAgIC8vIGJ5IHNoaWZ0aW5nIHRoZW4gYWRkaW5nIHRoZSBzaXplIG9mIG91ciB0
YWJsZS4gT3ZlcmZsb3cgd291bGQKKyAgICAvLyBvbmx5IGJlIGEgcHJvYmxlbSBpZiB3ZSdyZSBh
bHJlYWR5IGhhc2hpbmcgdG8gdGhlIHNhbWUgdmFsdWUgKGFuZAorICAgIC8vIHdlJ3JlIGhvcGlu
ZyB0aGF0IG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb250ZXh0IHdlCisgICAgLy8gZG9uJ3Qg
aGF2ZSB0aGF0IG1hbnkgc3ltYm9scykuCisKKyAgICB1aW50NjRfdCByZXN1bHQgPSBoYXNoVmFs
dWU7CisgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCAzMikgKyAoY3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyLT5zaXplKCkgKyAxKTsKKworICAgIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+
c2V0KG5hbWVBc0NTdHJpbmcsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0
cmlidXRlcykKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IG1ha2VV
bmlxdWU8Tmljb3NpYTo6R0NHTExheWVyPigqdGhpcyk7CisjZWxzZQorICAgIG1fdGV4bWFwTGF5
ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOwor
I2VuZGlmCisKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVz
KCk7CisgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhh
dmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KKworICAgIC8vIENyZWF0ZSBhIHRleHR1cmUg
dG8gcmVuZGVyIGludG8uCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAg
IDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhQ
YXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAgICAvLyBDcmVhdGUg
YW4gRkJPLgorICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdf
RklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpOworCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0
ZVRleHR1cmUpOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVk
aWF0ZVRleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKKyNlbmRpZgorCisgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgor
ICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7
CisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xHZW5GcmFtZWJ1
ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAg
ICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwor
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAg
ICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgorICAg
ICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5k
UmVhZEZCTyA9IG1fZmJvOworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIGlmIChhdHRyaWJ1
dGVzLmRlcHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVm
ZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgIGdsR2Vu
UmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbmRpZgorICAgICAgICBpZiAo
YXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbEdl
blJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyNpZiAh
VVNFKE9QRU5HTF9FUykKKyAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJ
WkUpOworCisgICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7
CisgICAgICAgIG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7CisKKyAgICAgICAgLy8gRnJvbSB2
ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3Qg
dGhhdCBvdXB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgorICAgICAgICAvLyBPcGVuR0wgdmVy
c2lvbiAzLjIgdXNlcyBHTFNMIHZlcnNpb24gMS41MC4KKyAgICAgICAgbV9jb21waWxlciA9IEFO
R0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKKworICAgICAgICAvLyBG
cm9tIHZlcnNpb24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdl
IG5lZWQgYSBWQU8gZm9yIHJlbmRlcmluZy4KKyAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3Jl
YXRlZCBhbmQgYm91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0
dXJlTWFwcGVyLCBXZWJHTCwgZXRjKS4gVGhpcyBpcworICAgICAgICAvLyBhIHNpbXBsZXIgc29s
dXRpb246IHRoZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjcmVhdGVkIG9uIGEgR0xD
b250ZXh0IHdpbGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCisgICAg
ICAgIEdDR0xpbnQgY3VycmVudFZBTyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OlZFUlRFWF9BUlJBWV9CSU5ESU5HKTsKKyAgICAgICAgaWYgKCFjdXJyZW50VkFPKSB7Cisg
ICAgICAgICAgICBtX3ZhbyA9IGNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgICAgICBiaW5k
VmVydGV4QXJyYXkobV92YW8pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
Rm9yIGxvd2VyIHZlcnNpb25zIHJlcXVlc3QgdGhlIGNvbXBhdGliaWxpdHkgb3V0cHV0IHRvIHRo
ZSBzaGFkZXIgY29tcGlsZXIuCisgICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRn
ZShTSF9HTFNMX0NPTVBBVElCSUxJVFlfT1VUUFVUKTsKKworICAgICAgICAvLyBHTF9QT0lOVF9T
UFJJVEUgaXMgbmVlZGVkIGluIGxvd2VyIHZlcnNpb25zLgorICAgICAgICA6OmdsRW5hYmxlKEdM
X1BPSU5UX1NQUklURSk7CisgICAgfQorI2Vsc2UKKyAgICAvLyBBZGp1c3QgdGhlIHNoYWRlciBz
cGVjaWZpY2F0aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIEdMRVMzIChpLmUuIFdlYkdMMiBzdXBw
b3J0KSB3YXMgcmVxdWVzdGVkLgorI2lmIEVOQUJMRShXRUJHTDIpCisgICAgbV9jb21waWxlciA9
IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCAoYXR0cmlidXRlcy53ZWJHTFZlcnNp
b24gPT0gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMikgPyBTSF9XRUJHTDJf
U1BFQyA6IFNIX1dFQkdMX1NQRUMpOworI2Vsc2UKKyAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJL
aXRCcmlkZ2UoU0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMX1NQRUMpOworI2VuZGlmCisjZW5kaWYK
KworICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgorICAgIFNoQnVpbHRJblJlc291cmNlcyBB
TkdMRVJlc291cmNlczsKKyAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3Vy
Y2VzKTsKKworICAgIEFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMgPSBnZXRJbnRlZ2Vy
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIEFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpOworICAgIEFOR0xFUmVz
b3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6TUFYX1ZBUllJTkdfVkVDVE9SUyk7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4
VGV4dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpN
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAgIEFOR0xFUmVzb3VyY2VzLk1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgQU5HTEVSZXNvdXJj
ZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMpOworCisgICAgLy8gQWx3YXlzIHNldCB0byAx
IGZvciBPcGVuR0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwor
CisgICAgR0NHTGludCByYW5nZVsyXSB7IH07CisgICAgR0NHTGludCBwcmVjaXNpb24gPSAwOwor
ICAgIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJB
R01FTlRfU0hBREVSLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2Us
ICZwcmVjaXNpb24pOworICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9
IChyYW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOworCisgICAgbV9jb21waWxlci5z
ZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwg
MCwgMCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0woKQoreworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFu
YWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICBp
ZiAobV90ZXh0dXJlKQorICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0
dXJlKQorICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUp
OworI2VuZGlmCisKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwor
CisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICA6OmdsRGVs
ZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAg
IH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyNp
ZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICBpZiAobV9kZXB0aEJ1ZmZlcikKKyAgICAgICAgICAg
IGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CisKKyAgICAgICAgaWYg
KG1fc3RlbmNpbEJ1ZmZlcikKKyAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
bV9zdGVuY2lsQnVmZmVyKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpCisgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgIH0KKyAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIDo6Z2xEZWxldGVUZXh0dXJlcygx
LCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyNlbmRpZgorCisjaWYgVVNFKENBSVJPKQorICAg
IGlmIChtX3ZhbykKKyAgICAgICAgZGVsZXRlVmVydGV4QXJyYXkobV92YW8pOworI2VuZGlmCit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0
Q3VycmVudCgpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNo
ZWNrR1BVU3RhdHVzKCkKK3sKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICByZXR1cm4g
dHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKyNpZiBQTEFURk9S
TShHVEspCitFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykgeworI2lmIFVTRShP
UEVOR0xfRVMpCisgICAgICAgIC8vIGdsR2V0U3RyaW5naSBpcyBub3QgYXZhaWxhYmxlIG9uIEdM
RVMyLgorICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnNHTE9wZW5H
TEVTPih0aGlzLCAgZmFsc2UpOworI2Vsc2UKKyAgICAgICAgLy8gRnJvbSBPcGVuR0wgMy4yIG9u
IHdlIHVzZSB0aGUgQ29yZSBwcm9maWxlLCBhbmQgdGhlcmUgd2UgbXVzdCB1c2UgZ2xHZXRTdHJp
bmdpLgorICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnNHTE9wZW5H
TD4odGhpcywgR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjApOworI2VuZGlm
CisgICAgfQorICAgIHJldHVybiAqbV9leHRlbnNpb25zOworfQorI2VuZGlmCisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCit7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxh
dGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKQorICAgICAgICBtX2ZhaWxOZXh0
U3RhdHVzQ2hlY2sgPSB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
cmVwYXJlRm9yRGlzcGxheSgpCit7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQoreworICAgIHJl
dHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb24pCit7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisK
KyAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25z
KCk7CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3Vw
cG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgZXh0ZW5z
aW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgICAg
ICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBhdHRy
cy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXR0cnMuc3RlbmNp
bCA9IGZhbHNlOworICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgfQor
ICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1faXNGb3JXZWJHTDIpIHsKKyAgICAgICAgaWYg
KCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
KSB7CisgICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgICAgIHNl
dENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBl
eHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
Iik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4
dHVyZSgpCit7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKworI2lm
ICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBz
Y29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9w
ZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOworI2VuZGlmCisK
KyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpCisgICAgICAgIHJlc29sdmVN
dWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKyAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBz
dGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICA6OmdsRnJhbWVidWZmZXJU
ZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQs
IEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xGbHVzaCgpOworCisgICAgQVNT
RVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBp
ZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyk7CisgICAgZWxzZQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIHJldHVybjsKKyNlbmRpZgorCisg
ICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX3N0YXRlLmJvdW5kVGFyZ2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9URVhU
VVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUoR0xfVEVYVFVSRTApIDogMCk7CisgICAgOjpn
bEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCk7CisgICAgQVNTRVJUKG1f
c3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAobV9z
dGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7
CisgICAgOjpnbEZsdXNoKCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCit7CisgICAgYm9vbCBt
dXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlh
bGlhcykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisgICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
LCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdG
Qk8pOworICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pIHsKKyAgICAg
ICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAg
IH0KKyAgICB9CisgICAgYXV0byByZXN1bHQgPSByZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7
CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICh3aWR0aCA9PSBtX2N1cnJl
bnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7CisgICAgaWYgKHdpZHRoIDwg
MCB8fCBoZWlnaHQgPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsK
KworICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CisgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVp
Z2h0OworCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAgICBUZW1wb3JhcnlPcGVuR0xT
ZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CisgICAgVGVt
cG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Cisg
ICAgCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHJlc2hhcGVGQk9zKEludFNpemUod2lkdGgs
IGhlaWdodCkpOworCisgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAg
R0xmbG9hdCBjbGVhckNvbG9yW10gPSB7IDAsIDAsIDAsIDAgfSwgY2xlYXJEZXB0aCA9IDA7Cisg
ICAgR0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKKyAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7
IEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUgfSwgZGVwdGhNYXNrID0gR0xfVFJV
RTsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sg
PSAweGZmZmZmZmZmOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVS
X0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9y
KTsKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYo
R0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CisKKyAgICBhdXRvIGF0dHJzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAgICA6OmdsR2V0
RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKDEpOworICAgICAgICA6OmdsR2V0Qm9vbGVh
bnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFz
ayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Cisg
ICAgfQorICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihH
TF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbENsZWFy
U3RlbmNpbCgwKTsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNL
LCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIDo6Z2xH
ZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdM
aW50Kj4oJnN0ZW5jaWxNYXNrQmFjaykpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0
ZShHTF9GUk9OVCwgMHhmZmZmZmZmZik7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRl
KEdMX0JBQ0ssIDB4ZmZmZmZmZmYpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9C
VUZGRVJfQklUOworICAgIH0KKworICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOworCisgICAgOjpn
bENsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwg
Y2xlYXJDb2xvclszXSk7CisgICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFz
a1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOworICAgIGlmIChhdHRycy5kZXB0aCkg
eworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRo
KTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0aE1hc2spOworICAgIH0KKyAgICBpZiAoYXR0
cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Cisg
ICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7Cisg
ICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7
CisgICAgfQorCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERy
YXdGQk8pOworCisgICAgYXV0byBlcnJvciA9IDo6Z2xHZXRFcnJvcigpOworICAgIGlmIChlcnJv
ciAhPSBHTF9OT19FUlJPUikgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBP
cGVuR0wgZXJyb3IgZHVyaW5nIEdyYXBoaWNzQ29udGV4dEdMIGJ1ZmZlciBpbml0aWFsaXphdGlv
biAoJWQpLiIsIGVycm9yKTsKKyAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgOjpnbEZsdXNoKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4
U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAoreworICAgIEFT
U0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBBU1NF
UlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBjb25z
dCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVy
KS0+dmFsdWU7CisgICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBz
aDo6U2hhZGVyVmFyaWFibGU+IGNvbWJpbmVkVmFyeWluZ3M7CisgICAgZm9yIChjb25zdCBhdXRv
JiB2ZXJ0ZXhTeW1ib2wgOiB2ZXJ0ZXhFbnRyeS52YXJ5aW5nTWFwKSB7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgc3ltYm9sTmFtZSA9IHZlcnRleFN5bWJvbC5rZXk7CisgICAgICAgIC8vIFRoZSB2
YXJ5aW5nIG1hcCBpbmNsdWRlcyB2YXJpYWJsZXMgZm9yIGVhY2ggaW5kZXggb2YgYW4gYXJyYXkg
dmFyaWFibGUuCisgICAgICAgIC8vIFdlIG9ubHkgd2FudCBhIHNpbmdsZSB2YXJpYWJsZSB0byBy
ZXByZXNlbnQgdGhlIGFycmF5LgorICAgICAgICBpZiAoc3ltYm9sTmFtZS5lbmRzV2l0aCgiXSIp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRG9uJ3QgY291bnQgYnVpbHQg
aW4gdmFyeWluZ3MuCisgICAgICAgIGlmIChzeW1ib2xOYW1lID09ICJnbF9GcmFnQ29vcmQiIHx8
IHN5bWJvbE5hbWUgPT0gImdsX0Zyb250RmFjaW5nIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Qb2lu
dENvb3JkIikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IGF1dG8mIGZy
YWdtZW50U3ltYm9sID0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmZpbmQoc3ltYm9sTmFtZSk7
CisgICAgICAgIGlmIChmcmFnbWVudFN5bWJvbCAhPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAu
ZW5kKCkpCisgICAgICAgICAgICBjb21iaW5lZFZhcnlpbmdzLmFkZChzeW1ib2xOYW1lLCBmcmFn
bWVudFN5bWJvbC0+dmFsdWUpOworICAgIH0KKworICAgIHNpemVfdCBudW1WYXJ5aW5ncyA9IGNv
bWJpbmVkVmFyeWluZ3Muc2l6ZSgpOworICAgIGlmICghbnVtVmFyeWluZ3MpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiB2YXJpYWJs
ZXM7CisgICAgdmFyaWFibGVzLnJlc2VydmUoY29tYmluZWRWYXJ5aW5ncy5zaXplKCkpOworICAg
IGZvciAoY29uc3QgYXV0byYgdmFyeWluZ1N5bWJvbCA6IGNvbWJpbmVkVmFyeWluZ3MudmFsdWVz
KCkpCisgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyeWluZ1N5bWJvbCk7CisKKyAgICBH
Q0dMaW50IG1heFZhcnlpbmdWZWN0b3JzID0gMDsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIDo6
Z2xHZXRJbnRlZ2VydihNQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwor
I2Vsc2UKKyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdM
X01BWF9WQVJZSU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZWxzZSB7Cisg
ICAgICAgIEdDR0xpbnQgbWF4VmFyeWluZ0Zsb2F0cyA9IDA7CisgICAgICAgIDo6Z2xHZXRJbnRl
Z2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsICZtYXhWYXJ5aW5nRmxvYXRzKTsKKyAgICAgICAg
bWF4VmFyeWluZ1ZlY3RvcnMgPSBtYXhWYXJ5aW5nRmxvYXRzIC8gNDsKKyAgICB9CisjZW5kaWYK
KyAgICByZXR1cm4gc2g6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5
aW5nVmVjdG9ycywgdmFyaWFibGVzKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9y
bUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NoYWRlclNv
dXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBBU1NFUlQobV9zaGFkZXJTb3Vy
Y2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhF
bnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7CisgICAg
Y29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21l
bnRTaGFkZXIpLT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6R0xlbnVtPiB2ZXJ0
ZXhTeW1ib2xQcmVjaXNpb25NYXA7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdmVy
dGV4RW50cnkudW5pZm9ybU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVk
TmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7CisgICAgICAgIHZlcnRleFN5bWJv
bFByZWNpc2lvbk1hcC5hZGQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5s
ZW5ndGgoKSksIGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbik7CisgICAgfQorCisgICAgZm9y
IChjb25zdCBhdXRvJiBlbnRyeSA6IGZyYWdtZW50RW50cnkudW5pZm9ybU1hcCkgeworICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBl
ZE5hbWU7CisgICAgICAgIGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA9IHZlcnRleFN5bWJvbFBy
ZWNpc2lvbk1hcC5maW5kKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVu
Z3RoKCkpKTsKKyAgICAgICAgaWYgKHZlcnRleFN5bWJvbCAhPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNp
b25NYXAuZW5kKCkgJiYgdmVydGV4U3ltYm9sLT52YWx1ZSAhPSBlbnRyeS52YWx1ZS5nZXQoKS5w
cmVjaXNpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUo
R0NHTGVudW0gdGV4dHVyZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsK
KyAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChz
aGFkZXIpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAg
ICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHBy
b2dyYW0pOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFE
RVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmJpbmRB
dHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBt
YXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJv
Z3JhbSwgaW5kZXgsIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZl
cikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAg
ICBBU1NFUlQodGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKTsKKyAgICBBU1NFUlQobV9zdGF0ZS5i
b3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChmYm8gIT0gbV9z
dGF0ZS5ib3VuZERyYXdGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJn
ZXQsIGZibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJl
YWRGQk8gPSBmYm87CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJi
dWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwor
fQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0
dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7CisgICAgOjpn
bEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdD
R0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
R0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxlbmRFcXVhdGlvblNl
cGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NH
TGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVzYWdlKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3Qgdm9pZD4gZGF0
YSwgR0NHTGVudW0gdXNhZ2UpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLmJ1ZlNpemUs
IGRhdGEuZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
dWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0
LCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9P
UEVSQVRJT047CisKKyAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFy
Z2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dM
Y2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bENsZWFyQ29sb3IociwgZywgYiwgYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhcihtYXNrKTsKKyAgICBjaGVj
a0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0
ZW5jaWwoR0NHTGludCBzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFu
IGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ29sb3JN
YXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBB
U1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5H
TEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQorICAgIC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAg
dG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRleHQuCisgICAgU2hCdWlsdEluUmVzb3VyY2Vz
IEFOR0xFUmVzb3VyY2VzID0gbV9jb21waWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICBTaEhhc2hG
dW5jdGlvbjY0IHByZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0
aW9uOworICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9IG5hbWVIYXNoRm9yU2hhZGVy
OworCisgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCisgICAgICAgIG5hbWVIYXNoTWFw
Rm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7CisgICAgc2V0Q3VycmVu
dE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7CisgICAg
bV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworCisgICAgU3RyaW5nIHRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRShzaGFkZXIpOworCisgICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0g
cHJldmlvdXNIYXNoRnVuY3Rpb247CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVS
ZXNvdXJjZXMpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsK
KworICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFu
c2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hh
ZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOworICAgIGludCB0cmFuc2xh
dGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcubGVuZ3RoKCk7CisKKyAg
ICBMT0coV2ViR0wsICItLS0gYmVnaW4gb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4t
LS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4iLCBnZXRTaGFkZXJTb3VyY2Uoc2hh
ZGVyKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gdHJhbnNsYXRl
ZCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNl
IC0tLSIsIHRyYW5zbGF0ZWRTaGFkZXJQdHIpOworCisgICAgOjpnbFNoYWRlclNvdXJjZShzaGFk
ZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7Cisg
ICAgCisgICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICAKKyAgICBpbnQgY29tcGls
ZVN0YXR1czsKKyAgICAKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRV
UywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgU2hhZGVyU291cmNlRW50
cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKworICAgIC8vIFBvcHVsYXRlIHRoZSBzaGFkZXIg
bG9nCisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBH
TF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworCisgICAgaWYgKGxlbmd0aCkgeworICAgICAg
ICBHTHNpemVpIHNpemUgPSAwOworICAgICAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7
CisgICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5m
by5kYXRhKCkpOworCisgICAgICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hh
ZGVyLCAwIH07CisgICAgICAgIGVudHJ5LmxvZyA9IGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVy
cywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7CisgICAgfQorCisgICAgaWYgKGNvbXBp
bGVTdGF0dXMgIT0gR0xfVFJVRSkgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Cisg
ICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBzaGFkZXIgdHJhbnNsYXRvciBwcm9kdWNlZCBhIHNo
YWRlciB0aGF0IE9wZW5HTCB3b3VsZCBub3QgY29tcGlsZS4iKTsKKyAgICB9Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaE1hcDxQbGF0Zm9ybUdMT2Jq
ZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC0+dmFsdWU7CisKKyAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5n
ID0gZW50cnkuc291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIg
PSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKKyAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3Ro
ID0gc2hhZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsKKworICAgIExPRyhXZWJHTCwgIi0tLSBi
ZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIg
c291cmNlIC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsKKworICAgIDo6Z2xTaGFkZXJTb3VyY2Uo
c2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKKworICAg
IDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgICBpbnQgY29tcGlsZVN0YXR1czsKKwor
ICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1
cyk7CisKKyAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7CisgICAgICAgIGVudHJ5
LmlzVmFsaWQgPSB0cnVlOworICAgICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24g
b2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbnRyeS5pc1Zh
bGlkID0gZmFsc2U7CisgICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRp
b24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09
IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3Rh
dGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIGlmIChh
dHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
IEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0
QXR0cmlidXRlcygpOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3Rh
dGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91
bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2Ft
cGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChhdHRycy5hbnRp
YWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
dWxsRmFjZShHQ0dMZW51bSBtb2RlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDdWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERl
cHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhN
YXNrKEdDR0xib29sZWFuIGZsYWcpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOwor
ICAgIEFTU0VSVChzaGFkZXIpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShw
cm9ncmFtKTsKKyAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xE
aXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0Fy
cmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdM
dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CisgICAgY2hlY2tHUFVTdGF0
dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVt
IGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xFbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZpbmlzaCgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbEZpbmlzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmbHVzaCgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRh
Y2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUsIEdDR0xpbnQgbGV2ZWwpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdl
dCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IDo6Z2xGcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFy
Z2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmli
SW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZv
JiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHTGlu
dCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdM
X0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOworICAgIFZl
Y3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJV
VEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgorICAgIEdMc2l6ZWkgbmFt
ZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOwor
ICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUs
ICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBpZiAoIW5hbWVM
ZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcgb3JpZ2luYWxO
YW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRS
SUJVVEUsIFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOworICAgIAorI2lmbmRlZiBO
REVCVUcKKyAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwor
ICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgYXR0cmlidXRlICVk
IGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5k
YXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorCisgICAgaW5mby5u
YW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXpl
ID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0NHTGludCBzeW1ib2xDb3VudDsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3Jh
bSk7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQo
KSkgeworICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3Jh
cGhpY3NDb250ZXh0R0w6OkFDVElWRV9BVFRSSUJVVEVTLCAmc3ltYm9sQ291bnQpOworICAgICAg
ICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwor
ICAgIH0KKyAgICAKKyAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9
IHJlc3VsdC0+dmFsdWU7CisgICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xD
b3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xD
b3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwW2luZGV4XSA6IC0xOworCisg
ICAgcmV0dXJuIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZv
KQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdMaW50IG1h
eFVuaWZvcm1TaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElW
RV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CisKKyAgICBWZWN0b3I8R0xj
aGFyPiBuYW1lKG1heFVuaWZvcm1TaXplKTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdU
SCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7
CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRB
Y3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgs
ICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5h
bFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIFN0cmluZyhu
YW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBTdHJp
bmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOworICAgIExPRyhXZWJHTCwg
IlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgdW5pZm9ybSAlZCBmcm9tICclcycgdG8gJyVz
JyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5h
bWUudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAKKyAgICBpbmZvLm5hbWUgPSBvcmlnaW5h
bE5hbWU7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3Rp
dmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2
ZUluZm8mIGluZm8pCit7CisgICAgR0NHTGludCBzeW1ib2xDb3VudDsKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAg
ICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0
R0w6OkFDVElWRV9VTklGT1JNUywgJnN5bWJvbENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9z
aGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisg
ICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVl
OworICAgIEdDR0x1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVk
VG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRv
QWN0dWFsVW5pZm9ybUluZGV4TWFwW2luZGV4XSA6IC0xOworICAgIAorICAgIHJldHVybiBnZXRB
Y3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1H
TE9iamVjdCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdl
dEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQor
CitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlSGFzaGVkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB1aW50
NjRfdCBudW1iZXIgPSBuYW1lSGFzaEZvclNoYWRlcihuYW1lLnV0ZjgoKS5kYXRhKCksIG5hbWUu
bGVuZ3RoKCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJ3ZWJnbF8iLCBoZXgobnVtYmVyLCBM
b3dlcmNhc2UpKTsKK30KKworc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjptYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsK
KyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52
YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJv
bE1hcC5maW5kKG5hbWUpOworICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvJiBtYXBwZWROYW1lID0g
c3ltYm9sRW50cnktPnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7CisgICAgcmV0dXJuIFN0cmluZyht
YXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpOworfQorCitTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIEdDR0xzaXplaSBjb3VudCA9IDA7CisgICAgUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdID0geyB9OworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291
bnQsIHNoYWRlcnMpOworCisgICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNl
TWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFwcGVkTmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAg
Ly8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxp
bmtpbmcuCisgICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0p
OworICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKKyAgICAgICAg
YXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKKyAgICAgICAgYXV0byBtYXBwZWRO
YW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwg
c3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAgICAgICAgICAg
cmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBu
YW1lKTsKKyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVk
TmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1C
T0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJp
YnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFu
eSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVu
IHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgorICAgICAgICBpZiAo
IW5hbWVIYXNoTWFwRm9yU2hhZGVycykKKyAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVy
cyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7CisgICAgICAgIHNldEN1cnJlbnROYW1l
SGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOworCisgICAgICAg
IGF1dG8gZ2VuZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKKworICAgICAg
ICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICAgICAgbV9w
b3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7CisKKyAg
ICAgICAgcmV0dXJuIGdlbmVyYXRlZE5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9
CisKK3N0ZDo6b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2lu
YWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVT
aGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBh
dXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVz
dWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xN
YXAoc3ltYm9sVHlwZSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJv
bE1hcCkgeworICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBw
ZWROYW1lLmNfc3RyKCkpCisgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OworICAg
IH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFO
R0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgR0NHTHNpemVpIGNvdW50OworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXTsKKyAg
ICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKyAgICAK
KyAgICBmb3IgKEdDR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0
byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNb
aV0sIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAgICAg
ICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIC8vIFdlIG1p
Z2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgor
ICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsKKyAgICBp
ZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgpKSB7CisgICAgICAgIGF1dG8gbGlu
a2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0g
b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1i
b2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJl
dHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICAgICAgb3JpZ2luYWxOYW1lID0gb3JpZ2lu
YWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlw
ZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCisgICAgICAgICAgICByZXR1cm4g
b3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hB
REVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Ly8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBi
ZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAorICAgICAgICAvLyBhbmQgYXJl
bid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCisKKyAg
ICAgICAgY29uc3QgYXV0byYgY2FjaGVkID0gbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5m
aW5kKG5hbWUpOworICAgICAgICBpZiAoY2FjaGVkICE9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1
dGVNYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGVkLT52YWx1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gbmFtZTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50
LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgZm9yIChzaXplX3Qgc3ltYm9sVHlwZSA9IDA7
IHN5bWJvbFR5cGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihTSEFERVJfU1lNQk9MX1RZUEVfVkFS
WUlORyk7ICsrc3ltYm9sVHlwZSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ldKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3lt
Ym9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3RhdGljX2Nhc3Q8ZW51bSBBTkdMRVNo
YWRlclN5bWJvbFR5cGU+KHN5bWJvbFR5cGUpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9
PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS5rZXk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKwor
ICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJf
U1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0
cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFw
cGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2ludCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAg
ICByZXR1cm4gLTE7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gLTE7CisKKworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIG1vdmVkQW5FcnJv
ciA9IGZhbHNlOworCisgICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0
byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKKyAgICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBh
IGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBuZXZlciBjbGVhciB0aGUgZXJyb3IuCisgICAgLy8gT3Ro
ZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwgd2UgZ290IE5PX0VSUk9SLgorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBHQ0dMZW51bSBlcnJv
ciA9IGdsR2V0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7CisgICAg
ICAgIG1vdmVkQW5FcnJvciA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIG1vdmVkQW5FcnJv
cjsKK30KKworR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKK3sK
KyAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCisgICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhl
IGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJvdGgKKyAgICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0
RXJyb3IgaXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9uY2UuCisgICAgICAgIG1v
dmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgICAgICByZXR1cm4gbV9zeW50aGV0
aWNFcnJvcnMudGFrZUZpcnN0KCk7CisgICAgfQorCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCisgICAgcmV0dXJu
IDo6Z2xHZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFN0cmluZyhHQ0dMZW51bSBuYW1lKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9k
ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6
OmdsSXNCdWZmZXIoYnVmZmVyKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc0Vu
YWJsZWQoY2FwKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
RnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZy
YW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpn
bElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sK
KyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJl
dHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0pOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKworICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKK30K
KworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7Cit9CisKK0dDR0xi
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbExp
bmVXaWR0aCh3aWR0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQ
cm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisKKyAg
ICBHQ0dMc2l6ZWkgY291bnQgPSAwOworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9
IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJz
KTsKKworICAgIGlmIChjb3VudCA9PSAyKQorICAgICAgICBtX2xpbmtlZFNoYWRlck1hcC5zZXQo
cHJvZ3JhbSwgc3RkOjptYWtlX3BhaXIoc2hhZGVyc1swXSwgc2hhZGVyc1sxXSkpOworCisgICAg
OjpnbExpbmtQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsUGl4
ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGlu
dmVydCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNl
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBB
U1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworCisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7CisKKyAgICBlbnRyeS5z
b3VyY2UgPSBzdHJpbmc7CisKKyAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBXVEZN
b3ZlKGVudHJ5KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxG
dW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVu
Y2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdD
R0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2Us
IGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVt
IGZhY2UsIEdDR0x1aW50IG1hc2spCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFz
ayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51
bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxPcChm
YWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6
ZmFpbCwgR0NHTGVudW0genBhc3MpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWws
IHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHZhbHVl
KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwg
cG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFmKGxvY2F0
aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwg
djEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNT
RVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXku
YnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEsIEdDR0xmbG9hdCB2MikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCgh
KGFycmF5LmJ1ZlNpemUgJSAzKSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAzLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBH
Q0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sK
KyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50
PiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXku
ZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMmkobG9j
YXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit7
CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlv
biwgYXJyYXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NH
TGludCB2MSwgR0NHTGludCB2MikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBBU1NFUlQo
IShhcnJheS5idWZTaXplICUgMykpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5idWZT
aXplIC8gMywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dM
aW50IHYyLCBHQ0dMaW50IHYzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIs
IHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBBU1NF
UlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFy
cmF5LmJ1ZlNpemUgJSA0KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1
ZlNpemUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgOSkpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gOSwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkp
Cit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDE2KSk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXg0
ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAxNiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9n
cmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgs
IHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2
KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0
IHYwLCBHQ0dMZmxvYXQgdjEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMj4gYXJyYXkpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRl
eEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAs
IHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xm
bG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgs
IGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUs
IEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxp
emVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3Bv
cnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKK3sKKyAg
ICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygpLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xP
YmplY3QgYXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmRlbGV0ZVZlcnRleEFycmF5T0VT
KGFycmF5KTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVy
dGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKK3sKKyAgICByZXR1cm4gZ2V0RXh0ZW5z
aW9ucygpLmlzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKK3sKKyAg
ICBnZXRFeHRlbnNpb25zKCkuYmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlLmRh
dGEpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJh
bWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2
YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworCisgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRGbG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUuZGF0YSk7Cit9CisKK0dDR0xpbnQ2NCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQoreworICAg
IFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOworICAgIC8vIEZJWE1F
IDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0
byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250
ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCisgICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUs
IHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0dDR0xpbnQ2NCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
R0NHTGludDY0IHZhbHVlID0gMDsKKyAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGlu
ZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0
aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4w
LgorICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7CisgICAg
cmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
YXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg
KGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQorICAgICAgICBhdHRhY2ht
ZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIg
d29ya3MuCisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQor
CitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAg
IDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZh
bHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0
aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1l
IHx8IEFDVElWRV9VTklGT1JNUyA9PSBwbmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLmVuZCgpKSB7CisgICAgICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRG
b3JUeXBlKHBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLnNldChwcm9ncmFtLCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMo
KSk7CisgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSBtX3NoYWRl
clByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pLT52YWx1ZTsKKworICAgIC8vIFJl
dHJpZXZlIHRoZSBhY3RpdmUgYXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5k
IGEgbWFwcGluZyBvZgorICAgIC8vIG91ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8g
dGhlIHJlYWwgdW5maWx0ZXJlZCBpbmRleGVzIGluc2lkZSBPcGVuR0wuCisgICAgR0NHTGludCBh
dHRyaWJ1dGVDb3VudCA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVf
QVRUUklCVVRFUywgJmF0dHJpYnV0ZUNvdW50KTsKKyAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkg
PCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7CisgICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAgICAg
ICAgZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKKyAgICAgICAgaWYgKGlu
Zm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuYXBwZW5k
KGkpOworICAgIH0KKyAgICAKKyAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMuCisgICAg
R0NHTGludCB1bmlmb3JtQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwg
QUNUSVZFX1VOSUZPUk1TLCAmdW5pZm9ybUNvdW50KTsKKyAgICBmb3IgKEdDR0xpbnQgaSA9IDA7
IGkgPCB1bmlmb3JtQ291bnQ7ICsraSkgeworICAgICAgICBBY3RpdmVJbmZvIGluZm87CisgICAg
ICAgIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGksIGluZm8pOworICAgICAgICBpZiAo
aW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIAorICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1h
cC5hcHBlbmQoaSk7CisgICAgfQorICAgIAorICAgICp2YWx1ZSA9IHN5bWJvbENvdW50cy5jb3Vu
dEZvclR5cGUocG5hbWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBHQ0dMc2l6ZWkg
Y291bnQsIGNvbnN0IFN0cmluZyYgbG9nKQoreworICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNo
YWRlckluZm9Mb2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKworICAgIEpTQzo6WWFycjo6
UmVndWxhckV4cHJlc3Npb24gcmVnRXhwKCJ3ZWJnbF9bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl0r
Iik7CisKKyAgICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExvZzsKKyAgICAKKyAgICAvLyBBTkdM
RSBpbnNlcnRzIGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0aGUgc2hhZGVyIHNvdXJjZSB0aGF0
CisgICAgLy8gY2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNvbXBpbGVycy4gVGhlcmUgaXMgbm8g
cG9pbnQgc2hvd2luZworICAgIC8vIHRoaXMgd2FybmluZyB0byB0aGUgdXNlciBzaW5jZSB0aGV5
IGRpZG4ndCB3cml0ZSB0aGUgY29kZSB0aGF0CisgICAgLy8gaXMgY2F1c2luZyBpdC4KKyAgICBz
dGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhbmdsZVdhcm5pbmcgeyAiV0FSTklO
RzogMDoxOiBleHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxu
Il9zIH07CisgICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFydHNXaXRoKGFuZ2xlV2FybmluZykg
PyBhbmdsZVdhcm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOworICAgIGludCBtYXRjaGVkTGVuZ3Ro
ID0gMDsKKworICAgIGRvIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gcmVnRXhwLm1hdGNoKGxvZywg
c3RhcnRGcm9tLCAmbWF0Y2hlZExlbmd0aCk7CisgICAgICAgIGlmIChzdGFydCA9PSAtMSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0
cmluZyhzdGFydEZyb20sIHN0YXJ0IC0gc3RhcnRGcm9tKSk7CisgICAgICAgIHN0YXJ0RnJvbSA9
IHN0YXJ0ICsgbWF0Y2hlZExlbmd0aDsKKworICAgICAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWRT
eW1ib2wgPSBsb2cuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaGVkTGVuZ3RoKTsKKyAgICAgICAgY29u
c3QgU3RyaW5nJiBtYXBwZWRTeW1ib2wgPSBtYXBwZWRTeW1ib2xOYW1lKHNoYWRlcnMsIGNvdW50
LCBtYW5nbGVkU3ltYm9sKTsKKyAgICAgICAgTE9HKFdlYkdMLCAiRGVtYW5nbGluZzogJXMgdG8g
JXMiLCBtYW5nbGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCksIG1hcHBlZFN5bWJvbC51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChtYXBwZWRTeW1ib2wpOworICAgIH0g
d2hpbGUgKHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4obG9nLmxlbmd0aCgpKSk7CisKKyAg
ICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3Ro
KCkgLSBzdGFydEZyb20pKTsKKworICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZv
TG9nOlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBy
ZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQor
eworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAg
OjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgR0xzaXpl
aSBzaXplID0gMDsKKyAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgOjpnbEdl
dFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKwor
ICAgIEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07Cisg
ICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAg
ICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8u
ZGF0YSgpLCBzaXplKSk7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkK
K3sKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cml2RVhUKHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitH
Q0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBH
Q0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gdmFsdWU7CisKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICAKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2Fz
ZSBERUxFVEVfU1RBVFVTOgorICAgIGNhc2UgU0hBREVSX1RZUEU6CisgICAgICAgIDo6Z2xHZXRT
aGFkZXJpdihzaGFkZXIsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENPTVBJTEVfU1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKQorICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFs
dWUuaXNWYWxpZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgor
ICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAg
ICAgdmFsdWUgPSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6CisgICAgICAgIHZhbHVlID0gZ2V0
U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7CisgICAgfQorICAg
IHJldHVybiB2YWx1ZTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFk
ZXIpOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYg
ZW50cnkgPSByZXN1bHQtPnZhbHVlOworICAgIGlmICghZW50cnkuaXNWYWxpZCkKKyAgICAgICAg
cmV0dXJuIGVudHJ5LmxvZzsKKworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFNo
YWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7
CisgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgIDo6Z2xHZXRTaGFkZXJJbmZv
TG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOworCisgICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKKyAgICByZXR1cm4gZ2V0VW5tYW5n
bGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBjb25zdCBh
dXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJl
c3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OyAKKworICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKK30KKworR0NHTGZsb2F0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGZsb2F0IHZhbHVlID0gMC5mOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICA6OmdsR2V0
VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50IHZhbHVlID0g
MDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAg
cmV0dXJuIHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxHQ0dMZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24s
IHZhbHVlLmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxHQ0dMaW50PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2
YWx1ZS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9y
bXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PEdDR0x1aW50PiB2YWx1ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5V
U0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworfQorCitHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dy
YW0pOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0x
OworCisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNI
QURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmdldFVu
aWZvcm1Mb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBt
YXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK0dDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50
IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CisgICAgOjpn
bEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KHBvaW50ZXIpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGlu
dCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhVVNF
KE9QRU5HTF9FUykKKyAgICBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykKKyAgICAgICAgdHlw
ZSA9IEdMX0hBTEZfRkxPQVRfQVJCOworI2VuZGlmCisKKyAgICBpZiAobV91c2luZ0NvcmVQcm9m
aWxlKSAgeworICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4g
V2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3
ZSBuZWVkCisgICAgICAgIC8vIHRvIGFkYXB0IHRoZW0sIGFzIHdlIGRvIGluIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKCkuCisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgICAgIGNhc2UgQUxQSEE6CisgICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkVEIHRv
IGJhY2sgR0xfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAgICAgICAgICAgIGZvcm1h
dCA9IFJFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBI
QToKKyAgICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRyB0byBiYWNrIEdMX0xVTUlOQU5D
RV9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgorICAgICAgICAgICAgZm9ybWF0ID0gUkc7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFs
IHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0
aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgorICAgIDo6Z2xUZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzLmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5j
dXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dm9pZD4gZGF0YSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmRhdGEp
OworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRU
ZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9m
ZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRh
LmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuQnVmZmVy
cygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdWludCBvID0gMDsKKyAg
ICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOwor
ICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dM
ZW51bSB0eXBlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NI
QURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChvKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwor
ICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgeworICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBk
cmF3aW5nCisgICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgorICAg
ICAgICBiaW5kRnJhbWVidWZmZXIoRlJBTUVCVUZGRVIsIDApOworICAgIH0KKyAgICBnbERlbGV0
ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgZ2xEZWxl
dGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xEZWxl
dGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Z2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5ib3Vu
ZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgeworICAgICAg
ICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKKyAgICB9KTsKKyAgICBn
bERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQucmVtb3ZlQWxsKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikKK3sKKyAgICAvLyBOZWVkIHRvIG1v
dmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCB0bworICAg
IC8vIHByZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRvIGdldEVycm9y
IHdpbGwgZ2V0CisgICAgLy8gYW55IGVycm9ycyBmcm9tIGdsRXJyb3IgYmVmb3JlIHRoZSBlcnJv
ciB3ZSBhcmUgc3ludGhlc2l6aW5nLgorICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpOworICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZvcmNlQ29udGV4dExvc3QoKQoreworICAgIGZvciAoYXV0byog
Y2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+Zm9yY2VD
b250ZXh0TG9zdCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xl
Q29udGV4dCgpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGll
bnRzKSkKKyAgICAgICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4dCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkK
K3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAg
ICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGdldEV4dGVuc2lvbnMo
KS5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQp
OworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQor
eworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBj
b3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NH
THVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLnZl
cnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7Cit9CisKKyNpZiBIQVZFKE9Q
RU5HTF80KSAmJiBFTkFCTEUoV0VCR0wyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50IGluZGV4KQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xQcmltaXRpdmVSZXN0
YXJ0SW5kZXgoaW5kZXgpOworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51
bSB1c2FnZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpCit7CisgICAgVU5V
U0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIFVOVVNFRF9Q
QVJBTSh1c2FnZSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7CisgICAgVU5VU0VEX1BB
UkFNKGxlbmd0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZv
aWQqIHNyY0RhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQoreworICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShkc3RCeXRlT2Zmc2V0KTsK
KyAgICBVTlVTRURfUEFSQU0oc3JjRGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7
CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Cit9CisKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBI
QVZFKE9QRU5HTF9FU18zKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZl
clN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xp
bnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNp
emUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbENvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFk
T2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7Cit9CisjZWxzZQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50
cHRyLCBHQ0dMaW50cHRyLCBHQ0dMc2l6ZWlwdHIpCit7Cit9CisjZW5kaWYKKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKK3sKKyNpZiBIQVZFKE9Q
RU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHQ0dMdm9pZCogcHRyID0gOjpnbE1hcEJ1ZmZlclJh
bmdlKHRhcmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIEdyYXBoaWNzQ29udGV4dEdMOjpNQVBf
UkVBRF9CSVQpOworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm47CisgICAgbWVtY3B5KGRh
dGEuZGF0YSwgcHRyLCBkYXRhLmJ1ZlNpemUpOworICAgIGlmICghOjpnbFVubWFwQnVmZmVyKHRh
cmdldCkpCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVO
VVNFRF9QQVJBTShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKKyAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworI2VuZGlm
Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdD
R0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEs
IEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0
WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpCit7CisgICAgVU5VU0VEX1BB
UkFNKHNyY1gwKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWTApOworICAgIFVOVVNFRF9QQVJBTShz
cmNYMSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WDAp
OworICAgIFVOVVNFRF9QQVJBTShkc3RZMCk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFgxKTsKKyAg
ICBVTlVTRURfUEFSQU0oZHN0WTEpOworICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKKyAgICBVTlVT
RURfUEFSQU0oZmlsdGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJh
bWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1l
bnQpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0dXJlKTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwp
OworICAgIFVOVVNFRF9QQVJBTShsYXllcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNv
bnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
KyAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVudHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgVU5VU0VEX1BBUkFNKHRh
cmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKKyAgICBVTlVTRURfUEFSQU0o
eCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAg
VU5VU0VEX1BBUkFNKGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQoreworICAgIFVOVVNFRF9QQVJBTShzcmMpOworfQor
CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IGRh
dGEpCit7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQs
IGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3Jt
YXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZlNpemUp
OworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQs
IGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIG1fc3RhdGUudGV4
dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFRleFN0b3JhZ2Uz
RCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsK
KyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKK30KKyNlbHNlCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPEdDR0xp
bnQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXpl
aSwgR0NHTHNpemVpKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhT
dG9yYWdlMkQoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNp
emVpKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0Qo
R0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWkpCit7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29w
eVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhv
ZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7CisgICAgVU5VU0VEX1BBUkFN
KHhvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTSh5b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0o
em9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAg
ICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworfQorCitH
Q0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0obmFtZSk7CisKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAg
IFVOVVNFRF9QQVJBTSh2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQorewor
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAgICBV
TlVTRURfUEFSQU0odjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0o
djApOworICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5VU0VEX1BBUkFNKHYyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3sK
KyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh2MCk7CisgICAg
VU5VU0VEX1BBUkFNKHYxKTsKKyAgICBVTlVTRURfUEFSQU0odjIpOworICAgIFVOVVNFRF9QQVJB
TSh2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVO
VVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NH
THVpbnQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURf
UEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQorewor
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFS
QU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sK
KyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2Up
OworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRy
YW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9Q
QVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VE
X1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9u
KTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNF
RF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRh
KQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5z
cG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgp
OworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VE
X1BBUkFNKHopOworICAgIFVOVVNFRF9QQVJBTSh3KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29u
c3QgR0NHTGludCwgND4gdmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAg
VU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IHgsIEdDR0x1aW50IHks
IEdDR0x1aW50IHosIEdDR0x1aW50IHcpCit7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAg
ICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJB
TSh6KTsKKyAgICBVTlVTRURfUEFSQU0odyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdWludCwgND4gdmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5V
U0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVt
IHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIFVOVVNF
RF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworICAgIFVOVVNFRF9QQVJB
TSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RyaWRlKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVu
dHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVp
IGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBVTlVTRURf
UEFSQU0obW9kZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsKKyAgICBVTlVTRURfUEFSQU0o
ZW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY291bnQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsK
KyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGJ1ZnMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Cisg
ICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51
bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZh
bHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0oZHJh
d2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRy
YXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKQoreworICAgIFVOVVNF
RF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBVTlVT
RURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0
IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Cisg
ICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkZXB0aCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0ZW5jaWwpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3Qg
cXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKK30KKworR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKK3sK
KyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxh
dGZvcm1HTE9iamVjdCBxdWVyeSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBV
TlVTRURfUEFSQU0ocXVlcnkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
bmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Cit9
CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKworICAgIHJldHVybiAwOworfQorCitHQ0dM
dWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aShQbGF0Zm9ybUdM
T2JqZWN0IHF1ZXJ5LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkp
OworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK1BsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQoreworICAg
IHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1w
bGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxl
cik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQorewor
ICAgIFVOVVNFRF9QQVJBTSh1bml0KTsKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCit7CisgICAg
VU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5V
U0VEX1BBUkFNKHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVT
RURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Cit9CisKK0dDR0xmbG9h
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Ft
cGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMC5mOworfQorCitH
Q0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQorCit7CisgICAgVU5VU0VEX1BB
UkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9
CisKK0dDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMoR0NHTGVudW0g
Y29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbmRp
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKworICAgIHJldHVybiAwOworfQorCitH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTeW5jKEdDR0xzeW5jIHN5bmMpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworfQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdz
LCBHQ0dMdWludDY0IHRpbWVvdXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVO
VVNFRF9QQVJBTShmbGFncyk7CisgICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOworCisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdDR0xz
eW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisgICAgVU5VU0VE
X1BBUkFNKHRpbWVvdXQpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3luYyk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKwor
UGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3Jt
RmVlZGJhY2soKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQorewor
ICAgIFVOVVNFRF9QQVJBTShpZCk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCit7CisgICAg
VU5VU0VEX1BBUkFNKGlkKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBV
TlVTRURfUEFSQU0oaWQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdp
blRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCit7CisgICAgVU5VU0VE
X1BBUkFNKHByaW1pdGl2ZU1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh2YXJ5aW5ncyk7
CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlck1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYpCit7CisgICAgVU5VU0VEX1BBUkFN
KHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQoreworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VE
X1BBUkFNKGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRC
dWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQoreworICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgVU5VU0VE
X1BBUkFNKHNpemUpOworfQorCitWZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFtZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0p
OworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtTmFtZXMpOworCisgICAgcmV0dXJuIHsgfTsKK30K
KworVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlm
b3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVu
aWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBWZWN0b3I8R0NHTGludD4gcmVz
dWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFW
RShPUEVOR0xfRVNfMykKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIDo6Z2xHZXRBY3RpdmVV
bmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMu
ZGF0YSgpLCBwbmFtZSwgcmVzdWx0LmRhdGEoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShw
cm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1C
bG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3Jt
QmxvY2tOYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFS
QU0odW5pZm9ybUJsb2NrTmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KQoreworICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
dW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCit7CisgICAg
VU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRl
eCk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0JpbmRpbmcpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAg
ICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURf
UEFSQU0oaGVpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKKyAgICBVTlVTRURfUEFS
QU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1aW50IHByb2dyYW0s
IEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NH
TGludD4gcGFyYW1zKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURf
UEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAg
VU5VU0VEX1BBUkFNKHBhcmFtcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtICwgR0NHTGludHB0cikKK3sKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBH
Q0dMZW51bSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51
bSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdD
R0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1Yklt
YWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdD
R0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dm9pZD4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRU
ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQoreworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dM
ZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGlu
dCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0s
IEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSwgR0NH
TFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnQgdW5wYWNrQWxpZ25tZW50KQoreworICAgIEFTU0VSVCh1bnBhY2tBbGln
bm1lbnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0g
NCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7CisgICAgVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hh
cj4gemVybzsKKyAgICB1bnNpZ25lZCBzaXplID0gMDsKKyAgICBpZiAod2lkdGggPiAwICYmIGhl
aWdodCA+IDApIHsKKyAgICAgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CisgICAgICAgIHBh
cmFtcy5hbGlnbm1lbnQgPSB1bnBhY2tBbGlnbm1lbnQ7CisgICAgICAgIEdDR0xlbnVtIGVycm9y
ID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAx
LCBwYXJhbXMsICZzaXplLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGVycm9yICE9
IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHplcm8gPSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4oc2l6ZSk7CisgICAgICAg
IGlmICghemVybykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKKyAgICB9CisgICAgdGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bhbih6ZXJvLmdldCgpLCBzaXplKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTAzLDYgKzMxNzcsNiBAQCBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRS
ZXN1bHRzRm9yUGFpbgogICAgIHJldHVybiByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKIH0KIAot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgKaW5kZXggNmM4MWVhN2E4ODk1NDBkNTNlMDY1ZDQ1MzRiNDY5NTZmMjBjZmEx
Zi4uYmE5ZDVhZjkwZDc0ODVhNzY0MzU2OTJkYjU2MGFiYmU5ZDgxNTA1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTI1LDUzICsyNSwxNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUp
CiAKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRl
IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKLSNp
ZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5oIgotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ0Ep
Ci0jaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCi0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkK
LSNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgotI2Vsc2UKLSNpbmNsdWRlICJBTkdMRVdlYktp
dEJyaWRnZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIgotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BV
UmVxdWVzdC5oIgotI2VuZGlmCi0KLS8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBhdm9p
ZCB0aGUgbmFtZSBjb25mbGljdGlvbiBmb3IgTk9fRVJST1IuCi0jaWYgUExBVEZPUk0oV0lOKQot
I3VuZGVmIE5PX0VSUk9SCi0jZWxpZiBQTEFURk9STShHVEspCi0vLyBUaGlzIGRlZmluZSBpcyBm
cm9tIHRoZSBYMTEgaGVhZGVycywgYnV0IGl0J3MgdXNlZCBiZWxvdywgc28gd2UgbXVzdCB1bmRl
ZmluZSBpdC4KLSN1bmRlZiBWRVJTSU9OCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
T0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXZWJHTExheWVyOwotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOwotfQotI2VuZGlmIC8vIFBM
QVRGT1JNKENPQ09BKQotCiAjaWYgVVNFKE5JQ09TSUEpCiBuYW1lc3BhY2UgTmljb3NpYSB7CiBj
bGFzcyBHQ0dMTGF5ZXI7CkBAIC04MCw5ICs0NCw3IEBAIGNsYXNzIEdDR0xMYXllcjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRXh0ZW5zaW9uc0dMOwotI2lmIFVTRShBTkdMRSkKLWNs
YXNzIEV4dGVuc2lvbnNHTEFOR0xFOwotI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpZiBVU0UoT1BF
TkdMX0VTKQogY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7CiAjZWxpZiBVU0UoT1BFTkdMKQog
Y2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMOwpAQCAtOTcsMjggKzU5LDExIEBAIGNsYXNzIFRleHR1
cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKIAogdHlwZWRlZiBIYXNoTWFwPENTdHJpbmcsIHVp
bnQ2NF90PiBTaGFkZXJOYW1lSGFzaDsKIAorLy8gQmFzZSBjbGFzcyBmb3IgR3JhcGhpY3NDb250
ZXh0R0wgY29udGV4dHMgdGhhdCB1c2UgT3BlbkdMIG9yIE9wZW5HTCBFUy4KIGNsYXNzIFdFQkNP
UkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dEdMCiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKTsK
LSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0jaWYg
VVNFKEFOR0xFKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRmb3Jt
RGlzcGxheSgpIGNvbnN0OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgcGxh
dGZvcm1Db25maWcoKSBjb25zdDsKLSAgICBHQ0dMZW51bSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRh
cmdldCgpOwotICAgIHN0YXRpYyBHQ0dMZW51bSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldFF1
ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKLSAgICBzdGF0aWMg
R0NHTGludCBFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZvckRyYXdpbmdUYXJnZXQoR0NH
TGVudW0gZHJhd2luZ1RhcmdldCk7Ci0gICAgZW51bSBjbGFzcyBSZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VCZWhhdmlvciB7Ci0gICAgICAgIC8vIFJlbGVhc2VzIGN1cnJlbnQgY29udGV4dCBhZnRlciBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCBjYWxscyBkb25lIGluIHRoZSB0aHJlYWQuCi0gICAgICAg
IFJlbGVhc2VDdXJyZW50Q29udGV4dCwKLSAgICAgICAgLy8gUmVsZWFzZXMgYWxsIHRocmVhZCBy
ZXNvdXJjZXMgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgY2FsbHMgZG9uZSBpbiB0aGUg
dGhyZWFkLgotICAgICAgICBSZWxlYXNlVGhyZWFkUmVzb3VyY2VzLAotICAgICAgICAvLyBSZWxl
YXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBl
bmRpbmcgb2JqZWN0cyBoYXZlCi0gICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCi0gICAgICAgIFRl
cm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMKLSAgICB9OwotICAgIHN0YXRpYyBib29s
IHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOwot
I2VuZGlmCiAKICAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNh
bXBsZUZCTyB0byByZWd1bGFyIEZCTy4KICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CkBAIC0x
MzIsMTUgKzc3LDkgQEAgcHVibGljOgogICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdl
MkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCiAgICAgdm9pZCB0ZXhJ
bWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
KTsKIAotI2lmICFVU0UoQU5HTEUpCi0gICAgLy8gSGVscGVyIHRvIHRleEltYWdlMkQgd2l0aCBw
aXhlbD09MCBjYXNlOiBwaXhlbHMgYXJlIGluaXRpYWxpemVkIHRvIDAuCi0gICAgLy8gUmV0dXJu
IHRydWUgaWYgbm8gR0wgZXJyb3IgaXMgc3ludGhlc2l6ZWQuCi0gICAgLy8gQnkgZGVmYXVsdCwg
YWxpZ25tZW50IGlzIDQsIHRoZSBPcGVuR0wgZGVmYXVsdCBzZXR0aW5nLgogICAgIGJvb2wgdGV4
SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgYWxp
Z25tZW50ID0gNCk7Ci0jZW5kaWYKIAogICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0
IGZpbmFsOwotCiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gRW50cnkgcG9pbnRzIGZvciBX
ZWJHTC4KICAgICAvLwpAQCAtMjA2LDkgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBHQ0dMaW50NjQg
Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKICAgICBHQ0dMaW50NjQgZ2V0SW50
ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpIGZpbmFsOwogICAgIEdDR0xp
bnQgZ2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkg
ZmluYWw7Ci0jaWYgIVVTRShBTkdMRSkKICAgICB2b2lkIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1i
b2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50
KiB2YWx1ZSk7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKICAgICBTdHJpbmcgZ2V0UHJvZ3JhbUlu
Zm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CiAgICAgU3RyaW5nIGdldFVubWFuZ2xlZElu
Zm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25zdCBTdHJpbmcmKTsKICAg
ICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBwbmFtZSkgZmluYWw7CkBAIC0yODYsMTAgKzIyMyw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgdXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKICAgICB2b2lkIHZhbGlkYXRl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKLSNpZiAhVVNFKEFOR0xFKQogICAgIGJv
b2wgY2hlY2tWYXJ5aW5nc1BhY2tpbmcoUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBs
YXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0OwogICAgIGJvb2wgcHJlY2lzaW9u
c01hdGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZy
YWdtZW50U2hhZGVyKSBjb25zdDsKLSNlbmRpZgogCiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihH
Q0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgpIGZpbmFsOwogICAgIHZvaWQgdmVydGV4QXR0cmli
MWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IHZhbHVlcykg
ZmluYWw7CkBAIC0zMTcsMTAgKzI1Miw4IEBAIHB1YmxpYzoKIAogICAgIC8vID09PT09PT09PT0g
V2ViR0wyIGVudHJ5IHBvaW50cy4KIAotI2lmICFVU0UoQU5HTEUpCiAgICAgdm9pZCBidWZmZXJE
YXRhKEdDR0xlbnVtIHRhcmdldCwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UsIEdD
R0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKTsKICAgICB2b2lkIGJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQq
IHNyY0RhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKTsKLSNlbmRpZgog
ICAgIHZvaWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0g
d3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNl
dCwgR0NHTHNpemVpcHRyIHNpemUpIGZpbmFsOwogCiAgICAgdm9pZCBnZXRCdWZmZXJTdWJEYXRh
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lkPiBk
YXRhKSBmaW5hbDsKQEAgLTQ0NSw5ICszNzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOwogICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBm
aW5hbDsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZl
ciYpIGZpbmFsOwotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgUmVmUHRyPE1lZGlhU2Ft
cGxlPiBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBsZSgpIGZpbmFsOwotI2VuZGlm
CiAKICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0c0Zv
clBhaW50aW5nKCk7CiAgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZENvbXBvc2l0
ZWRSZXN1bHRzRm9yUGFpbnRpbmcoKTsKQEAgLTQ1Niw5ICszODYsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQpOwogI2VuZGlmCiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSNlbmRpZgog
CiAgICAgdm9pZCBzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKSBmaW5hbDsKIApAQCAtNDg0LDEy
ICs0MTEsOCBAQCBwdWJsaWM6CiAgICAgLy8gYWxsIG1ldGhvZHMgaXQgY29udGFpbnMgbWF5IG5l
Y2Vzc2FyaWx5IGJlIHN1cHBvcnRlZCBvbiB0aGUKICAgICAvLyBjdXJyZW50IGhhcmR3YXJlLiBN
dXN0IGNhbGwgRXh0ZW5zaW9uc0dMOjpzdXBwb3J0cygpIHRvCiAgICAgLy8gZGV0ZXJtaW5lIHRo
aXMuCi0jaWYgIVVTRShBTkdMRSkKICAgICAvLyBVc2UgY292YXJpYW50IHJldHVybiB0eXBlIGZv
ciBPUEVOR0wvT1BFTkdMX0VTCiAgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBnZXRFeHRl
bnNpb25zKCkgZmluYWw7Ci0jZWxzZQotICAgIEV4dGVuc2lvbnNHTCYgZ2V0RXh0ZW5zaW9ucygp
IGZpbmFsOwotI2VuZGlmCiAKICAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVs
YXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CiAKQEAgLTQ5NywzMSArNDIwLDExIEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKSBvdmVycmlkZTsKIAotI2lmIEVO
QUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLSAgICBHcmFwaGljc0NvbnRleHRHTENW
KiBhc0NWKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHBhaW50VG9DYW52YXMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiwgUGl4ZWxCdWZmZXImJiwgY29uc3Qg
SW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0Jik7Ci0KLSNpZiBVU0UoQU5HTEUp
Ci0gICAgY29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkZWZhdWx0RGlzcGxh
eSA9IEVHTF9ERUZBVUxUX0RJU1BMQVk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgY29uc3Rl
eHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBsb3dQb3dlckRpc3BsYXkgPSBFR0xfQ0FT
VChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTEpOwotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0
aXZlRGlzcGxheVR5cGUgaGlnaFBlcmZvcm1hbmNlRGlzcGxheSA9IEVHTF9DQVNUKEVHTE5hdGl2
ZURpc3BsYXlUeXBlLCAtMik7Ci0jZW5kaWYKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbiBt
X3N3YXBDaGFpbjsKLSAgICBFR0xEaXNwbGF5IG1fZGlzcGxheU9iaiB7IG51bGxwdHIgfTsKLSAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dE9iaiB7IG51bGxwdHIgfTsKLSAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnT2JqIHsgbnVsbHB0ciB9
OwotI2VuZGlmCisKICAgICBHQ0dMdWludCBtX3RleHR1cmUgeyAwIH07CiAKLXByaXZhdGU6CiAg
ICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIHRoYXQgZXZl
bnR1YWxseSBjYWxsIE9wZW5HTC4KICAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1Ymxp
YyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5H
TC4KICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKQEAg
LTU0NywyNCArNDUwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgPSBJbnRSZWN0KCkpOwogICAgIHZvaWQgYXR0YWNo
RGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0NHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5j
aWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKLSNpZiBVU0UoQU5HTEUpCi0gICAg
Ym9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKLSNlbmRpZgotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIGJvb2wgYWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsK
LSAgICBib29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKLSAgICBzdGF0aWMgYm9vbCBtYWtlQ3VycmVu
dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSwgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHRHTCk7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTsKLSNlbmRp
ZgotI2lmIFVTRShBTkdMRSkKLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGNvbnRleHQgc2hvdWxk
IGJlIGxvc3QgZHVlIHRvIHRpbWVvdXQuCi0gICAgYm9vbCB3YWl0QW5kVXBkYXRlT2xkZXN0RnJh
bWUoKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICAvLyBQbGF0Zm9ybSBzcGVjaWZpYyBiZWhh
dmlvciBmb3IgcmVsZWFzZVJlc291cmNlcygpOwotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtUmVs
ZWFzZVRocmVhZFJlc291cmNlcygpOwotI2VuZGlmCiAKLSNpZiAhVVNFKEFOR0xFKQogICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFVuaXF1ZVJlZjxzaDo6U2hhZGVyVmFyaWFibGU+PiBTaGFk
ZXJTeW1ib2xNYXA7CiAKICAgICBzdHJ1Y3QgU2hhZGVyU291cmNlRW50cnkgewpAQCAtNjMxLDEy
ICs1MTcsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBvcmlnaW5hbFN5
bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRl
clN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2hhZGVyTmFtZUhhc2g+IG5hbWVIYXNoTWFwRm9yU2hhZGVyczsKLSNlbmRpZiAvLyAhVVNFKEFO
R0xFKQogCi0jaWYgVVNFKEFOR0xFKQotICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zR0xBTkdM
RTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+IG1fZXh0ZW5zaW9uczsK
LSNlbGlmIFVTRShPUEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKICAgICBmcmllbmQgY2xh
c3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7CiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNHTE9w
ZW5HTENvbW1vbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+IG1f
ZXh0ZW5zaW9uczsKQEAgLTY0OCw5ICs1MzAsNyBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFZl
Y3RvcjxmbG9hdD4+IG1fdmVydGV4QXJyYXk7CiAKLSNpZiAhVVNFKEFOR0xFKQogICAgIEFOR0xF
V2ViS2l0QnJpZGdlIG1fY29tcGlsZXI7Ci0jZW5kaWYKIAogICAgIEdDR0x1aW50IG1fZmJvIHsg
MCB9OwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKQEAgLTY1OCw1NCArNTM4LDE0IEBA
IHByaXZhdGU6CiAgICAgR0NHTHVpbnQgbV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsgMCB9OwogI2Vu
ZGlmCiAKLSNpZiAhVVNFKEFOR0xFKSAmJiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVOR0xf
RVMpCiAgICAgR0NHTHVpbnQgbV9kZXB0aEJ1ZmZlciB7IDAgfTsKICAgICBHQ0dMdWludCBtX3N0
ZW5jaWxCdWZmZXIgeyAwIH07CiAjZW5kaWYKICAgICBHQ0dMdWludCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlciB7IDAgfTsKIAogICAgIEdDR0x1aW50IG1faW50ZXJuYWxDb2xvckZvcm1hdCB7IDAgfTsK
LSNpZiBVU0UoQU5HTEUpCi0gICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCB7IDAgfTsKLSNlbmRpZgotICAgIHN0cnVjdCBHcmFwaGljc0NvbnRleHRHTFN0YXRlIHsKLSAg
ICAgICAgR0NHTHVpbnQgYm91bmRSZWFkRkJPIHsgMCB9OwotICAgICAgICBHQ0dMdWludCBib3Vu
ZERyYXdGQk8geyAwIH07Ci0gICAgICAgIEdDR0xlbnVtIGFjdGl2ZVRleHR1cmVVbml0IHsgR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkUwIH07Ci0KLSAgICAgICAgdXNpbmcgQm91bmRUZXh0dXJl
TWFwID0gSGFzaE1hcDxHQ0dMZW51bSwKLSAgICAgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwg
R0NHTGVudW0+LAotICAgICAgICAgICAgSW50SGFzaDxHQ0dMZW51bT4sCi0gICAgICAgICAgICBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50PiwKLSAgICAgICAgICAg
IFBhaXJIYXNoVHJhaXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVp
bnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KLSAgICAg
ICAgPjsKLSAgICAgICAgQm91bmRUZXh0dXJlTWFwIGJvdW5kVGV4dHVyZU1hcDsKLSAgICAgICAg
R0NHTHVpbnQgY3VycmVudEJvdW5kVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVy
ZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0KLSAgICAgICAgR0NHTHVpbnQgYm91bmRUZXh0dXJlKEdD
R0xlbnVtIHRleHR1cmVVbml0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0
ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOwotICAgICAgICAgICAg
aWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4dHVyZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmZpcnN0OwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIH0KLQotICAgICAgICBHQ0dMdWludCBjdXJyZW50Qm91bmRUYXJnZXQoKSBjb25zdCB7IHJl
dHVybiBib3VuZFRhcmdldChhY3RpdmVUZXh0dXJlVW5pdCk7IH0KLSAgICAgICAgR0NHTGVudW0g
Ym91bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIGF1dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0dXJlVW5pdCk7
Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuc2Vjb25kOwotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEJvdW5kVGV4dHVyZShHQ0dM
ZW51bSB0ZXh0dXJlVW5pdCwgR0NHTHVpbnQgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0KHRleHR1cmVVbml0LCBzdGQ6
Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVzaW5n
IFRleHR1cmVTZWVkQ291bnQgPSBIYXNoQ291bnRlZFNldDxHQ0dMdWludCwgSW50SGFzaDxHQ0dM
dWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+PjsKLSAg
ICAgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OwotICAgIH07CiAKICAgICBH
cmFwaGljc0NvbnRleHRHTFN0YXRlIG1fc3RhdGU7CiAKQEAgLTcxNCwxNiArNTU0LDYgQEAgcHJp
dmF0ZToKICAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9
OwogICAgIEdDR0x1aW50IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciB7IDAgfTsKIAotI2lmIFVT
RShBTkdMRSkKLSAgICAvLyBGb3IgcHJlc2VydmVEcmF3aW5nQnVmZmVyOnRydWUgd2l0aG91dCBt
dWx0aXNhbXBsaW5nLgotICAgIEdDR0x1aW50IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVy
ZSB7IDAgfTsKLSAgICAvLyBBdHRhY2hlcyBtX3RleHR1cmUgd2hlbiBtX3ByZXNlcnZlRHJhd2lu
Z0J1ZmZlclRleHR1cmUgaXMgbm9uLXplcm8uCi0gICAgR0NHTHVpbnQgbV9wcmVzZXJ2ZURyYXdp
bmdCdWZmZXJGQk8geyAwIH07Ci0gICAgLy8gUXVlcmllZCBhdCBkaXNwbGF5IHN0YXJ0dXAuCi0g
ICAgRUdMaW50IG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgeyAtMSB9OwotCi0jZW5kaWYK
LQogICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4KICAgICBMaXN0
SGFzaFNldDxHQ0dMZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7CiAKQEAgLTc0NCwyOSArNTc0LDgg
QEAgcHJpdmF0ZToKICNpZiBVU0UoQ0FJUk8pCiAgICAgUGxhdGZvcm1HTE9iamVjdCBtX3ZhbyB7
IDAgfTsKICNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLy8gQmFja2luZyBzdG9y
ZSBmb3IgdGhlIHRoZSBidWZmZXIgd2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5
LgotICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRo
ZSBkcmF3aW5nIGJ1ZmZlciBiYWNraW5nIHN0b3JlLgotICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3
aW5nQnVmZmVyID09IHRydWUsIHRoaXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVw
YXJlLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tp
bmc7Ci0gICAgdm9pZCogbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKLSNlbmRp
ZgotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNv
bmZpZ3VyYXRpb24geyBmYWxzZSB9OwotICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVl
c3QgbV9oaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0OwotI2VuZGlmCi0jaWYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHRHTENWQU5HTEU+IG1fY3Y7Ci0jZW5kaWYKLSNpZiBVU0UoQU5HTEUpCi0gICAgYm9vbCBtX3Vz
ZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKLSAgICBzaXplX3QgbV9vbGRlc3RGcmFt
ZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKLSAgICBTY29wZWRHTEZlbmNlIG1fZnJhbWVDb21wbGV0
aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKSAmJiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TENvbW1vbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMGQ2ZDM2N2YxZjk1
NDQ1YjBhNzljMTc0ZGE4OGEzZWU1MWNiOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4
ODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNo
aXZhbWlkb3dAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdM
RSkKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMRVMu
aCIKLSNlbHNlCi0jaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMLmgiCi0jZW5kaWYKLSNpbmNs
dWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
IkludFNpemUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKLSNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCi0jaW5jbHVkZSAiV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJF
eHByZXNzaW9uLmg+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU3Bl
Y2lmaWMuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlICJFcG94eVNo
aW1zLmgiCi0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIK
LSNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIk9wZW5HTFNo
aW1zLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgVGhyZWFkU3Bl
Y2lmaWM8U2hhZGVyTmFtZUhhc2gqPiYgZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkK
LXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0gICAgc3RhdGljIFRocmVh
ZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4qIHNoYXJlZE5hbWVIYXNoOwotICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIHNoYXJlZE5hbWVIYXNoID0gbmV3IFRocmVh
ZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj47Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gKnNoYXJl
ZE5hbWVIYXNoOwotfQotCi1zdGF0aWMgdm9pZCBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIoU2hhZGVyTmFtZUhhc2gqIHNoYWRlck5hbWVIYXNoKQotewotICAgICpnZXRDdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXIoKSA9IHNoYWRlck5hbWVIYXNoOwotfQotCi0vLyBIYXNoIGZ1bmN0
aW9uIHVzZWQgYnkgdGhlIEFOR0xFIHRyYW5zbGF0b3IvY29tcGlsZXIgdG8gZG8KLS8vIHN5bWJv
bCBuYW1lIG1hbmdsaW5nLiBTaW5jZSB0aGlzIGlzIGEgc3RhdGljIG1ldGhvZCwgYmVmb3JlCi0v
LyBjYWxsaW5nIGNvbXBpbGVTaGFkZXIgd2Ugc2V0IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRl
cgotLy8gdG8gcG9pbnQgdG8gdGhlIG1hcCBrZXB0IGJ5IHRoZSBjdXJyZW50IGluc3RhbmNlIG9m
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotCi1zdGF0aWMgdWludDY0X3QgbmFtZUhhc2hGb3JT
aGFkZXIoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBpZiAoIWxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDU3RyaW5nIG5hbWVBc0NTdHJpbmcgPSBDU3Ry
aW5nKG5hbWUpOwotCi0gICAgLy8gTG9vayB1cCBuYW1lIGluIG91ciBsb2NhbCBtYXAuCi0gICAg
U2hhZGVyTmFtZUhhc2gqJiBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIgPSAqZ2V0Q3VycmVu
dE5hbWVIYXNoTWFwRm9yU2hhZGVyKCk7Ci0gICAgU2hhZGVyTmFtZUhhc2g6Oml0ZXJhdG9yIGZp
bmRSZXN1bHQgPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmZpbmQobmFtZUFzQ1N0cmlu
Zyk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgIT0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVlOwotCi0gICAgdW5zaWduZWQg
aGFzaFZhbHVlID0gbmFtZUFzQ1N0cmluZy5oYXNoKCk7Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSAz
Mi1iaXQgaGFzaCBmcm9tIENTdHJpbmc6Omhhc2ggaW50byBhIDY0LWJpdCByZXN1bHQKLSAgICAv
LyBieSBzaGlmdGluZyB0aGVuIGFkZGluZyB0aGUgc2l6ZSBvZiBvdXIgdGFibGUuIE92ZXJmbG93
IHdvdWxkCi0gICAgLy8gb25seSBiZSBhIHByb2JsZW0gaWYgd2UncmUgYWxyZWFkeSBoYXNoaW5n
IHRvIHRoZSBzYW1lIHZhbHVlIChhbmQKLSAgICAvLyB3ZSdyZSBob3BpbmcgdGhhdCBvdmVyIHRo
ZSBsaWZldGltZSBvZiB0aGUgY29udGV4dCB3ZQotICAgIC8vIGRvbid0IGhhdmUgdGhhdCBtYW55
IHN5bWJvbHMpLgotCi0gICAgdWludDY0X3QgcmVzdWx0ID0gaGFzaFZhbHVlOwotICAgIHJlc3Vs
dCA9IChyZXN1bHQgPDwgMzIpICsgKGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2l6ZSgp
ICsgMSk7Ci0KLSAgICBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNldChuYW1lQXNDU3Ry
aW5nLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRo
U3RlbmNpbEV4dGVuc2lvbikKLXsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMo
KTsKLQotICAgIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbiYgZXh0ZW5zaW9ucyA9IGdldEV4dGVu
c2lvbnMoKTsKLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBpZiAoZXh0ZW5zaW9u
cy5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7Ci0gICAgICAgICAgICBl
eHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKLSAg
ICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KLSAgICAgICAgICAg
IGF0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhdHRycy5z
dGVuY2lsID0gZmFsc2U7Ci0gICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAg
ICB9Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiAhbV9pc0ZvcldlYkdMMikgewotICAgICAg
ICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2Ft
cGxlIikpIHsKLSAgICAgICAgICAgIGF0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICAg
ICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUiKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBh
cmVUZXh0dXJlKCkKLXsKLSAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
Ci0jaWYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0
aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7Ci0gICAgVGVtcG9y
YXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Ci0jZW5k
aWYKLQotICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykKLSAgICAgICAgcmVz
b2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQotICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmUpOwot
ICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0gICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQw
X0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKLSAgICBnbEZsdXNoKCk7Ci0KLSAg
ICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwot
ICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91
bmREcmF3RkJPKTsKLSAgICBlbHNlCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgcmV0dXJuOwotI2VuZGlm
Ci0KLSAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7Ci0gICAgOjpnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fc3RhdGUuYm91bmRUYXJnZXQoR0xfVEVYVFVSRTApID09IEdM
X1RFWFRVUkVfMkQgPyBtX3N0YXRlLmJvdW5kVGV4dHVyZShHTF9URVhUVVJFMCkgOiAwKTsKLSAg
ICA6OmdsQWN0aXZlVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0KTsKLSAgICBBU1NF
UlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlm
IChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmREcmF3
RkJPKTsKLSAgICA6OmdsRmx1c2goKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKLXsKLSAgICBi
b29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCku
YW50aWFsaWFzKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIsIG1fZmJvKTsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2Zibykgewot
ICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IHJlYWRQaXhlbHNGb3JQYWludFJlc3Vs
dHMoKTsKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZC
Tyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaWYgKHdpZHRoID09IG1f
Y3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdodCA+PSAwKTsKLSAgICBpZiAod2lk
dGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcmtDb250ZXh0Q2hhbmdl
ZCgpOwotCi0gICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKLSAgICBtX2N1cnJlbnRIZWlnaHQg
PSBoZWlnaHQ7Ci0KLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLQotICAgIFRlbXBvcmFyeU9w
ZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKLSAg
ICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNF
KTsKLSAgICAKLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gcmVzaGFwZUZCT3MoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4K
LSAgICBHTGZsb2F0IGNsZWFyQ29sb3JbXSA9IHswLCAwLCAwLCAwfSwgY2xlYXJEZXB0aCA9IDA7
Ci0gICAgR0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKLSAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10g
PSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RS
VUU7Ci0gICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZiwgc3RlbmNpbE1hc2tCYWNr
ID0gMHhmZmZmZmZmZjsKLSAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZF
Ul9CSVQ7Ci0gICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xv
cik7Ci0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgOjpnbEdldEJvb2xlYW52
KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKLSAgICA6OmdsQ29sb3JNYXNrKEdMX1RS
VUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOwotCi0gICAgYXV0byBhdHRycyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgOjpnbEdl
dEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOwotICAgICAgICBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsKLSAgICAgICAgOjpnbEdldEJvb2xl
YW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7Ci0gICAgICAgIDo6Z2xEZXB0aE1h
c2soR0xfVFJVRSk7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwot
ICAgIH0KLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICA6OmdsR2V0SW50ZWdlcnYo
R0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIDo6Z2xDbGVh
clN0ZW5jaWwoMCk7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX1dSSVRFTUFT
SywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykpOwotICAgICAgICA6Omds
R2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxH
TGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0
ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxf
QlVGRkVSX0JJVDsKLSAgICB9Ci0KLSAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKLQotICAgIDo6
Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0s
IGNsZWFyQ29sb3JbM10pOwotICAgIDo6Z2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1h
c2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKLSAgICBpZiAoYXR0cnMuZGVwdGgp
IHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoY2xlYXJEZXB0
aCk7Ci0gICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKLSAgICB9Ci0gICAgaWYgKGF0
dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwpOwot
ICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgc3RlbmNpbE1hc2spOwot
ICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCBzdGVuY2lsTWFza0JhY2sp
OwotICAgIH0KLQotICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRE
cmF3RkJPKTsKLQotICAgIGF1dG8gZXJyb3IgPSA6OmdsR2V0RXJyb3IoKTsKLSAgICBpZiAoZXJy
b3IgIT0gR0xfTk9fRVJST1IpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViR0wsICJGYXRhbDog
T3BlbkdMIGVycm9yIGR1cmluZyBHcmFwaGljc0NvbnRleHRHTCBidWZmZXIgaW5pdGlhbGl6YXRp
b24gKCVkKS4iLCBlcnJvcik7Ci0gICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIDo6Z2xGbHVzaCgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybUdMT2JqZWN0IHZlcnRl
eFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKLXsKLSAgICBB
U1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Ci0gICAgQVNT
RVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0gICAgY29u
c3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRl
ciktPnZhbHVlOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywg
c2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdzOwotICAgIGZvciAoY29uc3QgYXV0
byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWluZ01hcCkgewotICAgICAgICBjb25z
dCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wua2V5OwotICAgICAgICAvLyBUaGUg
dmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBlYWNoIGluZGV4IG9mIGFuIGFycmF5
IHZhcmlhYmxlLgotICAgICAgICAvLyBXZSBvbmx5IHdhbnQgYSBzaW5nbGUgdmFyaWFibGUgdG8g
cmVwcmVzZW50IHRoZSBhcnJheS4KLSAgICAgICAgaWYgKHN5bWJvbE5hbWUuZW5kc1dpdGgoIl0i
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIERvbid0IGNvdW50IGJ1aWx0
IGluIHZhcnlpbmdzLgotICAgICAgICBpZiAoc3ltYm9sTmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIiB8
fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfUG9p
bnRDb29yZCIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBhdXRvJiBm
cmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWluZ01hcC5maW5kKHN5bWJvbE5hbWUp
OwotICAgICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFw
LmVuZCgpKQotICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5ncy5hZGQoc3ltYm9sTmFtZSwgZnJh
Z21lbnRTeW1ib2wtPnZhbHVlKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbnVtVmFyeWluZ3MgPSBj
b21iaW5lZFZhcnlpbmdzLnNpemUoKTsKLSAgICBpZiAoIW51bVZhcnlpbmdzKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJsZT4gdmFyaWFi
bGVzOwotICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBjb21iaW5lZFZhcnlpbmdzLnZhbHVl
cygpKQotICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZhcnlpbmdTeW1ib2wpOwotCi0gICAg
R0NHTGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICA6
OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdWZWN0b3JzKTsK
LSNlbHNlCi0gICAgaWYgKG1faXNGb3JXZWJHTDIpCi0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihH
TF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIGVsc2Ugewot
ICAgICAgICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMgPSAwOwotICAgICAgICA6OmdsR2V0SW50
ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFyeWluZ0Zsb2F0cyk7Ci0gICAgICAg
IG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0cyAvIDQ7Ci0gICAgfQotI2VuZGlm
Ci0gICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMobWF4VmFy
eWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZv
cm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zaGFkZXJT
b3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291
cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0gICAgY29uc3QgYXV0byYgdmVydGV4
RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOwotICAg
IGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdt
ZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgc2g6OkdMZW51bT4gdmVy
dGV4U3ltYm9sUHJlY2lzaW9uTWFwOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IHZl
cnRleEVudHJ5LnVuaWZvcm1NYXApIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBl
ZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOwotICAgICAgICB2ZXJ0ZXhTeW1i
b2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUu
bGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24pOwotICAgIH0KLQotICAgIGZv
ciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5LnVuaWZvcm1NYXApIHsKLSAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBw
ZWROYW1lOwotICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQ
cmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxl
bmd0aCgpKSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wgIT0gdmVydGV4U3ltYm9sUHJlY2lz
aW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUgIT0gZW50cnkudmFsdWUuZ2V0KCku
cHJlY2lzaW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJl
KEdDR0xlbnVtIHRleHR1cmUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmU7
Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBBU1NFUlQo
c2hhZGVyKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0g
ICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChw
cm9ncmFtKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hB
REVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Ci0gICAgTE9HKFdlYkdMLCAiOjpiaW5k
QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwg
bWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICA6OmdsQmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHTHVpbnQgZmJvOwotICAgIGlmIChidWZm
ZXIpCi0gICAgICAgIGZibyA9IGJ1ZmZlcjsKLSAgICBlbHNlCi0gICAgICAgIGZibyA9IChjb250
ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7Ci0g
ICAgQVNTRVJUKHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUik7Ci0gICAgQVNTRVJUKG1fc3RhdGUu
Ym91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAoZmJvICE9IG1f
c3RhdGUuYm91bmREcmF3RkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFy
Z2V0LCBmYm8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRS
ZWFkRkJPID0gZmJvOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVy
YnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsK
LX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlLnNldEJvdW5kVGV4
dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0YXJnZXQpOwotICAgIDo6
Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRXF1YXRpb24obW9kZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShH
Q0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRXF1YXRpb25T
ZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Ci19ICAgICAgIAotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdD
R0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFscGhhKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVyRGF0
YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IHZvaWQ+IGRh
dGEsIEdDR0xlbnVtIHVzYWdlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgZGF0YS5idWZTaXpl
LCBkYXRhLmRhdGEsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNl
dCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURf
T1BFUkFUSU9OOwotCi0gICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRh
cmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0NH
TGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXIobWFzayk7Ci0gICAgY2hl
Y2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJT
dGVuY2lsKEdDR0xpbnQgcykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVh
biBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENvbG9y
TWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAg
QVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1ZSB0byB0aGUgd2F5IEFO
R0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKLSAgICAvLyBwb2ludCBhIGdsb2JhbCBoYXNobWFw
IHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgotICAgIFNoQnVpbHRJblJlc291cmNl
cyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgU2hIYXNo
RnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5j
dGlvbjsKLSAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24gPSBuYW1lSGFzaEZvclNoYWRl
cjsKLQotICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICBuYW1lSGFzaE1h
cEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwotICAgIHNldEN1cnJl
bnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOwotICAg
IG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLQotICAgIFN0cmluZyB0
cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT5nZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlQU5HTEUoc2hhZGVyKTsKLQotICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9
IHByZXZpb3VzSGFzaEZ1bmN0aW9uOwotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xF
UmVzb3VyY2VzKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7
Ci0KLSAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJh
bnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNo
YWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICBpbnQgdHJhbnNs
YXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmxlbmd0aCgpOwotCi0g
ICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xu
LS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuIiwgZ2V0U2hhZGVyU291cmNlKHNo
YWRlcikudXRmOCgpLmRhdGEoKSk7Ci0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIHRyYW5zbGF0
ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJj
ZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKLQotICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hh
ZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFkZXJMZW5ndGgpOwot
ICAgIAotICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgCi0gICAgaW50IGNvbXBp
bGVTdGF0dXM7Ci0gICAgCi0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFU
VVMsICZjb21waWxlU3RhdHVzKTsKLQotICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVz
dWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIFNoYWRlclNvdXJjZUVu
dHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0KLSAgICAvLyBQb3B1bGF0ZSB0aGUgc2hhZGVy
IGxvZwotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwg
R0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAgIGlmIChsZW5ndGgpIHsKLSAgICAg
ICAgR0xzaXplaSBzaXplID0gMDsKLSAgICAgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgp
OwotICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGlu
Zm8uZGF0YSgpKTsKLQotICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNo
YWRlciwgMCB9OwotICAgICAgICBlbnRyeS5sb2cgPSBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRl
cnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwotICAgIH0KLQotICAgIGlmIChjb21w
aWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOwot
ICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRyYW5zbGF0b3IgcHJvZHVjZWQgYSBz
aGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUuIik7Ci0gICAgfQotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hNYXA8UGxhdGZvcm1HTE9i
amVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkg
PSByZXN1bHQtPnZhbHVlOwotCi0gICAgY29uc3QgQ1N0cmluZyYgc2hhZGVyU291cmNlQ1N0cmlu
ZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogc2hhZGVyU291cmNlUHRy
ID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7Ci0gICAgaW50IHNoYWRlclNvdXJjZUxlbmd0
aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBMT0coV2ViR0wsICItLS0g
YmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBkaXJlY3Qgc2hhZGVy
IHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7Ci0KLSAgICA6OmdsU2hhZGVyU291cmNl
KHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRlclNvdXJjZUxlbmd0aCk7Ci0KLSAg
ICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotCi0gICAgaW50IGNvbXBpbGVTdGF0dXM7Ci0K
LSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0
dXMpOwotCi0gICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xfVFJVRSkgewotICAgICAgICBlbnRy
eS5pc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRGlyZWN0IGNvbXBpbGF0aW9u
IG9mIHNoYWRlciBzdWNjZWVkZWQuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW50cnkuaXNW
YWxpZCA9IGZhbHNlOwotICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogZGlyZWN0IGNvbXBpbGF0
aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGF0dHJzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9
PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIHJlc29sdmVN
dWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX2Zibyk7Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBpZiAo
YXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVG
Qk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGF0dHJzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJv
dW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNh
bXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoYXR0cnMuYW50
aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
LCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBmdW5jKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xE
ZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRo
TWFzayhHQ0dMYm9vbGVhbiBmbGFnKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsK
LSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUo
cHJvZ3JhbSk7Ci0gICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
RGlzYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdB
cnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50KQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVt
IG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxH
THZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotICAgIGNoZWNrR1BVU3Rh
dHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZShHQ0dMZW51
bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpmaW5pc2goKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xGaW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Zmx1c2goKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0
YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsRnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdlbmVyYXRlTWlwbWFwKHRh
cmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJp
YkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5m
byYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR0xp
bnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBH
TF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXplKTsKLSAgICBW
ZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJVkVfQVRUUklC
VVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNpemVpIG5h
bWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsK
LSAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhBdHRyaWJ1dGVTaXpl
LCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAgaWYgKCFuYW1l
TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3RyaW5nIG9yaWdpbmFs
TmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRU
UklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAKLSNpZm5kZWYg
TkRFQlVHCi0gICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsK
LSAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIGF0dHJpYnV0ZSAl
ZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCku
ZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgIGluZm8u
bmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6
ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIEdDR0xpbnQgc3ltYm9sQ291bnQ7Ci0g
ICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dy
YW0pOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5k
KCkpIHsKLSAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdy
YXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywgJnN5bWJvbENvdW50KTsKLSAgICAg
ICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsK
LSAgICB9Ci0gICAgCi0gICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMg
PSByZXN1bHQtPnZhbHVlOwotICAgIEdDR0x1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9s
Q291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5zaXplKCkpID8gc3ltYm9s
Q291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcFtpbmRleF0gOiAtMTsKLQot
ICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIHJhd0luZGV4LCBpbmZvKTsK
LX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5m
bykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHTGludCBt
YXhVbmlmb3JtU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJ
VkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwotCi0gICAgVmVjdG9yPEdM
Y2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAw
OwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICA6OmdsR2V0
QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3Ro
LCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2lu
YWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBTdHJpbmco
bmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgU3Ry
aW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBMT0coV2ViR0ws
ICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZvcm0gJWQgZnJvbSAnJXMnIHRvICcl
cyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxO
YW1lLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAgCi0gICAgaW5mby5uYW1lID0gb3JpZ2lu
YWxOYW1lOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQotewotICAgIEdDR0xpbnQgc3ltYm9sQ291bnQ7Ci0gICAgYXV0byByZXN1
bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlm
IChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAg
ICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4
dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7Ci0gICAgICAgIHJlc3VsdCA9IG1f
c2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgfQotICAgIAot
ICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1
ZTsKLSAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJl
ZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRU
b0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsKLSAgICAKLSAgICByZXR1cm4gZ2V0
QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3Jt
R0xPYmplY3QqIHNoYWRlcnMpCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xH
ZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKLX0K
LQotc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQot
ewotICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgdWlu
dDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFtZS51dGY4KCkuZGF0YSgpLCBuYW1l
Lmxlbmd0aCgpKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygid2ViZ2xfIiwgaGV4KG51bWJlciwg
TG93ZXJjYXNlKSk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3VsdC0+
dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOwotICAgIGF1dG8gc3ltYm9sRW50cnkgPSBzeW1i
b2xNYXAuZmluZChuYW1lKTsKLSAgICBpZiAoc3ltYm9sRW50cnkgPT0gc3ltYm9sTWFwLmVuZCgp
KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgYXV0byYgbWFwcGVkTmFtZSA9
IHN5bWJvbEVudHJ5LT52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOwotICAgIHJldHVybiBTdHJpbmco
bWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKTsKLX0KLQotU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwotICAgIFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyc1syXSA9IHsgfTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNv
dW50LCBzaGFkZXJzKTsKLQotICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJj
ZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1hcHBlZE5h
bWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAg
IC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBs
aW5raW5nLgotICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFt
KTsKLSAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgpKSB7Ci0gICAgICAg
IGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgICAgIGF1dG8gbWFwcGVk
TmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuZmlyc3Qs
IHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAgICAgICAgICAg
IHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgICAgIG1hcHBlZE5hbWUgPSBtYXBwZWRT
eW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwg
bmFtZSk7Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBl
ZE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lN
Qk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBBdHRy
aWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkgYmUgcmVxdWVzdGVkIGJlZm9yZSBh
bnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCi0gICAgICAgIC8vIGFuZCBhcmVuJ3QgZXZl
biByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIgcHJvZ3JhbS4KLSAgICAgICAgaWYg
KCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRl
cnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwotICAgICAgICBzZXRDdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFkZXJzLmdldCgpKTsKLQotICAgICAg
ICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hlZE5hbWUobmFtZSk7Ci0KLSAgICAg
ICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51bGxwdHIpOwotCi0gICAgICAgIG1f
cG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVyYXRlZE5hbWUsIG5hbWUpOwotCi0g
ICAgICAgIHJldHVybiBnZW5lcmF0ZWROYW1lOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdp
bmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xF
U2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAg
YXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJl
c3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9s
TWFwKHN5bWJvbFR5cGUpOwotICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1i
b2xNYXApIHsKLSAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFw
cGVkTmFtZS5jX3N0cigpKQotICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBB
TkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIEdDR0xzaXplaSBjb3VudDsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07Ci0g
ICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0gICAg
Ci0gICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGF1
dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJz
W2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKLSAgICAg
ICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBt
aWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4K
LSAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAg
aWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgewotICAgICAgICBhdXRvIGxp
bmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOwotICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9
IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3lt
Ym9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICBy
ZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgICAgIG9yaWdpbmFsTmFtZSA9IG9yaWdp
bmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5zZWNvbmQsIHN5bWJvbFR5
cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQotICAgICAgICAgICAgcmV0dXJu
IG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIGlmIChzeW1ib2xUeXBlID09IFNI
QURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQg
YmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKLSAgICAgICAgLy8gYW5kIGFy
ZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgotCi0g
ICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAu
ZmluZChuYW1lKTsKLSAgICAgICAgaWYgKGNhY2hlZCAhPSBtX3Bvc3NpYmx5VW51c2VkQXR0cmli
dXRlTWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC0+dmFsdWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0sIHNpemVfdCBjb3Vu
dCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGZvciAoc2l6ZV90IHN5bWJvbFR5cGUgPSAw
OyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oU0hBREVSX1NZTUJPTF9UWVBFX1ZB
UllJTkcpOyArK3N5bWJvbFR5cGUpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgICAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3Vs
dCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBTaGFkZXJTeW1ib2xNYXAmIHN5
bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0YXRpY19jYXN0PGVudW0gQU5HTEVT
aGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUg
PT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotfQotCi1pbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOwot
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0K
LSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVS
X1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Ci0gICAgTE9HKFdlYkdMLCAiOjpnbEdldEF0
dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1h
cHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlv
bihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1pbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAg
ICAgcmV0dXJuIC0xOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuIC0xOwotCi0KLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBtb3ZlZEFuRXJy
b3IgPSBmYWxzZTsKLQotICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMTAwIGhlcmUg
dG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCi0gICAgLy8gYSBwcm9ibGVtIGRyaXZlciBoYXMg
YSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9yLgotICAgIC8vIE90
aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19FUlJPUi4KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKLSAgICAgICAgR0NHTGVudW0gZXJy
b3IgPSBnbEdldEVycm9yKCk7Ci0gICAgICAgIGlmIChlcnJvciA9PSBOT19FUlJPUikKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwotICAg
ICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBtb3ZlZEFuRXJy
b3I7Ci19Ci0KLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigpCi17
Ci0gICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gTmVl
ZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxpc3Qg
aW4gY2FzZQotICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFscmVhZHkgdGhlcmUsIHNpbmNlIHRo
ZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCi0gICAgICAgIC8vIGdsR2V0RXJyb3IgYW5kIGdl
dEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3IgY29kZSBvbmNlLgotICAgICAgICBt
b3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICAgICAgcmV0dXJuIG1fc3ludGhl
dGljRXJyb3JzLnRha2VGaXJzdCgpOwotICAgIH0KLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLQotICAgIHJldHVy
biA6OmdsR2V0RXJyb3IoKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1v
ZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAg
IGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4g
OjpnbElzQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNF
bmFibGVkKGNhcCk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFm
cmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6
Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17
Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBy
ZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVm
ZmVyKQotewotICAgIGlmICghcmVuZGVyYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7
Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFM
U0U7Ci0KLSAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Ci19
Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlcikKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOwotfQotCi1HQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmpl
Y3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0IHdpZHRoKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xM
aW5lV2lkdGgod2lkdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5r
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0p
OwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotCi0g
ICAgR0NHTHNpemVpIGNvdW50ID0gMDsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0g
PSB7IH07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVy
cyk7Ci0KLSAgICBpZiAoY291bnQgPT0gMikKLSAgICAgICAgbV9saW5rZWRTaGFkZXJNYXAuc2V0
KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0sIHNoYWRlcnNbMV0pKTsKLQotICAg
IDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFBp
eGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NHTGZsb2F0IHVuaXRzKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBp
bnZlcnQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJj
ZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAg
QVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLQotICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5OwotCi0gICAgZW50cnku
c291cmNlID0gc3RyaW5nOwotCi0gICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgV1RG
TW92ZShlbnRyeSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3Rl
bmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLCBH
Q0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNl
LCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51
bSBmYWNlLCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1h
c2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVu
dW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsT3Ao
ZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZmFpbCwgR0NHTGVudW0g
emZhaWwsIEdDR0xlbnVtIHpwYXNzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWls
LCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQ
YXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1
ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVGV4UGFyYW1ldGVyaSh0YXJnZXQs
IHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xZihsb2Nh
dGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUsIGFycmF5LmRhdGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAs
IHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFT
U0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0yZnYobG9jYXRpb24sIGFycmF5
LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0
IHYxLCBHQ0dMZmxvYXQgdjIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQo
IShhcnJheS5idWZTaXplICUgMykpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5idWZT
aXplIC8gMywgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwg
R0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAs
IHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17
Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRmdihsb2NhdGlv
biwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUsIGFycmF5
LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJpKGxv
Y2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQot
ewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0yaXYobG9jYXRp
b24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdD
R0xpbnQgdjEsIEdDR0xpbnQgdjIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2
Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17Ci0gICAgQVNTRVJU
KCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXkuYnVm
U2l6ZSAvIDMsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NH
TGludCB2MiwgR0NHTGludCB2MykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYy
LCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17Ci0gICAgQVNT
RVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXku
YnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAg
QVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
biwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5
KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAxNikpOwotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWYWxpZGF0ZVByb2dyYW0ocHJv
Z3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4
LCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFm
dihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAxPiBhcnJheSkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9h
dCB2MCwgR0NHTGZsb2F0IHYxKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmZ2KEdDR0x1
aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IGFycmF5KQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0
ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHYw
LCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gYXJyYXkp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dM
ZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWludCBpbmRleCwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliNGZ2KGluZGV4
LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBl
LCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9m
ZnNldCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFs
aXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0
cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdw
b3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi1QbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCi17Ci0g
ICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5kZWxldGVWZXJ0ZXhBcnJheU9F
UyhhcnJheSk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Zl
cnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCi17Ci0gICAgcmV0dXJuIGdldEV4dGVu
c2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCi17Ci0g
ICAgZ2V0RXh0ZW5zaW9ucygpLmJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dM
U3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZS5k
YXRhKTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFy
YW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xpbnQg
dmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
biB2YWx1ZTsKLQotICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAm
dmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVl
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmRhdGEpOwotfQotCi1HQ0dMaW50NjQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgR0NHTGludDY0IHZhbHVlID0gMDsKLSAgICAvLyBGSVhN
RSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIg
dG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29u
dGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgotICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjR2KHBuYW1l
LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50NjQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4
KQotewotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IEdDR0xpbnQ2NCB2YWx1ZSA9IDA7Ci0gICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxp
bmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVh
dGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMu
MC4KLSAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1lLCBpbmRleCwgdmFsdWUpOwotICAg
IHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlm
IChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKLSAgICAgICAgYXR0YWNo
bWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVy
IHdvcmtzLgotICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0K
LQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAg
ICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2
YWx1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFj
dGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUs
IEdDR0xpbnQqIHZhbHVlKQotewotICAgIEFTU0VSVChBQ1RJVkVfQVRUUklCVVRFUyA9PSBwbmFt
ZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50
TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICAqdmFsdWUgPSByZXN1bHQtPnZhbHVlLmNvdW50
Rm9yVHlwZShwbmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3NoYWRlclBy
b2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRz
KCkpOwotICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gbV9zaGFk
ZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKS0+dmFsdWU7Ci0KLSAgICAvLyBS
ZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxkIGEgZmlsdGVyZWQgY291bnQsIGFu
ZCBhIG1hcHBpbmcgb2YKLSAgICAvLyBvdXIgaW50ZXJuYWwgYXR0cmlidXRlcyBpbmRleGVzIHRv
IHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUgT3BlbkdMLgotICAgIEdDR0xpbnQg
YXR0cmlidXRlQ291bnQgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZF
X0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7Ci0gICAgZm9yIChHQ0dMaW50IGkgPSAwOyBp
IDwgYXR0cmlidXRlQ291bnQ7ICsraSkgewotICAgICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAg
ICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwgaW5mbyk7Ci0gICAgICAgIGlmIChp
bmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwLmFwcGVu
ZChpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRG8gdGhlIHNhbWUgZm9yIHVuaWZvcm1zLgotICAg
IEdDR0xpbnQgdW5pZm9ybUNvdW50ID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0s
IEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Ci0gICAgZm9yIChHQ0dMaW50IGkgPSAw
OyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKLSAgICAgICAgQWN0aXZlSW5mbyBpbmZvOwotICAg
ICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKLSAgICAgICAgaWYg
KGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAKLSAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhN
YXAuYXBwZW5kKGkpOwotICAgIH0KLSAgICAKLSAgICAqdmFsdWUgPSBzeW1ib2xDb3VudHMuY291
bnRGb3JUeXBlKHBuYW1lKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVp
IGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKLXsKLSAgICBMT0coV2ViR0wsICJPcmlnaW5hbCBT
aGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBKU0M6OllhcnI6
OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAxMjM0NTY3ODlhYmNkZWZBQkNERUZd
KyIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRMb2c7Ci0gICAgCi0gICAgLy8gQU5H
TEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8gdGhlIHNoYWRlciBzb3VyY2UgdGhh
dAotICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBjb21waWxlcnMuIFRoZXJlIGlzIG5v
IHBvaW50IHNob3dpbmcKLSAgICAvLyB0aGlzIHdhcm5pbmcgdG8gdGhlIHVzZXIgc2luY2UgdGhl
eSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAotICAgIC8vIGlzIGNhdXNpbmcgaXQuCi0gICAg
c3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYW5nbGVXYXJuaW5nIHsgIldBUk5J
Tkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRlcjUnIGlzIG5vdCBzdXBwb3J0ZWRc
biJfcyB9OwotICAgIGludCBzdGFydEZyb20gPSBsb2cuc3RhcnRzV2l0aChhbmdsZVdhcm5pbmcp
ID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsKLSAgICBpbnQgbWF0Y2hlZExlbmd0
aCA9IDA7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGludCBzdGFydCA9IHJlZ0V4cC5tYXRjaChsb2cs
IHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOwotICAgICAgICBpZiAoc3RhcnQgPT0gLTEpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJz
dHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkpOwotICAgICAgICBzdGFydEZyb20g
PSBzdGFydCArIG1hdGNoZWRMZW5ndGg7Ci0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBtYW5nbGVk
U3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hlZExlbmd0aCk7Ci0gICAgICAgIGNv
bnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3ltYm9sTmFtZShzaGFkZXJzLCBjb3Vu
dCwgbWFuZ2xlZFN5bWJvbCk7Ci0gICAgICAgIExPRyhXZWJHTCwgIkRlbWFuZ2xpbmc6ICVzIHRv
ICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBtYXBwZWRTeW1ib2wudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobWFwcGVkU3ltYm9sKTsKLSAgICB9
IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+KGxvZy5sZW5ndGgoKSkpOwotCi0g
ICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgbG9nLmxlbmd0
aCgpIC0gc3RhcnRGcm9tKSk7Ci0KLSAgICBMT0coV2ViR0wsICJVbm1hbmdsZWQgU2hhZGVySW5m
b0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAg
cmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkK
LXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAg
IDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsK
LSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIEdMc2l6
ZWkgc2l6ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgIDo6Z2xH
ZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0K
LSAgICBHQ0dMc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdOwot
ICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0g
ICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgY291bnQsIFN0cmluZyhpbmZv
LmRhdGEoKSwgc2l6ZSkpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUp
Ci17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQot
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAg
R0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIHZhbHVlOwotCi0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgCi0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNh
c2UgREVMRVRFX1NUQVRVUzoKLSAgICBjYXNlIFNIQURFUl9UWVBFOgotICAgICAgICA6OmdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDT01QSUxFX1NUQVRVUzoKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1h
cC5lbmQoKSkKLSAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnZh
bHVlLmlzVmFsaWQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoK
LSAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAg
ICAgIHZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgotICAgICAgICB2YWx1ZSA9IGdl
dFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VOVU0pOwotICAgIH0KLSAg
ICByZXR1cm4gdmFsdWU7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgY29uc3QgU2hhZGVyU291cmNlRW50cnkm
IGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKLSAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCi0gICAgICAg
IHJldHVybiBlbnRyeS5sb2c7Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6Z2xHZXRT
aGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFs
ZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAw
OwotICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKLSAgICA6OmdsR2V0U2hhZGVySW5m
b0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgIFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07Ci0gICAgcmV0dXJuIGdldFVubWFu
Z2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci19Ci0K
LVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgY29uc3Qg
YXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsgCi0KLSAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3VyY2U7Ci19Ci0KLUdDR0xmbG9hdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgOjpnbEdl
dFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVl
OwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9
IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAg
IHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5p
Zm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48R0NHTGZsb2F0PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9u
LCB2YWx1ZS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5p
Zm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48R0NHTGludD4gdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwg
dmFsdWUuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZv
cm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxHQ0dMdWludD4gdmFsdWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVO
VVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLX0KLQotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9n
cmFtKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAt
MTsKLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBT
SEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7Ci0gICAgTE9HKFdlYkdMLCAiOjpnZXRV
bmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwg
bWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1HQ0dMc2l6ZWlw
dHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dMdWlu
dCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOwotICAgIDo6
Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90
Pihwb2ludGVyKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1Yklt
YWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xp
bnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVVT
RShPUEVOR0xfRVMpCi0gICAgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgIHR5
cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKLSNlbmRpZgotCi0gICAgaWYgKG1fdXNpbmdDb3JlUHJv
ZmlsZSkgIHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHZhbHVlcyB1c2VkIGlu
IFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNvcmUgcHJvZmlsZSwgc28g
d2UgbmVlZAotICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBhcyB3ZSBkbyBpbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewot
ICAgICAgICBjYXNlIEFMUEhBOgotICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdMX1JFRCB0
byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCi0gICAgICAgICAgICBmb3Jt
YXQgPSBSRUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkcgdG8gYmFjayBHTF9MVU1JTkFO
Q0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAgICAgICAgICAgIGZvcm1hdCA9IFJH
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVh
bCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMg
dGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KLSAgICA6OmdsVGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHBpeGVscy5kYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+IGRhdGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YS5kYXRh
KTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5k
VGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhv
ZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0
YS5kYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkJ1ZmZl
cnMoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQgbyA9IDA7Ci0g
ICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsK
LSAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1Q
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIoR0NH
TGVudW0gdHlwZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9T
SEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7Ci19Ci0KLVBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOwotICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsK
LSAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pIHsKLSAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBmb3Ig
ZHJhd2luZwotICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVsZXRlZC4KLSAg
ICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgZ2xEZWxl
dGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwotICAgIGdsRGVs
ZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdsRGVs
ZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuYm91
bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5VmFsdWUpIHsKLSAgICAg
ICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7Ci0gICAgfSk7Ci0gICAg
Z2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCi17Ci0gICAgLy8gTmVlZCB0byBt
b3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxpc3QgdG8KLSAg
ICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBzbyBhIGNhbGxlciB0byBnZXRFcnJv
ciB3aWxsIGdldAotICAgIC8vIGFueSBlcnJvcnMgZnJvbSBnbEVycm9yIGJlZm9yZSB0aGUgZXJy
b3Igd2UgYXJlIHN5bnRoZXNpemluZy4KLSAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKTsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0KCkKLXsKLSAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPmZvcmNl
Q29udGV4dExvc3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNs
ZUNvbnRleHQoKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xp
ZW50cykpCi0gICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRleHQoKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigp
Ci17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAg
ICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCBwaXhlbHMpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdD
R0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBnZXRFeHRlbnNpb25z
KCkuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50
KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkK
LXsKLSAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwg
Y291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdD
R0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQotewotICAgIGdldEV4dGVuc2lvbnMoKS52
ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwotfQotCi0jaWYgSEFWRShP
UEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRleCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsUHJpbWl0aXZlUmVz
dGFydEluZGV4KGluZGV4KTsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTGVu
dW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQotewotICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLSAgICBVTlVTRURf
UEFSQU0odXNhZ2UpOwotICAgIFVOVVNFRF9QQVJBTShzcmNPZmZzZXQpOwotICAgIFVOVVNFRF9Q
QVJBTShsZW5ndGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJT
dWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RCeXRlT2Zmc2V0LCBjb25zdCB2
b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxlbmd0aCkKLXsKLSAg
ICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZHN0Qnl0ZU9mZnNldCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHNyY0RhdGEpOwotICAgIFVOVVNFRF9QQVJBTShzcmNPZmZzZXQp
OwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotfQotCi0jaWYgSEFWRShPUEVOR0xfNCkgfHwg
SEFWRShPUEVOR0xfRVNfMykKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dM
aW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBz
aXplKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVh
ZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwotfQotI2Vsc2UKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGlu
dHB0ciwgR0NHTGludHB0ciwgR0NHTHNpemVpcHRyKQotewotfQotI2VuZGlmCi0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpCi17Ci0jaWYgSEFWRShP
UEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgR0NHTHZvaWQqIHB0ciA9IDo6Z2xNYXBCdWZmZXJS
YW5nZSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBHcmFwaGljc0NvbnRleHRHTDo6TUFQ
X1JFQURfQklUKTsKLSAgICBpZiAoIXB0cikKLSAgICAgICAgcmV0dXJuOwotICAgIG1lbWNweShk
YXRhLmRhdGEsIHB0ciwgZGF0YS5idWZTaXplKTsKLSAgICBpZiAoITo6Z2xVbm1hcEJ1ZmZlcih0
YXJnZXQpKQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04pOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBV
TlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci0gICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLSNlbmRp
ZgotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihH
Q0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kx
LCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRz
dFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQotewotICAgIFVOVVNFRF9Q
QVJBTShzcmNYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1kwKTsKLSAgICBVTlVTRURfUEFSQU0o
c3JjWDEpOwotICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFgw
KTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WTApOwotICAgIFVOVVNFRF9QQVJBTShkc3RYMSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKLSAgICBVTlVTRURfUEFSQU0obWFzayk7Ci0gICAgVU5V
U0VEX1BBUkFNKGZpbHRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVu
dCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGxheWVy
KQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2ht
ZW50KTsKLSAgICBVTlVTRURfUEFSQU0odGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxldmVs
KTsKLSAgICBVTlVTRURfUEFSQU0obGF5ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NH
TFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIFVOVVNFRF9QQVJBTSh0
YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Ci0gICAgVU5VU0VEX1BBUkFN
KHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAg
IFVOVVNFRF9QQVJBTShoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3JjKTsKLX0K
LQotI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBk
YXRhKQotewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEludGVybmFsZm9ybWF0aXYodGFyZ2V0
LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9y
bWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIFVOVVNFRF9QQVJBTShidWZTaXpl
KTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xUZXhTdG9yYWdlMkQodGFyZ2V0
LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBtX3N0YXRlLnRl
eHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xUZXhTdG9yYWdl
M0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7
Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7Ci19Ci0jZWxzZQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50
ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMU3BhbjxHQ0dM
aW50PikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3RvcmFnZTJEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNE
KEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NH
THNpemVpKQotewotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
cHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwotICAgIFVOVVNFRF9QQVJB
TSh4b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oeW9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFN
KHpvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLX0KLQot
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBVTlVTRURf
UEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKG5hbWUpOwotCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkoR0NHTGludCBs
b2NhdGlvbiwgR0NHTHVpbnQgdjApCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAg
ICBVTlVTRURfUEFSQU0odjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSkKLXsK
LSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1
aW50IHYyKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFN
KHYwKTsKLSAgICBVTlVTRURfUEFSQU0odjEpOwotICAgIFVOVVNFRF9QQVJBTSh2Mik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odjApOwotICAg
IFVOVVNFRF9QQVJBTSh2MSk7Ci0gICAgVU5VU0VEX1BBUkFNKHYyKTsKLSAgICBVTlVTRURfUEFS
QU0odjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBV
TlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0
aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0x1aW50PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VE
X1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
NHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKLXsK
LSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BB
UkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3Nl
KTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURf
UEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNF
RF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVT
RURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0
YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFu
c3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4
KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNF
RF9QQVJBTSh6KTsKLSAgICBVTlVTRURfUEFSQU0odyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5
LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFS
QU0oeik7Ci0gICAgVU5VU0VEX1BBUkFNKHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3Qg
R0NHTHVpbnQsIDQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51
bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBVTlVT
RURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICBVTlVTRURfUEFS
QU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0cmlkZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9m
ZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1l
bnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKG1vZGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGFydCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGVuZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBidWZzKQotewotICAg
IFVOVVNFRF9QQVJBTShidWZzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwot
ICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVu
dW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2
YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKGRy
YXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKLXsKLSAgICBVTlVT
RURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAgVU5V
U0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9h
dCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwot
ICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZGVwdGgpOwot
ICAgIFVOVVNFRF9QQVJBTShzdGVuY2lsKTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQotewotICAgIHJldHVybiAwOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KQotewotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci19Ci0KLUdDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwot
fQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXQpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotR0NH
THVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoUGxhdGZvcm1H
TE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHF1ZXJ5
KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIHJldHVybiAwOwotfQotCi1QbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKCkKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2Ft
cGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBs
ZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVy
KFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKLXsK
LSAgICBVTlVTRURfUEFSQU0odW5pdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQotewotICAg
IFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIFVO
VVNFRF9QQVJBTShwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNh
bXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUs
IEdDR0xmbG9hdCBwYXJhbSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5V
U0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW0pOwotfQotCi1HQ0dMZmxv
YXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNh
bXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDAuZjsKLX0KLQot
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmkoUGxh
dGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKLQotewotICAgIFVOVVNFRF9Q
QVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIHJldHVybiAwOwot
fQotCi1HQ0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVt
IGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQotewotICAgIFVOVVNFRF9QQVJBTShjb25k
aXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyhHQ0dMc3luYyBzeW5j
KQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyhHQ0dMc3luYyBzeW5jKQot
ewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLX0KLQotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFn
cywgR0NHTHVpbnQ2NCB0aW1lb3V0KQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLSAgICBV
TlVTRURfUEFSQU0oZmxhZ3MpOwotICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsKLQotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dM
c3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbnQ2NCB0aW1lb3V0KQotewotICAg
IFVOVVNFRF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwotICAgIFVOVVNF
RF9QQVJBTSh0aW1lb3V0KTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHN5bmMpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9y
bUZlZWRiYWNrKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCBpZCkKLXsK
LSAgICBVTlVTRURfUEFSQU0oaWQpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAg
IFVOVVNFRF9QQVJBTShpZCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGlkKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVn
aW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQotewotICAgIFVOVVNF
RF9QQVJBTShwcmltaXRpdmVNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQot
ewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odmFyeWluZ3Mp
OwotICAgIFVOVVNFRF9QQVJBTShidWZmZXJNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKQotewotICAgIFVOVVNFRF9QQVJB
TShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCkKLXsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKQotewotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0
YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNF
RF9QQVJBTShidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
QnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIFVOVVNF
RF9QQVJBTShzaXplKTsKLX0KLQotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFt
KTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybU5hbWVzKTsKLQotICAgIHJldHVybiB7IH07Ci19
Ci0KLVZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1
bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVmVjdG9yPEdDR0xpbnQ+IHJl
c3VsdCh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOwotI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhB
VkUoT1BFTkdMX0VTXzMpCi0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICA6OmdsR2V0QWN0aXZl
VW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2Vz
LmRhdGEoKSwgcG5hbWUsIHJlc3VsdC5kYXRhKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
cHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSNlbmRpZgotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3Jt
QmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9y
bUJsb2NrTmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHVuaWZvcm1CbG9ja05hbWUpOwotICAgIHJldHVybiAwOwotfQotCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkKLXsKLSAgICBVTlVTRURf
UEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKLSAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50
IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQotewotICAg
IFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5k
ZXgpOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tCaW5kaW5nKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGhlaWdodCk7Ci0gICAgVU5VU0VEX1BBUkFNKGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFt
LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdD
R0xpbnQ+IHBhcmFtcykKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAg
IFVOVVNFRF9QQVJBTShwYXJhbXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSAsIEdDR0xpbnRwdHIpCi17Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0sIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwg
R0NHTGVudW0sIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTGludHB0cikKLXsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQo
R0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVu
dW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTHNp
emVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBH
Q0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJ
bWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGlu
dCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBH
Q0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVz
c2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTFNwYW48Y29uc3QgR0NH
THZvaWQ+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2Vk
VGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNp
emVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTGludHB0cikKLXsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NH
TGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xp
bnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWks
IEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNw
YW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVt
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NH
TFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzQU5HTEUoR0NHTGVudW0sIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50
PiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48
Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKLXsKLSAgICBBU1NFUlQodW5wYWNrQWxp
Z25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIgfHwgdW5wYWNrQWxpZ25tZW50ID09
IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOwotICAgIFVuaXF1ZUFycmF5PHVuc2lnbmVkIGNo
YXI+IHplcm87Ci0gICAgdW5zaWduZWQgc2l6ZSA9IDA7Ci0gICAgaWYgKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwKSB7Ci0gICAgICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwotICAgICAgICBw
YXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50OwotICAgICAgICBHQ0dMZW51bSBlcnJv
ciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwg
MSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChlcnJvciAh
PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHNpemUpOwotICAgICAg
ICBpZiAoIXplcm8pIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgfQotICAgIHRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJv
cmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4oemVyby5nZXQoKSwgc2l6ZSkpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFVU0Uo
QU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3Bw
CmluZGV4IGU2NmUwMGFkYjI4NzVhZGY2OWExOTdmY2M2OTIzMTZkYTZmOTZlNmUuLmQyOTlhMTlm
YTg2NjM5NzU1MmRkNmRlNzg4MGNjYTQzMzgyZjI4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwCkBAIC0yOCw5ICsyOCwxMyBAQAogI2lmIEVO
QUJMRShXRUJHTCkKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIK
IAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogCisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUu
aCIKKyNlbHNlCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNlbmRpZgog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXImIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpCkBAIC01Niw3ICs2
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpkaXNwbGF5V2FzUmVj
b25maWd1cmVkKCkKIH0KICNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlcjo6YWRkQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRDb250ZXh0KFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0wqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIGlmICgh
Y29udGV4dCkKQEAgLTY2LDcgKzcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQKICAgICBt
X2NvbnRleHRzLmFwcGVuZChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OnJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRl
eHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6cmVtb3ZlQ29udGV4dChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKiBjb250ZXh0KQogewogICAgIGlmICghbV9jb250ZXh0
cy5jb250YWlucyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oCmluZGV4IDBlZjg2ZGM2ZGU3ZjIxZDVlOGU5MTIw
ZTlhMzJiMGE4YjFmMWY3MzEuLmQxNDgzNDEwZDAyM2Y4MzAzNmQ5Nzg1NjQzNWZhZTU1ODRiMDQ2
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKQEAg
LTM2LDE1ICszNiwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IHVuc2lnbmVkIE1h
eENvbnRleHRzID0gMTY7CiAKKyNpZiBVU0UoQU5HTEUpCitjbGFzcyBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOworI2Vsc2UKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOworI2VuZGlmCiAK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlciB7CiAgICAgZnJpZW5kIE5ldmVy
RGVzdHJveWVkPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcj47CiBwdWJsaWM6CisjaWYg
VVNFKEFOR0xFKQorICAgIHVzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgPSBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOworI2Vsc2UKKyAgICB1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYKKwogICAgIHN0YXRpYyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXImIHNoYXJlZE1hbmFnZXIoKTsKICAgICAKLSAgICB2
b2lkIGFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKLSAgICB2b2lkIHJlbW92
ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lkIGFkZENvbnRleHQo
UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCopOworICAgIHZvaWQgcmVtb3ZlQ29udGV4dChQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMKik7CiAgICAgCiAgICAgdm9pZCByZWN5Y2xlQ29udGV4dElm
TmVjZXNzYXJ5KCk7CiAgICAgYm9vbCBoYXNUb29NYW55Q29udGV4dHMoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRleHRzLnNpemUoKSA+PSBNYXhDb250ZXh0czsgfQpAQCAtNTksNyArNjksNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcigpID0g
ZGVmYXVsdDsKIAotICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTCo+IG1fY29udGV4
dHM7CisgICAgVmVjdG9yPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wqPiBtX2NvbnRleHRzOwog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cAppbmRleCAwNTc1NDQ0OGI5MDNlMTQ5OTNlZDMxYjBjYmQ2MWU4Njk0YTllZTk5Li45NzZlM2Fi
ZTViYjNhYzQwYWY4ZjIwYzllZTRlZThhMjU1M2IwYTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtODcsMTIgKzg3LDEwIEBAIFJlZlB0
cjxHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVy
ZU1hcHBlcjo6Y3JlYXRlKEdyCiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6On5HcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIoKSA9IGRlZmF1bHQ7CiAKIEdyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyQmFzZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCi0vLyBGSVhNRTogQmVs
b3cgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgotCiBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0R0w+IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5p
dGlhbGl6ZWQgPSBmYWxzZTsKQEAgLTEyNSwzMTQgKzEyMyw3IEBAIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHRHTD4gY3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNz
Q29udGV4CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1
dGVzKQotewotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0
ZXMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7
Ci0jZW5kaWYKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlx
dWU8Tmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBM
YXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7
Ci0jZW5kaWYKLSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBB
U1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVz
KCk7Ci0gICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhh
dmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0
ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICAvLyBDcmVhdGUgYSB0ZXh0dXJl
IHRvIHJlbmRlciBpbnRvLgotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAg
ICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbDo6VGV4
UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1l
dGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7
Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOwotCi0gICAgLy8gQ3JlYXRl
IGFuIEZCTy4KLSAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVy
ZSk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fY29tcG9zaXRvclRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRl
cmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlh
dGVUZXh0dXJlKTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9pbnRlcm1l
ZGlhdGVUZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9U
T19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVy
ZVRhcmdldCwgMCk7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4K
LSAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8p
OwotICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICBnbDo6R2VuRnJhbWVi
dWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fc3RhdGUuYm91
bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAg
ICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
LSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAg
ICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KLSAg
ICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAg
ICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9mYm87Ci0g
ICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAg
ICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0g
ICAgfQotCi0gICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0jZWxzZQotR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmli
dXRlcykKLXsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlx
dWU8Tmljb3NpYTo6R0NHTExheWVyPigqdGhpcyk7Ci0jZWxzZQotICAgIG1fdGV4bWFwTGF5ZXIg
PSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOwotI2Vu
ZGlmCi0KLSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NF
UlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7
Ci0gICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUg
Y2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8g
cmVuZGVyIGludG8uCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
LSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4g
RkJPLgotICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICA6OmdsQmluZEZy
YW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
LSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7
Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
OjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NM
QU1QX1RPX0VER0UpOwotCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRl
eHR1cmUpOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0
ZVRleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAg
IEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0g
ICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZl
cnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERy
YXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAg
IDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAg
ICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAg
ICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAg
ICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBTUVCVUZGRVIs
IG1fZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmIChhdHRyaWJ1dGVz
LmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVy
KTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgICAgIGdsR2VuUmVu
ZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgotICAgICAgICBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJl
bmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0KLSNpZiAhVVNF
KE9QRU5HTF9FUykKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUp
OwotCi0gICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7Ci0g
ICAgICAgIG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRnJvbSB2ZXJz
aW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhh
dCBvdXB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgotICAgICAgICAvLyBPcGVuR0wgdmVyc2lv
biAzLjIgdXNlcyBHTFNMIHZlcnNpb24gMS41MC4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xF
V2ViS2l0QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKLQotICAgICAgICAvLyBGcm9t
IHZlcnNpb24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5l
ZWQgYSBWQU8gZm9yIHJlbmRlcmluZy4KLSAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRl
ZCBhbmQgYm91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJl
TWFwcGVyLCBXZWJHTCwgZXRjKS4gVGhpcyBpcwotICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRp
b246IHRoZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjcmVhdGVkIG9uIGEgR0xDb250
ZXh0IHdpbGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCi0gICAgICAg
IEdDR0xpbnQgY3VycmVudFZBTyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OlZFUlRFWF9BUlJBWV9CSU5ESU5HKTsKLSAgICAgICAgaWYgKCFjdXJyZW50VkFPKSB7Ci0gICAg
ICAgICAgICBtX3ZhbyA9IGNyZWF0ZVZlcnRleEFycmF5KCk7Ci0gICAgICAgICAgICBiaW5kVmVy
dGV4QXJyYXkobV92YW8pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRm9y
IGxvd2VyIHZlcnNpb25zIHJlcXVlc3QgdGhlIGNvbXBhdGliaWxpdHkgb3V0cHV0IHRvIHRoZSBz
aGFkZXIgY29tcGlsZXIuCi0gICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShT
SF9HTFNMX0NPTVBBVElCSUxJVFlfT1VUUFVUKTsKLQotICAgICAgICAvLyBHTF9QT0lOVF9TUFJJ
VEUgaXMgbmVlZGVkIGluIGxvd2VyIHZlcnNpb25zLgotICAgICAgICA6OmdsRW5hYmxlKEdMX1BP
SU5UX1NQUklURSk7Ci0gICAgfQotI2Vsc2UKLSAgICAvLyBBZGp1c3QgdGhlIHNoYWRlciBzcGVj
aWZpY2F0aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIEdMRVMzIChpLmUuIFdlYkdMMiBzdXBwb3J0
KSB3YXMgcmVxdWVzdGVkLgotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9jb21waWxlciA9IEFO
R0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCAoYXR0cmlidXRlcy53ZWJHTFZlcnNpb24g
PT0gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMikgPyBTSF9XRUJHTDJfU1BF
QyA6IFNIX1dFQkdMX1NQRUMpOwotI2Vsc2UKLSAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRC
cmlkZ2UoU0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMX1NQRUMpOwotI2VuZGlmCi0jZW5kaWYKLQot
ICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdM
RVJlc291cmNlczsKLSAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2Vz
KTsKLQotICAgIEFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMgPSBnZXRJbnRlZ2VyKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX0FUVFJJQlMpOwotICAgIEFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpOwotICAgIEFOR0xFUmVzb3Vy
Y2VzLk1heFZhcnlpbmdWZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6TUFYX1ZBUllJTkdfVkVDVE9SUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1heENvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMu
TWF4VGV4dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1B
WF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMpOwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAxIGZv
ciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0g
ICAgR0NHTGludCByYW5nZVsyXSB7IH07Ci0gICAgR0NHTGludCBwcmVjaXNpb24gPSAwOwotICAg
IGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01F
TlRfU0hBREVSLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZw
cmVjaXNpb24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChy
YW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwotCi0gICAgbV9jb21waWxlci5zZXRS
ZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwg
MCk7Ci19Ci0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQotewotICAgIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7Ci0gICAgYm9v
bCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNj
ZXNzLCBzdWNjZXNzKTsKLSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAg
IGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwg
Jm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBj
b250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0g
ICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgp
Ci0gICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVGQk8pOwotICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0
dHJpYnV0ZXMuZGVwdGgpIHsKLSNpZiAhVVNFKEFOR0xFKSAmJiBVU0UoT1BFTkdMX0VTKQotICAg
ICAgICBpZiAobV9kZXB0aEJ1ZmZlcikKLSAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVy
cygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKG1fc3RlbmNpbEJ1ZmZlcikKLSAg
ICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNl
bmRpZgotICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbDo6
RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLSAg
ICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0
dXJlKTsKLSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotICAgIGlmIChtX3ZhbykKLSAgICAgICAg
ZGVsZXRlVmVydGV4QXJyYXkobV92YW8pOwotI2VuZGlmCi19Ci0jZWxzZQotR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCi17Ci0gICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlz
KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIDo6
Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxldGVU
ZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0
cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRp
YWxpYXMpIHsKLSAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmli
dXRlcy5kZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211
bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAg
IGlmIChtX2RlcHRoQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZtX2RlcHRoQnVmZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAg
ICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlm
Ci0gICAgICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIDo6Z2xEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIDo6
Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0gICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUp
OwotI2VuZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxl
dGVWZXJ0ZXhBcnJheShtX3Zhbyk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0K
LWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0j
aWYgVVNFKE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
R1BVU3RhdHVzKCkKLXsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVT
MkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0jaWYgVVNFKEFOR0xFKQotICAgIHJldHVybiBtX2lzRm9y
V2ViR0wyOwotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0g
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAjaWYg
VVNFKE5JQ09TSUEpCiAgICAgcmV0dXJuICZtX25pY29zaWFMYXllci0+Y29udGVudExheWVyKCk7
CkBAIC00NDEsMzggKzEzMiw4IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oR1RL
KSAmJiAhVVNFKEFOR0xFKQotRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpIHsK
LSNpZiBVU0UoT1BFTkdMX0VTKQotICAgICAgICAvLyBnbEdldFN0cmluZ2kgaXMgbm90IGF2YWls
YWJsZSBvbiBHTEVTMi4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNp
b25zR0xPcGVuR0xFUz4odGhpcywgIGZhbHNlKTsKLSNlbHNlCi0gICAgICAgIC8vIEZyb20gT3Bl
bkdMIDMuMiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJlIHdlIG11c3QgdXNl
IGdsR2V0U3RyaW5naS4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNp
b25zR0xPcGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIw
KTsKLSNlbmRpZgotICAgIH0KLSAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKLX0KLSNlbmRpZgot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29s
KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUV2ZW50Rm9y
VGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50
ID09IFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVyZSkKLSAgICAgICAg
bV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQotewotfQotCiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBsZT4gR3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRp
YVNhbXBsZSgpCiB7CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpZiAoYXV0byBwaXhlbEJ1ZmZl
ciA9IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpKQpAQCAtNDgyLDExICsxNDMsNiBAQCBSZWZQdHI8
TWVkaWFTYW1wbGU+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1
bHRzVG9NZWRpYVNhbXBsZQogfQogI2VuZGlmCiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQotewotICAg
IHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOwotfQotCiAjaWYgRU5BQkxFKFZJREVPKQog
Ym9vbCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNvcHlUZXh0dXJlRnJvbU1lZGlh
KE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0NH
TGVudW0gb3V0cHV0VGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgZmxpcFkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyLmgKaW5kZXggZTQ2NjJiNjgzZWE0NWI2ZjE5NjZiMzE5NzMzOTMzMDNhYWY4NjA5NS4uZDFh
YzBlYjdjMGFkYTJmZjg4ZjE3OWRiOWNkNGVjMGEwNWU3NmNhNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVy
ZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaApAQCAtMjcsMTggKzI3LDM0IEBACiAKICNp
ZiBFTkFCTEUoV0VCR0wpCiAKKyNpZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xBTkdMRS5oIgorI2Vsc2UKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
IgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQg
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMIHsKKyNpZiBVU0UoQU5HTEUpCit1c2luZyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXJCYXNlID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCit1c2luZyBHcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXJCYXNlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7Cisj
ZW5kaWYKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2UgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyPiBjcmVh
dGUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIH5HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIoKTsKIAorICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlckJhc2Ugb3ZlcnJpZGVzLgorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdCBmaW5hbDsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVy
ZUZyb21NZWRpYShNZWRpYVBsYXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxp
cFkpIGZpbmFsOwogI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8
TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkgZmluYWw7
CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
cihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKaW5kZXgg
MDg1MzlhN2Q5Mjk4MTE0NWRjMDYwMDFiNTc0Y2E4YzlhNzFmODk1NS4uMTQ3ODdiNWI3MDhjZTc5
MjU5MDNkYTViN2JjYTM5NmY4ZjIzZTY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAKICNp
bmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmgiCiAKICNpZiBVU0UoTklDT1NJQSkKICNpbmNsdWRlICJOaWNvc2lhR0NH
TEFOR0xFTGF5ZXIuaCIKQEAgLTQwLDcgKzQyLDEwNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRl
cykKKyAgICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCit7CisjaWYgRU5BQkxFKFdF
QkdMMikKKyAgICBtX2lzRm9yV2ViR0wyID0gYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3Jh
cGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsKKyNlbmRpZgorI2lmIFVTRShOSUNP
U0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lhOjpHQ0dMQU5HTEVM
YXllcj4oKnRoaXMpOworI2Vsc2UKKyAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0
dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlzKTsKKyNlbmRpZgorICAgIGJvb2wgc3Vj
Y2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywg
c3VjY2Vzcyk7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKyAgICBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxp
ZGF0aW9uLgorCisgICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpOworICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAg
Z2w6OkdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0
dXJlVGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJn
ZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1l
dGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Cisg
ICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdM
X0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6QmluZFRleHR1cmUo
dGV4dHVyZVRhcmdldCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgIGdsOjpHZW5G
cmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX2Zibyk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgZ2w6
OkdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1
cmUodGV4dHVyZVRhcmdldCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmko
dGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisg
ICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGdsOjpC
aW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGds
OjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKKworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCAwKTsKKyNlbmRpZgor
CisgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIEFTU0VSVChtX3N0YXRlLmJv
dW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJpYnV0ZXMu
YW50aWFsaWFzKSB7CisgICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVGQk8pOworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211
bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJv
dW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgIGdsOjpHZW5SZW5kZXJidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6R2VuUmVuZGVy
YnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgorICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJP
ID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyAgICBnbDo6Q2xlYXJD
b2xvcigwLCAwLCAwLCAwKTsKK30KKworR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNz
Q29udGV4dEdMQU5HTEUoKQoreworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6
c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgYm9vbCBzdWNjZXNzID0g
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNz
KTsKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1f
dGV4dHVyZSk7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBv
c2l0b3JUZXh0dXJlKQorICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRv
clRleHR1cmUpOworI2VuZGlmCisKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmli
dXRlcygpOworCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIGdsOjpE
ZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAg
ICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAg
ICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVG
Qk8pOworICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVw
dGgpIHsKKyAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgZ2w6
OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9Cisg
ICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4
dHVyZSk7CisjZW5kaWYKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKIHsKICNpZiBVU0Uo
TklDT1NJQSkKICAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtRGlzcGxheSgpOwpA
QCAtNDksNyArMTQ5LDcgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnMKICNlbmRpZgogfQogCi1Q
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybUNvbmZpZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICNpZiBVU0Uo
TklDT1NJQSkKICAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtQ29uZmlnKCk7CkBA
IC01OCw3ICsxNTgsMjggQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1Db25maWcoKSBjb25zdAogI2VuZGlmCiB9CiAKLWJv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygp
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7Cisj
aWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hlY2tH
UFVTdGF0dXMoKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNldENvbnRl
eHRWaXNpYmlsaXR5KGJvb2wpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cHJlcGFyZUZvckRpc3BsYXkoKQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCiB7CiAgICAgYXV0byBhdHRycyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgYXV0byBzaXplID0gZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKTsKQEAgLTgyLDcgKzIwMyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291
cmNlcygpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtUmVsZWFzZVRocmVh
ZFJlc291cmNlcygpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllci5jcHAKaW5kZXggZjQ0YzdhMDkzNGFhMGIyZTMyNGFiMzgzOGI4ODhkYmQxMDdi
MGFjNy4uMTdmMjk0NDYyYzExNzE1YzNhY2M4YmJjNmJhZmViNjg0NDc5ZjU0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
Q0dMUGxhdGZvcm1MYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKQEAgLTMzLDcgKzMz
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3Jt
TGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYgY29udGV4dCkKK1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6VGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUmIGNvbnRleHQpCiAg
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKIHsKICAgICBhdXRvIHNoYXJpbmdDb250ZXh0ID0gUGxh
dGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250
ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dM
UGxhdGZvcm1MYXllci5oCmluZGV4IGM3NGU3NTU0MjFlMGMxNGQ2NzE3YmRmOWIwNjNhNDdkODg2
NGYyY2QuLjhlNDhlMWM0ZWJhZGI4MjNmZGU0YTFmODA0MTgxMWM3ODNhY2I5NDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0NHTFBsYXRmb3JtTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmgKQEAgLTIxLDcgKzIxLDcg
QEAKIAogI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5J
Q09TSUEpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKQEAgLTM0LDcgKzM0LDcgQEAgY2xh
c3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKIGNsYXNzIFRleHR1cmVNYXBwZXJH
Q0dMUGxhdGZvcm1MYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5
ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKKyAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRm
b3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSYpOwogICAgIHZpcnR1YWwgflRleHR1cmVN
YXBwZXJHQ0dMUGxhdGZvcm1MYXllcigpOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmIG1fY29udGV4dDsKKyAgICBHcmFwaGljc0NvbnRleHRHTFRB
TkdMRSYgbV9jb250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUNvbnRleHQ+IG1fZ2xD
b250ZXh0OwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0
MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dEdMRGlyZWN0MkQuY3BwCmluZGV4IDEyMTUwYjFkNTBlNWJjODkzNzRlYWE4MTFlMjMyYjNj
YzUwZjMxNTEuLjNiNGI3NTgwMjdmNjk2NGUwMDllYjJlNTcyMGQ0YTNjMWJjY2VkYjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRHTERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBp
eGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXpl
LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMR0w6OnBh
aW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQogewogICAgIGlmICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VTaXplLmlzRW1wdHko
KSB8fCBjYW52YXNTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tCmluZGV4IDk1NDRiNTFj
Mjc4ZGY1NjllYTRhYjBiZmVmN2VmNzQ0YWM1MmM3MzUuLjZkNzcwN2Q0MGMzMmYyODQyOWMzZDMy
NDUxNWE1Y2M2OTc3NjFiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy93YWsvV2ViQ29yZVRocmVhZC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
d2FrL1dlYkNvcmVUaHJlYWQubW0KQEAgLTMwLDcgKzMwLDcgQEAKIAogI2ltcG9ydCAiQ29tbW9u
Vk0uaCIKICNpbXBvcnQgIkZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5oIgotI2ltcG9ydCAiR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUu
aCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNr
cy5oIgogI2ltcG9ydCAiVGhyZWFkR2xvYmFsRGF0YS5oIgpAQCAtNzcsMTMgKzc3LDEzIEBAIHZv
aWQgUmVsZWFzZVdlYlRocmVhZEdsb2JhbFN0YXRlKCkKICAgICAvLyBJbiBzaW5nbGUtdGhyZWFk
ZWQgZW52aXJvbm1lbnRzIHdlIGRvIG5vdCBuZWVkIHRvIHVuc2V0IHRoZSBjb250ZXh0LCBhcyB0
aGVyZSBzaG91bGQgbm90IGJlIGFjY2VzcyBmcm9tCiAgICAgLy8gbXVsdGlwbGUgdGhyZWFkcy4K
ICAgICBBU1NFUlQoV2ViVGhyZWFkSXNFbmFibGVkKCkpOwotICAgIHVzaW5nIFJlbGVhc2VUaHJl
YWRSZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlJl
bGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOworICAgIHVzaW5nIFJlbGVhc2VUaHJlYWRSZXNv
dXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6UmVsZWFzZVRo
cmVhZFJlc291cmNlQmVoYXZpb3I7CiAgICAgLy8gRm9yIHdlYiB0aHJlYWQsIGp1c3QgcmVsZWFz
ZSB0aGUgY29udGV4dCBhcyB3ZSBrbm93IHdlIHdpbGwgc2VlIGNhbGxzIHRvIGl0IGFnYWluLgog
ICAgIC8vIEZvciBub24td2ViIHRocmVhZHMsIGUuZy4gdGhpcmQtcGFydHkgY2xpZW50IHRocmVh
ZHMsIHdlIGRvbid0IGtub3cgaWYgd2UgZXZlciBzZWUgYW5vdGhlciBjYWxsIGZyb20gdGhlCiAg
ICAgLy8gdGhyZWFkLCBzbyB3ZSBhbHNvIHJlbGVhc2UgdGhlIHRocmVhZCByZXNvdXJjZXMuCiAg
ICAgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgcmVsZWFzZUJlaGF2aW9yID0KICAgICAg
ICAgV2ViVGhyZWFkSXNDdXJyZW50KCkgPyBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6
UmVsZWFzZUN1cnJlbnRDb250ZXh0IDogUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6OlJl
bGVhc2VUaHJlYWRSZXNvdXJjZXM7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMocmVsZWFzZUJlaGF2aW9yKTsKKyAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKHJlbGVhc2VC
ZWhhdmlvcik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCmluZGV4IGFjOTU5NTIw
YTJlM2RmYWQ5ZmNkODJiMzkyZjEwYTlhNWE2MDQ4NDAuLjg0YjJlNjg0NWQwNzQ5Y2RhYTFlNzhi
ODUzMGQ4ZjhlYTVhMGUwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcApAQCAtMjM2LDcg
KzIzNiw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50UGl4ZWxCdWZmZXJU
b0ltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yCiAgICAgICAgICAgICAvLyBIZXJlIHdl
IGRvIG5vdCB0cnkgdG8gcGxheSBiYWNrIHBlbmRpbmcgY29tbWFuZHMgZm9yIGltYWdlQnVmZmVy
LiBDdXJyZW50bHkgdGhpcyBjYWxsIGlzIG9ubHkgbWFkZSBmb3IgZW1wdHkKICAgICAgICAgICAg
IC8vIGltYWdlIGJ1ZmZlcnMgYW5kIHRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gYWRkIGRpc3BsYXkg
bGlzdHMuCiAgICAgICAgICAgICBpZiAocGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMsIFdU
Rk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdlQnVm
ZmVyLT5jb250ZXh0KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMOjpwYWlu
dFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdl
QnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmNsZWFyUmVj
dCh7IEludFBvaW50KCksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpIH0pOwogICAgICAgICAg
ICAgLy8gVW5mb3J0dW5hdGVseSAiZmx1c2giIGltcGxlbWVudGF0aW9uIGluIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQgb3ZlcmxvYWRzIG9yZGVyaW5nIGFuZCBlZmZlY3RzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5nUmVz
b3VyY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcAppbmRleCA1YTZjZTY1ZTc0NDdk
MjRlMWU3NzM2MGYyZDhjZmU2NGVhODhiMzJhLi4wZGE3Yjk1ZDE0ZTlhZGZjZGQzNjY5Mzk5MzNk
ODAwZjAwYmY4ZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNS
ZXF1ZXN0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wuaCIKICNpbmNsdWRlICJTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVk
ZSA8d3RmL1NlY29uZHMuaD4KIApAQCAtNTYsNyArNTYsNyBAQCB2b2lkIFNjb3BlZFdlYkdMUmVu
ZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6ZnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKCkKICAg
ICBpZiAoc19yZXF1ZXN0cykKICAgICAgICAgcmV0dXJuOwogICAgIHJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW10gewotICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFzZVRocmVhZFJlc291cmNlcyhXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6OlRl
cm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMpOworICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpUZXJtaW5h
dGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTsKICAgICB9KTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="470544"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445388</attachid>
            <date>2021-11-29 23:53:15 -0800</date>
            <delta_ts>2021-11-30 00:56:32 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211130095312.patch</filename>
            <type>text/plain</type>
            <size>577162</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5hMjc3NmJmMzcwMzNkNDc5NGRjNTk0YTJlNDdlZjNkNmNk
ZmI4ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MDUsNiArMTQwNSw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0FOR0xFSGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGls
aXRpZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4
MDExODYuLjE1ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
N2I2ZDU2MTQ2OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVj
MmQ1MzE4YWIzOTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEz
Niw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvaXNvL0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09WVFRDdWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTky
OTQ5ODk1MjBjMjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVy
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlNGQ5ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJl
ZTAyNmE2YTlkMTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBA
CiAJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAv
KiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAq
LzsgfTsKIAkJN0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1Yu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRl
eHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYw
OTRERDI3MEM0NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAv
KiBBTkdMRVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJm
b3JtYW5jZUdQVVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFu
Y2VHUFVSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIz
MDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRl
eHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVE
Mjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYw
Q0UgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0No
ZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAy
MTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBH
cmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVG
MjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBB
MThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEw
MzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFB
QyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xDVkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlE
MjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ix
NjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4
MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1
Nyw4IEBACiAJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhD
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCOTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAw
NjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0
QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJ
CTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJ
CQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJ
CQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
ICovLAorCQkJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmggKi8sCiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xF
U2V0dGluZy5jcHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFy
eUFOR0xFU2V0dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3
QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgg
Ki8sCiAJCQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAw
MDA2MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2
OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBA
QAogCQkJCTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJ
CTdCOEVENUVGMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEw
MzM5RDI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdC
MTAzMzlBMjU0OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICov
LAotCQkJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCAqLywKKwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8q
IEltYWdlUm90YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdG
RjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4
MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0
MjYyLDE2IEBACiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4
dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3Jh
cGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3
MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdCOTVDRkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIx
MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAv
KiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4
MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0
MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5
RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGlj
c0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5
MTVmYTVmNzRkYzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2
MzQ1NTlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8g
UmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRh
KEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25l
ZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50
UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGlu
dCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0R0xTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNi
NGQ3ZTljZWUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBH
Q0dMdWludCBib3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVu
aXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4
dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwg
R0NHTGVudW0+LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJh
aXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5k
VGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0K
KyAgICBHQ0dMdWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91
bmRUYXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0
dXJlLCBHQ0dMZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0
KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIElu
dEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1
aW50Pj47CisgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYw
ZmI1ZWUxYWMzOTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2
NDBmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNp
bmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dM
QU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
KQorRXh0ZW5zaW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUqIGNvbnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhm
YWxzZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5k
ZXggMGE2MWVmYzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRi
OWY2MTVjM2IzYTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0z
MiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMu
Ci0gICAgZXhwbGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
KTsKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdy
YXBoaWNzQ29udGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVu
c2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRl
bnNpb25zR0xBTkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4
ICs2NCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRl
bnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAg
Ly8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFj
ayB0byBHcmFwaGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUq
IG1fY29udGV4dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0
aW5nLXBvaW50IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAg
ICBib29sIG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBk
ZmEyYjdhNTA5Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmgiCiAKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJl
c3Npb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFW
Rk9VTkRBVElPTikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBk
ZWZpbml0aW9uIHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAg
LTc2LDggKzcxLDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpCiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEp
CiAgICAgICAgIEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3Jt
Q29uZmlnKCksIEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQor
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBz
d2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyAr
OTksNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2lu
Z1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1Rh
cmdldCkgewogICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZv
ckRyYXdpbmdUYXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJl
aGF2aW9yIHJlbGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNl
QmVoYXZpb3IpCiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAg
LTE2MSw3ICsxNTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhy
ZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xf
UmVsZWFzZVRocmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFp
bnRSZXN1bHRzKCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpA
QCAtMTg3LDE0ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBw
aXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1
dGVzKCkKIHsKICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygp
LmFscGhhID8gR0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11
c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hE
ZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChH
THVpbnQgaW50ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3Bl
ZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAg
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+
IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBnbDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwg
bnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBw
cmVjaXNpb25UeXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lz
aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48
R0NHTGludCwgMj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xl
bnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNo
YWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAg
ICAgICAgIGludGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihn
ZXRFeHRlbnNpb25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZz
ZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQg
eW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0wKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwg
R0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewogICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VT
aXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNl
dCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQg
eW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBH
Q0dMY2xhbXBmIHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGds
OjpEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oekZhcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRo
KEdDR0xjbGFtcGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVw
dGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVw
dGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lv
bnMpCiAgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+
KHRoaXMpOwogICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpy
ZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0
YS5kYXRhLCBmYWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRu
UGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJ
bXBsKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBs
ZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0
YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMs
IEdDR0xzaXplaSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZm
ZXJPYmplY3QpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRuUGl4ZWxzSW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYK
IH0KIAotLy8gVGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZv
bGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygp
OwogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZv
cm1zIGFyZSBub3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQog
ICAgICAgICByZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFT
U0VSVCghbV9sYXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1z
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVS
ZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5i
b3VuZFJlYWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpA
QCAtNTg3LDcgKzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhl
bHNGb3JQYWludFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBt
X2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1
cm47CkBAIC02NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0
dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTY4Miw3ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVU
ZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNT
RVJUKHNoYWRlcik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8K
ICAgICBnbDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC03MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0CiB9CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCB0ZXh0dXJlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGds
OjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xj
bGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBn
cmVlbiwgR0NHTGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVu
dW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dM
ZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dM
ZW51bSBtb2RlQWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9
CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShH
Q0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xl
bnVtIGRzdEFscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBh
cmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEs
IEdDR0xlbnVtIGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJH
QgogICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0
ciBzaXplLCBHQ0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRh
dGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5i
dWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xT
cGFuPEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdD
R0x2b2lkPiBkYXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0
YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciBy
ZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVh
ZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NH
TGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0
aXZSb2J1c3RBTkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXpl
LCBudWxscHRyLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODQ4LDcgKzg0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
IGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgs
IGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRl
ciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAg
Z2w6OlRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6
ZSwgcGl4ZWxzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQq
PihvZmZzZXQpLCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50
IHhvZmYKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIHBpeGVscy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50
IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4
OTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
aW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+
KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5
MDcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1
YkltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZz
ZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0Qo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBw
bmFtZSkKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVV
bmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4m
IHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4g
cmVzdWx0KHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpA
QCAtOTI5LDcgKzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwpAQCAtOTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6
OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNs
YW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTk0NSw3ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNv
bG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVh
cihHQ0dMYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05
NjIsNyArOTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KEdDR0xpbnQgcykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdy
ZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwg
R0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNv
bXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEw
MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEw
MzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAg
ICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVu
YyhmdW5jKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdD
R0xib29sZWFuIGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhH
Q0dMYm9vbGVhbiBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxh
Zyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAg
QVNTRVJUKHNoYWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMTwogICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAg
IGdsOjpEaXNhYmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODks
NyArMTA4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5
cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBm
aXJzdCwgR0NHTHNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xlCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2Fw
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0NHTHVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50
IGluZGV4KQogICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1
c2goKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExMzksNyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNo
KCkKICAgICBnbDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBs
ZXZlbCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMTU2LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE2NCw3ICsxMTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3Miw3ICsxMTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVN
aXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9W
QUxVRSk7CkBAIC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwg
aW5mbyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1J
bXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDRwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJv
Z3JhbSwgaW5kZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4
Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZv
cm1HTE9iamVjdCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwg
bWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBp
ZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAg
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0
cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJu
IG1vdmVkQW5FcnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEVycm9yKCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsK
ICAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCkBAIC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0xMzA3LDcgKzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0
cmluZyhHQ0dMZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1v
ZGUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTMxNSw3ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2Rl
KTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKICAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0xMzM0LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXAp
OwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZl
cihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQog
ewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEz
NDUsNyArMTMzOSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0Zy
YW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJ
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpA
QCAtMTM1Niw3ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1By
b2dyYW0ocHJvZ3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgcmVuZGVyYnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBy
ZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
QEAgLTEzODksNyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNU
ZXh0dXJlKHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5l
V2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0
aCh3aWR0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQgcGFyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFt
KQogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9h
dCB1bml0cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dM
ZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYg
dmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAs
NyArMTQyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdl
KEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVy
YWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
Y2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0x
NDUxLDcgKzE0NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJT
b3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0g
ZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBt
YXNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE0NTksNyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywg
R0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGlu
dCByZWYsIEdDR0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLAogICAgIGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50
IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTQ3NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE1hc2soR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0
ZShmYWNlLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdD
R0xlbnVtCiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShm
YWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xm
bG9hdCB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsx
NTAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2
YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyAr
MTUxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbAogICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAg
ICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0y
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsK
ICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAog
ICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2
MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXpl
ICUgMykpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyAr
MTU3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlm
b3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJh
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50
IHYxCiAgICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkK
IHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bgogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXku
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCwgR0NHTGludCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAzLCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xp
bnQgdjIsIEdDR0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBH
Q0dMaW50IHYzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQog
ewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
CiAgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1N
YXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAg
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAg
ICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MTY3NSw3ICsxNjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRl
eEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAg
ICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZgogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48
Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxv
YXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBn
bDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdCwgND4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cK
ICAgICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRl
eCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBH
Q0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNp
emUsCiAgICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1h
bGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTc3Myw3ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVy
dGV4QXR0cmliSVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
CiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE3OTQsNyArMTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTgwNiw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0
ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTE4MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGds
OjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4MjgsNyArMTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xT
cGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJv
b2xlYW4+CiAgICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNp
emUsIG51bGxwdHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0g
MDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAg
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xF
KHBuYW1lLCB2YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdD
R0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBu
YW1lKQorR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dM
ZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgpCiB7CiAgICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYs
NyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQpAQCAtMTg5MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBj
b25zdCBTdHJpbmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAg
VU5VU0VEX1BBUkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sCiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogCkBAIC0xOTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmko
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChz
aGFkZXIpOwogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTcz
LDEyICsxOTY3LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVk
SW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxh
dGZvcm1HTE9iamVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZs
b2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAg
IEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTk4Nyw3ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlv
biwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9n
cmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3
ICsyMDE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVp
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5k
YXRhKTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogCkBAIC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAg
IHJldHVybiBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CiB9CiAKLUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQg
aW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5k
ZXgsIEdDR0wKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAg
IHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICBy
ZXR1cm4gbzsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlUHJvZ3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVByb2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVh
dGVQcm9ncmFtKCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
ICAgIHJldHVybiBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIw
ODMsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
aGFkZXIoR0NHTGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9
PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURF
Uik7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRleHR1cmUoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVh
dGVUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRl
bGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAg
ICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6
RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVy
KQogICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6
OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2
MSw3ICsyMTU1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LnJlbW92ZUFsbCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQg
dG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRv
CiAgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0
RXJyb3Igd2lsbCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50
aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zm9yY2VDb250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNl
Q29udGV4dExvc3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNw
YXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIy
MjMsNyArMjIxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0
ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIy
Niw3IEBAIEdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJ
bmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3Jt
QmxvY2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yMjUyLDcgKzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTAogCiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0
dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGds
OjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6
OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRRdWVyeU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogCiAvLyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVl
ZGJhY2soKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5z
Zm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAg
ICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVk
YmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0
IHRyYW5zZm9ybUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xP
YmplY3QgdHJhbnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9y
bUZlZWRiYWNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1G
ZWVkYmFjaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MzM0LDcgKzIzMjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNm
b3JtRmVlZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJh
bnNmb3JtRmVlZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1G
ZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJp
bWl0aXZlTW9kZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2Rl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjM1MCw3ICsyMzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dM
ZW51bSBidWZmZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyhwcm9ncmFtLCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3Mu
ZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0g
MDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAg
Z2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZT
aXplKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBp
bmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsCiAgICAgZ2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNy
Y1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50
IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dM
Yml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNDAzLDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpC
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NH
TGludCBsYXllcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0
dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVM
YXllcih0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0
YXJnZXQsIGF0dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVi
dWZmZXIodGFyZ2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRC
dWZmZXIoR0NHTGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNy
Yyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlclRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIC0xOwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMK
ICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yNDc2LDcgKzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlm
b3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2
MSwgR0NHTHVpbnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
NDg0LDcgKzI0NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3Jt
M3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYw
LCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dQogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gMiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCgh
KGRhdGEuYnVmU2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAt
MjUxOCw3ICsyNTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9y
bTN1aXYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
ZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0x1CiAgICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSA2KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyAr
MjUzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgy
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgz
eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNv
bnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlv
biwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZT
aXplIC8gOCwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xl
YW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAg
ICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJh
bnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQo
IShkYXRhLmJ1ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBA
IC0yNTcyLDcgKzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlm
b3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRh
dGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDEyKSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyAr
MjU3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0
eDNmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dM
dWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShp
bmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+
IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyAr
MjU5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0
aXYoaW5kZXgsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQg
eSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwg
R0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4
LCBHQ0dMdQogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMu
ZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1l
bnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50
IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcK
ICAgICBnbDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3Qg
R0NHTGVudW0+IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6
OkRyYXdCdWZmZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIs
IGRyYXdidWZmZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQg
ZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZh
bHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZm
ZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRo
LCBHQ0dMaW50IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsCiAgICAgZ2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3Rl
bmNpbCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
ICAgICBnbDo6RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJu
IGdsOjpJc1F1ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVl
KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
U2FtcGxlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0
ZVNhbXBsZXIoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAg
ICBnbDo6RGVsZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikK
K0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIp
CiAgICAgcmV0dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcy
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJp
KHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2Ft
cGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAK
LUdDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYo
UGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NH
TGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUpCiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dM
c3luYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9u
LCBHQ0dMYml0ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZp
ZWxkIGZsYQogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQog
Ci1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5
bmMpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMg
c3luYykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMo
c3luYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NH
THN5bmMgc3luYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dM
c3luYyBzeW5jKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xz
eW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywg
R0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4
OSw3ICsyNzgzLDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdh
aXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNs
aWVudFdhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdz
LCBHQ0dMaW50NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5
bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
Nzk3LDcgKzI3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhH
Q0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3lu
YyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBw
bmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1G
ZWVkYmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVl
ZGJhY2soKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVk
YmFjaygpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgyMyw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjgzMSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6
QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0K
IAotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5p
Zm9ybU5hbWVzKQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRV
bmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB1bmlmb3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBw
YXJhbXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJs
b2NraXZSb2J1c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFt
cy5idWZTaXplLCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xzaXplaSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRp
RHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZp
cnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjg1OSw3ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3QXJyYXlzQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVs
dGlEcmF3QXJyYXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291
bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJz
dHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBt
b2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBH
Q0dMc2l6ZWkgZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTCiAgICAgZ2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5k
YXRhLCBjb3VudHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlw
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
ODgwLDcgKzI4NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdF
bGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURy
YXdFbGVtZW50c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCks
IGRyYXdjb3VudCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9m
ZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3
Y291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjg5Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVs
dGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6
TXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwg
cG9pbnRlcnMuZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQog
ewogICAgIHNpemVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVD
b21wbGV0aW9uRmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKQEAgLTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVs
YXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVk
RXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChldmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1
cmUpIHsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29t
cGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVm
ZmVyKSwgaW1hZ2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RG
TW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZl
ci5jb250ZXh0KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAg
ICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRp
cGx5aW5nLCB3aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byBy
ZXN1bHRzID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1
bHRzICYmICFyZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1
bHRzLT5mb3JtYXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0
cy0+Zm9ybWF0KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAg
Ly8gRklYTUU6IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJv
d0J5dGVzIGFuZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXpl
ID0gcmVzdWx0cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6
ZS53aWR0aCgpICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRh
dGEoKTsKKyAgICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAx
KSAqIHJvd1N0cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChu
ZXcgdWludDhfdFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9w
ICs9IHJvd1N0cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5
KHRlbXAuZ2V0KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0
b20sIHRvcCwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCks
IHJvd1N0cmlkZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHNGb3JQYWludGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRlMzBiY2JjNDc3NDViYjhiNDIxNTI3YmZkMzQ5YmFkNjc3YmQwNjcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29z
aWEgeworY2xhc3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBI
b3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNz
IFBpeGVsQnVmZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBo
aWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7Cisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
OworICAgIEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGlj
IEdDR0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0
KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0
KTsKKyAgICBlbnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAg
ICAgLy8gUmVsZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRl
eHQsCisgICAgICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRl
LiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisg
ICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNh
bXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAg
dm9pZCBwcmVwYXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlv
biB3aXRob3V0IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAg
aW50IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2lu
ZyB0aHJvdWdoIEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdM
T2JqZWN0KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dz
IHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkg
ZmluYWw7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRp
b24oUGxhdGZvcm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkg
ZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCkgZmluYWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVu
ZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUs
IEdDR0xjbGFtcGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51
bSBtb2RlKSBmaW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBt
b2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdD
R0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRG
dW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNy
Y0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAg
dm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEsIEdDR0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEpIGZpbmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVu
dW0gdGFyZ2V0KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4s
IEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVh
ckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdD
R0xpbnQgcykgZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dM
Ym9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFs
OworICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0g
bW9kZSkgZmluYWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7Cisg
ICAgdm9pZCBkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0
aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9p
ZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7
CisgICAgdm9pZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0Fy
cmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFs
OworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxl
KEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lk
IGZsdXNoKCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dM
ZW51bSB0YXJnZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBi
b29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7Cisg
ICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSog
Y291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmli
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAg
ICB2b2lkIGdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4g
dmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZp
bmFsOworICAgIHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxv
YXQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBw
bmFtZSkgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGludD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5n
IGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJp
KFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0
U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5h
bDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIFN0cmluZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0
IGdldFRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CisgICAgR0NHTGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7
CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRV
bmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TFNwYW48R0NHTHVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdD
R0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBt
b2RlKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBm
aW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAg
IEdDR0xib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVh
biBpc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgo
R0NHTGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qp
IGZpbmFsOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pIGZpbmFsOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dM
ZmxvYXQgdW5pdHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCByZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUs
IEdDR0xib29sZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAg
IHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFs
OworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1
aW50IG1hc2spIGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7Cisg
ICAgdm9pZCBzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAg
dm9pZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAg
dm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwg
R0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVs
cykgZmluYWw7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
aW50cHRyIG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRw
dHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBh
cmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgp
IGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gdikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGludCB4LCBHQ0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2
b2lkIHVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlm
b3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJv
Z3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NH
THVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NH
TGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBH
Q0dMZmxvYXQgeikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHks
IEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmlu
YWw7CisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdD
R0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
c29yKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmlu
YWw7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICBHQ0dMYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZv
aWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVU
YXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NH
THNpemVpcHRyKSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdD
R0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAs
IEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51
bSBmaWx0ZXIpIGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0
ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0
dGFjaG1lbnRzKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7
CisgICAgdm9pZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXpl
aSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5h
bDsKKyAgICB2b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9p
ZCB0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xz
aXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNl
dCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRy
IG9mZnNldCkgZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dM
aW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNz
ZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
THNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOwor
ICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmlu
YWw7CisgICAgR0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZp
bmFsOworICAgIHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3Vp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAg
ICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9p
ZCB1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwg
R0NHTGludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBH
Q0dMdWludCB6LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2
KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50
IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1
aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
dmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdi
dWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xm
bG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVF1ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2Jq
ZWN0IHF1ZXJ5KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmpl
Y3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0g
dGFyZ2V0KSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0
dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2Ft
cGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlz
U2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNh
bXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAg
ICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRl
cmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBh
cmFtKSBmaW5hbDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRT
YW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
KSBmaW5hbDsKKyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dM
Yml0ZmllbGQgZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykg
ZmluYWw7CisgICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51
bSBjbGllbnRXYWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0
IHRpbWVvdXQpIGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVs
ZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2ko
R0NHTHN5bmMsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1Ry
YW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmlu
ZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkg
ZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2
ZU1vZGUpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAg
ICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lk
IHBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9y
bUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAg
dm9pZCBiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZp
bmFsOworICAgIFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsK
KyAgICBWZWN0b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsK
KyAgICBTdHJpbmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9p
ZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykg
ZmluYWw7CisgICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRl
OworICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBtdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRz
LCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZUJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZm
ZXIoKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsK
KyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBs
YXRmb3JtR0xPYmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQ
bGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2Jq
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdl
dEV4dGVuc2lvbnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsK
KyAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZp
bmFsOworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisgICAgdm9p
ZCBwcmVwYXJlRm9yRGlzcGxheSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBmb3JjZUNvbnRleHRM
b3N0KCk7CisgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOworICAgIHZvaWQgZGlzcGF0Y2hDb250
ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CisjZW5kaWYK
KyAgICB1bnNpZ25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKTsKKworICAgIGNvbnN0
ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVG
QVVMVF9ESVNQTEFZOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNvbnN0ZXhwciBzdGF0aWMg
RUdMTmF0aXZlRGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZl
RGlzcGxheVR5cGUsIC0xKTsKKyAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlU
eXBlIGhpZ2hQZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlw
ZSwgLTIpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xF
KEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxs
IHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAg
ICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5z
aW9uc0dMIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50
IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKKyAgICAv
LyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGlj
aCBjb3VsZCBvcgorICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBh
YmlsaXRpZXMgb2YgdGhlIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQg
dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKTsKKyAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgdm9pZCByZWFkblBp
eGVsc0ltcGwoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpKiBsZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dz
LCBHQ0dMdm9pZCogZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCk7CisKKyAg
ICAvLyBEaWQgdGhlIG1vc3QgcmVjZW50IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUg
aW4gYW4gYWNjZXB0YWJsZSBzdGF0ZT8KKyAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsK
KworICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcHJlcGFy
ZVRleHR1cmVJbXBsKCk7CisgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsKKyAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3Rl
bmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CisgICAg
c3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXks
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOworI2VuZGlmCisgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgorICAgIGJvb2wgd2Fp
dEFuZFVwZGF0ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gUGxh
dGZvcm0gc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICBzdGF0
aWMgdm9pZCBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKKworICAgIEdDR0x1aW50
IG1fdGV4dHVyZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKKyAgICBHQ0dMdWlu
dCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsQ29s
b3JGb3JtYXQgeyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCB7IDAgfTsKKyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OworICAgIEdDR0x1
aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OworICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdp
bmdCdWZmZXI6dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCisgICAgR0NHTHVpbnQgbV9wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIHsgMCB9OworICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVy
ZSB3aGVuIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KKyAgICBH
Q0dMdWludCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKKyAgICAvLyBRdWVyaWVk
IGF0IGRpc3BsYXkgc3RhcnR1cC4KKyAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRh
cmdldCB7IC0xIH07CisgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigp
LgorICAgIExpc3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKyAgICBib29s
IG1faXNGb3JXZWJHTDIgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3Vu
dCB7IDAgfTsKKyAgICBib29sIG1fZmFpbE5leHRTdGF0dXNDaGVjayB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3VzZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKKyAgICBzaXplX3QgbV9v
bGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKKyAgICBTY29wZWRHTEZlbmNlIG1fZnJh
bWVDb21wbGV0aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOworICAgIEdyYXBoaWNzQ29udGV4
dEdMU3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+
IG1fZXh0ZW5zaW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIEdyYXBoaWNzQ29udGV4
dEdMSU9TdXJmYWNlU3dhcENoYWluIG1fc3dhcENoYWluOworICAgIEVHTERpc3BsYXkgbV9kaXNw
bGF5T2JqIHsgbnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0T2JqIHsgbnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcg
bV9jb25maWdPYmogeyBudWxscHRyIH07CisgICAgLy8gQmFja2luZyBzdG9yZSBmb3IgdGhlIHRo
ZSBidWZmZXIgd2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5LgorICAgIC8vIFdo
ZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3aW5nIGJ1
ZmZlciBiYWNraW5nIHN0b3JlLgorICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09
IHRydWUsIHRoaXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7CisgICAgdm9p
ZCogbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24g
eyBmYWxzZSB9OworICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9oaWdoUGVy
Zm9ybWFuY2VHUFVSZXF1ZXN0OworI2VuZGlmCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorICAgIEdDR0x1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisgICAgR0NHTHVpbnQg
bV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsgMCB9OworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisg
ICAgc3RkOjp1bmlxdWVfcHRyPE5pY29zaWE6OkdDR0xMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Cisj
ZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKKyNlbmRpZgorCisgICAgZnJpZW5k
IGNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOworI2lmIFVTRShOSUNPU0lBKQorICAgIGZyaWVuZCBj
bGFzcyBOaWNvc2lhOjpHQ0dMTGF5ZXI7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAg
ZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyNlbmRpZgorfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXggY2Nj
YjU3MjRhNGNkOTJmZjBiZjhlNzM4M2M1ZDlmZTY4OWQ3N2I4Ni4uNGQ1OWNiMTJjNWU0NDc1Mzdk
ZTBhZWUyMTBkZTAwMmNiZDc5ZmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5j
cHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0
ZXMsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50
VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0
QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVCghcGl4ZWxC
dWZmZXIuc2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAppbmRleCBmNzlmMjJlMzEzZWExMTczODljNWY0MDlkZDBmNDk0
YWUxNWFlYjkzLi5hZjRjMTdkNTFmYTU5ZjQ2ODhkZjQzOTY1MzUxOGY1Y2EwZGFhZjIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3Vy
Y2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50
U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBj
b25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAg
ICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFz
U2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKaW5kZXggMjU1NWZm
MDgzMjhlMzQ2OWNkN2E0YTI5N2RiZWY3OTBmNjMwNTI4OC4uZTQwOTVhMmIxOWUyNGQxZGI4MDlj
MTgyZjY0MzJiZGMwY2I3ODZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApAQCAt
MjcsMTIgKzI3LDE4IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIK
ICNpbmNsdWRlICJJT1N1cmZhY2UuaCIKIAorI2lmIEVOQUJMRShWSURFTykKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTsKK30KKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgeworY2xhc3MgV0VCQ09S
RV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRH
TEFOR0xFIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMQ29j
b2E+IGNyZWF0ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAg
fkdyYXBoaWNzQ29udGV4dEdMQ29jb2EoKTsKQEAgLTQ5LDE0ICs1NSwyNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwog
I2VuZGlmCiAKLSAgICAvLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBvdmVycmlkZXMuCisgICAg
Ly8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICBi
b29sIGNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgYm9vbCBmbGlwWSkgZmluYWw7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
R3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOworI2VuZGlmCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3Vs
dHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBo
aWNzQ29udGV4dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYp
OwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3
MmM3N2VjYjIxOWUzOS4uMDI5Y2MzZmFlNDdmODcwMjNjNWMzMDIyNWUwMjU5YTA0MWYwZDY2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5k
aWYKIAogI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxh
dGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJs
ZSgpID09IHRydWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJl
YWRlZCBtYW5uZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxz
ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1
dCBhbHdheXMgc2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIg
YW5kIG51bGxwdHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEUqIGN1cnJlbnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGlj
dGFibGUoKQogewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxp
emVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAg
ICAgfQogCiAgICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNr
ZW5kLiIsIGF0dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRp
dmVEaXNwbGF5VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
ZmF1bHREaXNwbGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNl
TWV0YWwpIHsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9Q
TEFURk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0
YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAg
ICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0Vf
QU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9X
RVJfQU5HTEUpOwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpsb3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYg
KHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJl
ZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRl
cy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxh
eUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5h
dGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlz
cGxheTsKKyAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpoaWdoUGVyZm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFw
aGljc0NvbnRleHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xB
TkdMRShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVu
Y3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29h
IHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJz
KQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRy
cykKIHsKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVu
c2lvbik7CiAgICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0g
ICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRo
cm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkg
b24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3Rz
IGFyZSBub3Qgc2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVy
cywgc28KICAgICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0
bGluZy4gT3BlbkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21l
IHNvcnQgb2YgaW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAot
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIs
IHRoaXMpOworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xF
ICglcCkuIiwgdGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVu
dCgpKSB7CkBAIC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAh
PSB0aGlzKTsKICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9H
KFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlz
KTsKKyAgICBMT0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICgl
cCkuIiwgdGhpcyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgp
IGNvbnN0CkBAIC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6
OmlzVmFsaWQoKSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRm
b3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXND
aGVjaykgewogICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0
ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRT
dGF0dXMgPSAwOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0
VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIGlmICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUy
MCw3ICs1MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIGlmIChtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcg
KzUyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQoKQogICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5n
KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNr
aW5nKCkKIHsKICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0
eSgpKTsKICAgICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxs
b2NhdGluZyBhIG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVz
c3VyZS4KQEAgLTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAg
ICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBh
dXRvIGJhY2tpbmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoKQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShi
YWNraW5nKSwgcGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5n
LCB2b2lkKiBwYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCog
cGJ1ZmZlcikKIHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJp
bmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4
dHVyZVRhcmdldCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNU
QU5HTEVfQVJCKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtl
Q3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VS
RkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNo
bWVudFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwg
R0NHTHVpbnQgcGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewog
ICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19j
YXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2
NywyNCArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZh
Y2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1faXNGb3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNp
bXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsK
LSAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdl
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdl
cigpLmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJl
KSB7Ci0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JE
aXNwbGF5KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXko
KQogewogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0
LDE1ICs3MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRp
c3BsYXkoKQogCiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGlj
c0NvbnRleHRHTENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3Yg
PSBHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1f
Y3YuZ2V0KCk7CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHMoKQogewogICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVm
ZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIu
aGFuZGxlKQpAQCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxN
ZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvTWVkaWFTYW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFp
bi5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRp
c3BsYXlCdWZmZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZv
cm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3Jt
RwogfQogI2VuZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZp
ZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdP
Ymo7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxF
KFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRl
ICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSA8cGFsL3NwaS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi9TY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNp
bmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0
dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNp
emU7IgotICAgICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBp
bnQgdV9mbGlwWTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4o
KSIKLSAgICAieyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAx
LjApOyIKLSAgICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41
ICsgLjU7IgotICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFs
aXplZFBvc2l0aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2
X3lUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2
VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19Owot
Ci1zdGF0aWMgY29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
IHsKLSAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1
X3lUZXh0dXJlU2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29y
ZGluYXRlOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAg
InZvaWQgbWFpbigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9z
aXRpb24sIDAsIDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bv
c2l0aW9uICogLjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAg
ICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIK
LSAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95
VGV4dHVyZVNpemU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXpl
ZFBvc2l0aW9uICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHBy
IGF1dG8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVu
aWZvcm0gc2FtcGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JN
YXRyaXg7IgotICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2
YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0g
ICAgInsiCi0gICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1
X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0
ZXh0dXJlMkQodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIg
ICAgeXV2LmEgPSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1h
dHJpeDsiCi0gICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdt
ZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3Jt
IHNhbXBsZXIyRFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1h
dHJpeDsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZh
cnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAg
ICAieyIKLSAgICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVj
dCh1X3lUZXh0dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2Ig
PSB0ZXh0dXJlMkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIK
LSAgICAiICAgIHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVf
Y29sb3JNYXRyaXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2Ugewot
ICAgIFVua25vd24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJh
bnNmZXJGdW5jdGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBr
SVRVX1JfNjAxXzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQ
M19ENjUsCi0gICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJh
bmdlRnJvbVBpeGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBp
eGVsRm9ybWF0KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4Ogot
ICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhB
VkUoQ09SRVZJREVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlm
Ci0gICAgICAgIHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
X0FSR0IyMTAxMDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBD
YkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZ
cENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0
NFlwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NF
RF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxS
YW5nZTo6RnVsbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5r
bm93bjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5j
dGlvbkZyb21TdHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQot
ICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAg
ICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENG
RXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkp
Ci0gICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0g
ICAgaWYgKGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1Az
KCkgJiYgQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkK
LSAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2Fu
TG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVx
dWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVW
aWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0
cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0
dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVy
RnVuY3Rpb25DVjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAg
ICAgR0xmbG9hdCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxv
YXQgY2I7Ci0gICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07
Ci0KLSAgICBjb25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZs
b2F0IGIpCi0gICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkK
LSAgICAgICAgOiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAg
IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xm
bG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAg
ICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0K
LX07Ci0KLXN0cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBibGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRD
b2xvciB3aGl0ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xv
ciByZWQgICAgIHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBn
cmVlbiAgIHswLCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVl
ICAgIHswLCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAg
IHswLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsx
LCAwLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAx
LCAwfTsKLX07Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0
XVs0XTsKLQotICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNi
Q29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25z
dCBHTGZsb2F0KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0g
ICAgfQotCi0gICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9h
dENvbG9yJikgY29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4
KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZm
aWNpZW50KQotICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlD
YkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiAr
IEtnICogRyArIEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0g
ICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFs
dWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlz
IGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0
aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6
Ci0gICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAq
ICgxIC0gS2IpKSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtn
KSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8g
V2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBb
MTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEg
cmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZh
bHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFu
Z2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2Vm
ZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0
IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5m
IC8gMjE5LmY7Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVs
UmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlT
Y2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNy
U2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10g
PSAwOwotCi0gICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0g
PSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZm
aWNpZW50IC8gY2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZm
aWNpZW50KTsKLSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGlu
Z0ZhY3RvcjsKLSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBj
YkNvZWZmaWNpZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsK
LQotICAgIHJvd3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11b
Ml0gPSAwOwotICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5h
bCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4
XQotICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0
byBbMTYsIDI0MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7
ICsrcm93TnVtYmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAg
ICAgICAgYXV0byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAg
ICAgYXV0byYgeiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAg
ICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJh
bmdlOjpWaWRlbykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQot
Y29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxv
YXRDb2xvciYgY29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAg
ICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsg
cm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVsw
XSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAq
IGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJn
Yi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5i
ICsgcm93c1syXVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRv
UkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRy
YW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9
IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1h
dHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20g
dGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAg
Ly8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0
YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4x
MTRmLCAwLjI5OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxs
TWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAx
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwg
MCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
eWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRy
aWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2
IDIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJU
LjcwOS0yLTE5OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5Vmlk
ZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25z
dGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVs
bCwgMC4wNzIyLCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwg
MjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAg
IDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQs
IDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRh
LCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFn
ZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBm
dWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTks
ICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAg
ICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4
ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3
MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIu
NzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRo
ZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8v
IGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAu
MDU5MywgMC4yNjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAx
MjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxh
Y2sgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIw
VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVu
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMx
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2Vu
dGEgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEu
NWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwg
MCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVs
bG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiks
ICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0g
ICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01Q
VEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVl
Lm9yZy9kb2N1bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXgg
c21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07
Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQw
TVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94
aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNN
UFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0
MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVs
bG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNv
bG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRl
MjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwg
IDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJl
ZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAv
IDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJv
eGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJT
TVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwot
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAx
LCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpj
eWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsK
LSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8s
IFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAg
ICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJh
bnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAg
IG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1h
dHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVu
Y3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlv
bkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMu
Z2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNW
OjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQo
KS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjpr
U01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNl
cy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQot
ICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQg
d2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxS
YW5nZTo6VW5rbm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0g
ICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBt
YXRyaWNlcy5nZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8g
QXNzdW1lIHVua25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRl
cmF0b3IgPT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmlj
ZXMuZ2V0KCkuZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7
Ci0KLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJl
dHVybiBpdGVyYXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4
dCkgfTsKLSAgICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rl
c3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFOjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmIG93bmVyKQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0
aWJsZSBjb250ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBk
b2VzIG5vdAotICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5Lgot
ICAgIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09O
VEVYVF9DTElFTlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAy
LAotICAgICAgICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUs
Ci0gICAgICAgIEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19F
TkFCTEVEX0FOR0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJ
TkRfR0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAg
ICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0
Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25m
aWcoKTsKLSAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5
LCBjb25maWcsIG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlm
IChjb250ZXh0ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAg
YXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRl
eHQpOwotICAgIH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQp
IHsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9y
ZWN0YW5nbGUiKTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3Rl
eHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBH
TF9OT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdM
aW50IHZlcnRleFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0g
ICAgR0xpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUik7Ci0gICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAg
IGF1dG8gcHJvZ3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyLCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4
U2hhZGVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAg
ICAgIGdsOjpEZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNl
IGFyZSB3cml0dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQg
dnNMZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5n
dGgoKSA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBH
TGludCBmc0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
MkQubGVuZ3RoKCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgo
KTsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBz
X3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUy
RCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4
dHVyZVJlY3RhbmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAm
dmVydGV4U2hhZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJh
Z21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBn
bDo6Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNo
YWRlcik7Ci0gICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2w6OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlz
IGNoZWNrZWQgYWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24g
YmVuZWZpdC4KLQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5C
dWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVs
ZXRlQnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0
aWNlc1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsK
LSAgICBnbDo6QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgZ2w6OkJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0
aWNlcywgR0xfU1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAg
ICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1
ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGlu
dCBzdGF0dXMgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFt
LCBHTF9MSU5LX1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMp
IHsKLSAgICAgICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZS
b2J1c3RBTkdMRSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAm
dnNTdGF0dXMpOwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRT
aGFkZXJpdlJvYnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwg
bnVsbHB0ciwgJmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFKCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIs
IHRoaXMsIHN0YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjb250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xl
YW51cC5yZWxlYXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBt
X2Rpc3BsYXkgPSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25m
aWcgPSBjb25maWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0g
ICAgbV9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7
Ci0gICAgbV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9u
KHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9j
YXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4
Iik7Ci0gICAgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRp
b24oeXV2UHJvZ3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2Nh
dGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXpl
Iik7Ci0gICAgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1M
b2NhdGlvbih5dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlv
bkF0dHJpYnV0ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJh
X3Bvc2l0aW9uIik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdo
aWxlIHRoZSBwcm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0o
eXV2UHJvZ3JhbSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRp
b25BdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQ
b3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAg
IGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2Us
IFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQy
MGYnIHBpeGVsIGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3Jt
YXRzLgotICAgIE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1h
dFR5cGUoaW1hZ2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVf
NDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShD
T1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVs
Rm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9S
YW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZv
cm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJl
ZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFz
dXJmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVk
ID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0Rmxp
cFkKLSAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1
cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7
Ci0gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRo
ZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhp
cyBpcyBhIG5vLW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2Nv
bnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXks
IG1fY29udGV4dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9
IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4
ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmlu
aXRpYWxpemVkIGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAv
LyBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xf
VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUs
IG51bGxwdHIpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0g
ICAgfSk7Ci0gICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0g
ICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBn
bDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0
YXR1cyA9IGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBp
ZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1
cmUuIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0
ZXh0dXJlcyBmb3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9T
dXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0
ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxh
bmVXaWR0aCA9IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRv
IHV2UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwot
Ci0gICAgR0xlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5U
ZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtl
U2NvcGVFeGl0KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1
dlRleHR1cmUpOwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsK
LSAgICBnbDo6QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3Jl
OjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZp
ZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1
dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEp
OwotICAgIGlmICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2
SGFuZGxlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFu
ZGxlXSB7Ci0gICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNl
KGRpc3BsYXksIHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7
Ci0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNs
ZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4
dHVyZXMoMSwgJnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1
cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9
IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2Nv
bmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwg
R0xfUkVELCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJm
YWNlLCAwKTsKLSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBh
dXRvIHlIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwg
eUhhbmRsZV0gewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNw
bGF5LCB5SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBw
YXJhbWV0ZXJzLgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwg
MCk7Ci0gICAgZ2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0g
ICAgZ2w6OlVuaWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlw
WTo6WWVzID8gMSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYo
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWln
aHQpOwotCi0gICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxG
b3JtYXQpOwotICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9t
U3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50
KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBj
b2xvck1hdHJpeCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24o
cmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29s
b3JNYXRyaXhVbmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAg
ICAvLyBEbyB0aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5H
TEVTLCAwLCA2KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1
cmZhY2VTZWVkID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91
dHB1dFRleHR1cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1f
bGFzdEZsaXBZID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
QU5HTEUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQz
MDFmMTI1MWI3MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGlj
c0NvbnRleHRHTENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5o
IgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0v
LyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9m
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBp
bnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5H
TEUgQ29jb2EuCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUo
Q1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBGbGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4
dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RU
ZXh0dXJlU2VlZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmIG1fb3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9k
aXNwbGF5IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250
ZXh0IHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9j
b25maWcgeyBudWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIg
eyAwIH07Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAg
ICBHQ0dMaW50IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQg
bV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlw
WVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2Nh
dGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7
IC0xIH07Ci0gICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9
OwotCi0gICAgRmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2lu
dGVyPElPU3VyZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJm
YWNlU2VlZCB7IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dM
dWludCwgdW5zaWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVy
ZVNlZWQ7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBo
aWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJ
T04pCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckND
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVy
ZTJEIHsKKyAgICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVj
MiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7Igor
ICAgICJ1bmlmb3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVD
b29yZGluYXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZvaWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFf
cG9zaXRpb24sIDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBh
X3Bvc2l0aW9uICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAi
ICAgICAgICBub3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55
OyIKKyAgICAiICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIK
KyAgICAiICAgIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisg
ICAgIn0iX3MKK307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRl
eHR1cmVSZWN0YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAi
dW5pZm9ybSB2ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIg
dl95VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29y
ZGluYXRlOyIKKyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlv
biA9IHZlYzQoYV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQ
b3NpdGlvbiA9IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09
IDEpIgorICAgICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXpl
ZFBvc2l0aW9uLnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVk
UG9zaXRpb24gKiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5h
dGUgPSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9
OworCitjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0
dXJlOyIKKyAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3Jt
IG1hdDQgdV9jb2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRp
bmF0ZTsiCisgICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2
b2lkIG1haW4oKSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5y
ID0gdGV4dHVyZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAi
ICAgIHl1di5nYiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRl
KS5yZzsiCisgICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5
dXYgKiB1X2NvbG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBh
dXRvIHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsi
CisgICAgInVuaWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0g
bWF0NCB1X2NvbG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGlu
YXRlOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZv
aWQgbWFpbigpIgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIg
PSB0ZXh0dXJlMkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAg
ICAiICAgIHl1di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29v
cmRpbmF0ZSkucmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0Nv
bG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3Mg
UGl4ZWxSYW5nZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKwor
ZW51bSBjbGFzcyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9S
XzcwOV8yLAorICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtE
Q0lfUDMsCisgICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhl
bFJhbmdlIHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQorewor
ICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
NDQ0QVlwQ2JDcjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoK
KyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAg
IGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisg
ICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFu
Z2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVv
UmFuZ2U6CisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMp
CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVv
UmFuZ2U6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNh
c2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVW
SURFT19DT01QUkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25D
ViB0cmFuc2ZlckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAg
aWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247
CisgICAgaWYgKENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9S
XzcwOV8yKSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8y
OworICAgIGlmIChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVf
Ul82MDFfNCkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFf
NDsKKyAgICBpZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01Q
VEVfMjQwTV8xOTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRF
XzI0ME1fMTk5NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9EQ0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1h
dHJpeF9EQ0lfUDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1Az
OworICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1Az
X0Q2NSgpICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2
NSkpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYg
KGNhbkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgp
ICYmIENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAp
KQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENv
bG9yIHsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0
IHI7CisgICAgICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAg
ICAgIH0gcmdiOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAg
ICAgICAgICAgR0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0g
eWNiY3I7CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBH
TGZsb2F0IGcsIEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7Cisg
ICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBH
TGZsb2F0IHNjYWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8g
c2NhbGUgfQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJz
KEdMZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVl
IDogLXZhbHVlOworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVx
dWFsVG8oY29uc3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4
RGVsdGEpCisgICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4
RGVsdGEpOworICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHTGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25z
dGV4cHIgR0xmbG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHTGZsb2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR0xmbG9hdENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JN
YXRyaXggeworICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1h
dHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmlj
aWVudCk7CisKKyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRD
b2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4
cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JD
b2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAg
ICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhl
IGZvcm06CisgICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0g
KEIgLSBZKSAvICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAt
IEtyKSkKKyAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBp
biBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0g
MQorICAgIC8vCisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBh
bmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3Ip
KSAqIENyCisgICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkg
LSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3Ig
LyBLZykgKiBDcgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRl
byByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwg
YW5kIENiICYgQ3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0
aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFu
ZCBDciBhbGwgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9m
IDI1Ni4KKworICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0g
Y3JDb2VmZmljaWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4
ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2Nh
bGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIy
NC5mOworCisgICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0g
PSAwOworICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29l
ZmZpY2llbnQpOworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2Fs
aW5nRmFjdG9yOworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEg
LSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAg
cm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
ICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsK
KworICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2Jj
clNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJd
ID0gMDsKKyAgICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJv
d3NbM11bMV0gPSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOwor
CisgICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252
ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2Yg
dmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJv
d051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8m
IHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAg
ICAgYXV0byYgeSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAg
YXV0byYgdyA9IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7Cisg
ICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0g
eCAqIDE2IC8gMjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1h
dHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEdMZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsg
cm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93
c1swXVszXSwKKyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAq
IGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAg
ICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5n
ICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0
YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1
bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0
aW9uKQoreworICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2Zl
ckZ1bmN0aW9uQ1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0
IFlDYkNyTWF0cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBt
YXRyaWNlczsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8v
IE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYw
MSByZXYgNCBzcGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1S
RUMtQlQuNjAxCisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRy
aXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIg
c3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4x
MTRmLCAwLjI5OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdM
ZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdM
ZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYg
LyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1
LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYx
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVm
IC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJp
eCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
ci42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUw
LCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpn
cmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1
bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fz
c2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1
LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAx
NzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFu
LCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21w
b25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBz
Oi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywg
MC4wNzIyLCAwLjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlG
dWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEu
NWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChy
NzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDEx
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAx
LjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisK
KyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNr
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJs
YWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
cjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAi
ci43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41
ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIz
NywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1
Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBH
TGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBN
YXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4y
MDIwLTIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVD
LUJULjIwMjAKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0
cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHBy
IHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwg
MC4wNTkzLCAwLjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4
ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQs
ICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpy
ZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
YnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAx
NiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxs
b3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAq
IEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1h
dHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsK
KworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwg
ICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0
cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAx
MSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAg
MS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAv
IDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNv
bG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xv
cigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgY3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJv
bSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAg
ICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNv
bnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJh
bmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1h
dHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEy
IH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBk
b2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYy
LCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAx
MTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Ymx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICog
R0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2Vy
dCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRh
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChz
bXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
Ojp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5v
dCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUs
ICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3Jl
ZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21w
dGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiks
ICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3
NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1
bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUg
MjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRp
c3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFj
ZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYw
MV80KSwgcjYwMVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShN
YXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQp
LCByNjAxRnVsbE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5
KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3
MDlWaWRlb01hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBp
eGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1
bGxNYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVv
TWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5n
ZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRy
aXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpW
aWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlk
ZW9NYXRyaXgpOworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJh
bmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0
ME1GdWxsTWF0cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tl
ZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4K
KyAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdl
ID09IFBpeGVsUmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVs
bDsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5j
dGlvbnMgYXJlIHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQo
KSkKKyAgICAgICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1hdHJpY2VzLmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBH
cmFwaGljc0NvbnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRl
eHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBp
ZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9k
aXNwbGF5LCBtX2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJm1feXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZtX2ZyYW1lYnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2Nv
bnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYShHcmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3du
ZXIpCit7CisgICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0
ZSB3aXRoIG93bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5l
c3Mgb3IgV2ViR0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAg
IG93bmVyLm1faXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdM
X0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAg
IEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZB
TFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlV
TSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdM
RGlzcGxheSBkaXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmln
IGNvbmZpZyA9IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0
ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmos
IGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50
KGRpc3BsYXksIGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6bWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVz
dHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29s
IHVzZVRleHR1cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBH
TF9URVhUVVJFXzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlT
VCkKKyAgICBpZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVz
dEV4dGVuc2lvbkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAg
ICAgaWYgKGdsOjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNo
YWRlcihHTF9WRVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpD
cmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9
IGdsOjpDcmVhdGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAg
ICAgZ2w6OkRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgfSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJl
IGNvbXBpbGUtdGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
VmVydGV4U2hhZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8g
c195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFk
ZXJUZXh0dXJlUmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRl
clNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195
dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUy
RCA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRl
clNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7
CisgICAgZ2w6OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVy
U291cmNlLCAmZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7
CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hT
aGFkZXIoeXV2UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1
dlByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3Jh
bSk7CisgICAgLy8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0
aWNhbCBwYXJhbGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRl
eEJ1ZmZlciA9IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7Cisg
ICAgYXV0byB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4
QnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIp
OworICAgIH0pOworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwg
MSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgeXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZG
RVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBH
THVpbnQgZnJhbWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1l
YnVmZmVyKTsKKyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Zy
YW1lYnVmZmVyXSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVm
ZmVyKTsKKyAgICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dy
YW1pdlJvYnVzdEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAm
c3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7
CisgICAgICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09N
UElMRV9TVEFUVVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3Rh
dHVzID0gMDsKKyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFk
ZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBM
T0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFp
bGVkIHRvIGxpbms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0
dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2Uo
KTsKKyAgICB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZl
ckNsZWFudXAucmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250
ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1
ZmZlciA9IHl1dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7
CisgICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7Cisg
ICAgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0
aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAg
IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVy
ZVNpemUiKTsKKyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0
cmliTG9jYXRpb24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlz
IGRlbGV0ZWQgYnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGlu
IHVzZS4KKyAgICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6
VmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdM
X0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1
cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJl
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgRmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9u
bHkgc3VwcG9ydHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUg
c3VwcG9ydGluZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0g
Q1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9y
bWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8v
IE5PTElOVAorICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9Q
SVhFTF9GT1JNQVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9y
bWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhl
bEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxS
YW5nZQorI2VuZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBB
c2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywg
Rm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1
ZmZlckdldElPU3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChz
dXJmYWNlKTsKKyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFj
ZSA9PSBtX2xhc3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1
cmZhY2VTZWVkCisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBt
X293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0
ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVk
IHRvIGl0LCBhbmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNp
bmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRo
KGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFn
ZSk7CisKKyAgICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBU
aGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBl
YXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVy
cm9yIGlzIG5vdCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFr
ZVNjb3BlRXhpdChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQs
IHR5cGVdIHsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRl
eHR1cmUpOworICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGds
OjpCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0
ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUy
RChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91
dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRv
IGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCk7CisKKyAgICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8g
c291cmNlLgorICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUo
c3VyZmFjZSwgMCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRP
ZlBsYW5lKHN1cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3Vy
ZmFjZUdldEhlaWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0
dXJlVGFyZ2V0ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAg
R0x1aW50IHV2VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OworICAgIGF1dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0g
eworICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7Cisg
ICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2
aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRh
Y2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xf
SU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhl
aWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNj
b3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29y
ZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOwor
ICAgIH0pOworCisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMo
MSwgJnlUZXh0dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQo
W3lUZXh0dXJlXSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOwor
ICAgIH0pOworICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6Qmlu
ZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZl
ckFuZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJn
ZXQsIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5
UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhh
bmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRl
c3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0p
OworCisgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVu
aWZvcm0xaShtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFp
KG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2
RmxpcFlVbmlmb3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAg
Z2w6OlVuaWZvcm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgs
IHlQbGFuZUhlaWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24sIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdl
ID0gcGl4ZWxSYW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFu
c2ZlckZ1bmN0aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0
PENGU3RyaW5nUmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JH
Qk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlv
bik7CisgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biwgMSwgR0xfRkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJh
d2luZy4KKyAgICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9s
YXN0U3VyZmFjZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNl
U2VlZDsKKyAgICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50
ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAg
ICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0
ZTM5NjBiNmQ3MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx3dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHcmFwaGljc0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxl
bWVudGF0aW9uIGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBw
YXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENv
Y29hLgorY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZD
b2NvYSgpIGZpbmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBGbGlwWSkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
KEdyYXBoaWNzQ29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2Vl
ZChHQ0dMdWludCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVT
ZWVkLmdldCh0ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBt
X293bmVyOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7
IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51
bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsg
bnVsbHB0ciB9OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9Owor
ICAgIFBsYXRmb3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGlu
dCBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3Jt
TG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlv
biB7IC0xIH07CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAt
MSB9OworICAgIEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9Owor
ICAgIEdDR0xpbnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAg
IEZsaXBZIG1fbGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1
cmZhY2VSZWY+IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQg
eyAwIH07CisKKyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVu
c2lnbmVkLCBJbnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOwor
fTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xF
TGF5ZXIuY3BwCmluZGV4IDkzYzAyMTRmMzlhODE5MjQyODBmMzczYzlhYzc5Mzg2YmQyMzI0NjAu
LmU3YzI5ZGQ1Y2JmZmYxNDRiZDFiODU1MTkxNmJmOGRiNjc0YWYwNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dM
QU5HTEVMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcApAQCAtMTc3LDcgKzE3Nyw3IEBA
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29u
dGV4dDo6cGxhdGZvcm1Db25maWcoKSBjCiAgICAgcmV0dXJuIG1fY29uZmlnOwogfQogCi1HQ0dM
QU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRl
eHQpCitHQ0dMQU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdM
RSYgY29udGV4dCkKICAgICA6IEdDR0xMYXllcihjb250ZXh0KQogICAgICwgbV9hbmdsZUNvbnRl
eHQoQU5HTEVDb250ZXh0OjpjcmVhdGVDb250ZXh0KCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xF
TGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFw
L05pY29zaWFHQ0dMQU5HTEVMYXllci5oCmluZGV4IDcwNTc5ZDI4YjgwYmI5NDMwZTg4MzU5NDUz
MGIwMjUwZjc4NDUzMjUuLjc4NzM3ODJjM2ZkMjJjNTBhNTc1MDA1YWFkZTBmNGYwMDBmMmIxYWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4
bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCkBAIC03Niw3
ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgRUdMU3VyZmFjZSBtX3N1cmZhY2UgeyBudWxscHRy
IH07CiAgICAgfTsKIAotICAgIEdDR0xBTkdMRUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMJik7CisgICAgR0NHTEFOR0xFTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRSYpOwogICAgIHZpcnR1YWwgfkdDR0xBTkdMRUxheWVyKCk7CiAKICAgICBib29sIG1h
a2VDb250ZXh0Q3VycmVudCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NH
TExheWVyLmNwcAppbmRleCAwMzU3OTQ1OTJkMTZmYmNkZGIxMWQxNTcxYzYzZmNkM2M4YzY0YWE1
Li5hOWI0ZjUwODI4NTc2NTgzYzJmNzJlMmNmMjFhODA0Y2U2M2Q0YzVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NH
TExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2Ug
Tmljb3NpYSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1HQ0dMTGF5ZXI6OkdDR0xM
YXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKK0dDR0xMYXllcjo6R0NHTExh
eWVyKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wmIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKICAgICAsIG1fY29udGVudExheWVyKE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3Jl
YXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5
KCp0aGlzKSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmgKaW5kZXggNDMy
OTkwNDYwOTg2NzViN2JlYWI5NzlmMjE2NTM3NzViZTM1ZTBhMi4uYTc2NzE0OGI0NjNmNTg1ZjZj
MWYyYWQ4NjVhMjAzOTJiMWM4ZGNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5
ZXIuaApAQCAtMzAsMTAgKzMwLDE1IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShOSUNP
U0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oIgogI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KIAorI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTEFOR0xFLmgiCisjZWxzZQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xDb250ZXh0
OwogfQpAQCAtNDMsNyArNDgsMTIgQEAgbmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgR0NHTExh
eWVyIDogcHVibGljIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEdDR0xMYXll
cihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOworI2lmIFVTRShBTkdMRSkKKyAg
ICB1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMID0gV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTsKKyNlbHNlCisgICAgdXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCA9
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOworI2VuZGlmCisgICAgZXhwbGljaXQg
R0NHTExheWVyKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wmKTsKIAogICAgIHZpcnR1YWwgfkdD
R0xMYXllcigpOwogCkBAIC01NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3YXBCdWZm
ZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCYgbV9jb250ZXh0OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0wmIG1fY29udGV4dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R0xDb250ZXh0PiBt
X2dsQ29udGV4dDsKIAogICAgIFJlZjxDb250ZW50TGF5ZXI+IG1fY29udGVudExheWVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKaW5kZXggYjgzMmExODZhNDJjOGJlMzIy
YTRjNzA4MWY3NWRjZDQ5MGMyN2Y4OC4uMmMwZDk5N2NmMzgwMTgxMTFkYzQ3M2ExZWRmYzg1YjNk
Zjc4ZDhmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCkBAIC0xLDcg
KzEsOCBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBNb3ppbGxhIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2Vv
ayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyLDIyICsyMywzMDk1IEBACiAgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5oIgogCi0jaWYgRU5BQkxFKFdFQkdMKQorI2lmIEVOQUJMRShXRUJHTCkgJiYgIVVTRShB
TkdMRSkKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgorI2luY2x1ZGUgIkFOR0xFV2ViS2l0
QnJpZGdlLmgiCisjaW5jbHVkZSAiR0xDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50
U2l6ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgot
I2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCisj
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRl
IDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworI2lmIFVTRShPUEVOR0xfRVMpCisj
aW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCIKKyNlbHNlCisjaW5jbHVkZSAiRXh0ZW5z
aW9uc0dMT3BlbkdMLmgiCisjZW5kaWYKKworI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlICJF
cG94eVNoaW1zLmgiCisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIk9wZW5HTEVTU2hp
bXMuaCIKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIk9w
ZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorI2luY2x1ZGUgIk5pY29z
aWFHQ0dMTGF5ZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBU
aHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+JiBnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JT
aGFkZXIoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGF0
aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiogc2hhcmVkTmFtZUhhc2g7CisgICAg
c3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgc2hhcmVkTmFtZUhhc2ggPSBu
ZXcgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPjsKKyAgICB9KTsKKworICAgIHJldHVy
biAqc2hhcmVkTmFtZUhhc2g7Cit9CisKK3N0YXRpYyB2b2lkIHNldEN1cnJlbnROYW1lSGFzaE1h
cEZvclNoYWRlcihTaGFkZXJOYW1lSGFzaCogc2hhZGVyTmFtZUhhc2gpCit7CisgICAgKmdldEN1
cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpID0gc2hhZGVyTmFtZUhhc2g7Cit9CisKKy8vIEhh
c2ggZnVuY3Rpb24gdXNlZCBieSB0aGUgQU5HTEUgdHJhbnNsYXRvci9jb21waWxlciB0byBkbwor
Ly8gc3ltYm9sIG5hbWUgbWFuZ2xpbmcuIFNpbmNlIHRoaXMgaXMgYSBzdGF0aWMgbWV0aG9kLCBi
ZWZvcmUKKy8vIGNhbGxpbmcgY29tcGlsZVNoYWRlciB3ZSBzZXQgY3VycmVudE5hbWVIYXNoTWFw
Rm9yU2hhZGVyCisvLyB0byBwb2ludCB0byB0aGUgbWFwIGtlcHQgYnkgdGhlIGN1cnJlbnQgaW5z
dGFuY2Ugb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCisKK3N0YXRpYyB1aW50NjRfdCBuYW1l
SGFzaEZvclNoYWRlcihjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENTdHJpbmcgbmFtZUFzQ1N0cmlu
ZyA9IENTdHJpbmcobmFtZSk7CisKKyAgICAvLyBMb29rIHVwIG5hbWUgaW4gb3VyIGxvY2FsIG1h
cC4KKyAgICBTaGFkZXJOYW1lSGFzaComIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlciA9ICpn
ZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKTsKKyAgICBTaGFkZXJOYW1lSGFzaDo6aXRl
cmF0b3IgZmluZFJlc3VsdCA9IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+ZmluZChuYW1l
QXNDU3RyaW5nKTsKKyAgICBpZiAoZmluZFJlc3VsdCAhPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JT
aGFkZXItPmVuZCgpKQorICAgICAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWU7CisKKyAgICB1
bnNpZ25lZCBoYXNoVmFsdWUgPSBuYW1lQXNDU3RyaW5nLmhhc2goKTsKKworICAgIC8vIENvbnZl
cnQgdGhlIDMyLWJpdCBoYXNoIGZyb20gQ1N0cmluZzo6aGFzaCBpbnRvIGEgNjQtYml0IHJlc3Vs
dAorICAgIC8vIGJ5IHNoaWZ0aW5nIHRoZW4gYWRkaW5nIHRoZSBzaXplIG9mIG91ciB0YWJsZS4g
T3ZlcmZsb3cgd291bGQKKyAgICAvLyBvbmx5IGJlIGEgcHJvYmxlbSBpZiB3ZSdyZSBhbHJlYWR5
IGhhc2hpbmcgdG8gdGhlIHNhbWUgdmFsdWUgKGFuZAorICAgIC8vIHdlJ3JlIGhvcGluZyB0aGF0
IG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb250ZXh0IHdlCisgICAgLy8gZG9uJ3QgaGF2ZSB0
aGF0IG1hbnkgc3ltYm9scykuCisKKyAgICB1aW50NjRfdCByZXN1bHQgPSBoYXNoVmFsdWU7Cisg
ICAgcmVzdWx0ID0gKHJlc3VsdCA8PCAzMikgKyAoY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVy
LT5zaXplKCkgKyAxKTsKKworICAgIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2V0KG5h
bWVBc0NTdHJpbmcsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRl
cykKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8
Tmljb3NpYTo6R0NHTExheWVyPigqdGhpcyk7CisjZWxzZQorICAgIG1fdGV4bWFwTGF5ZXIgPSBt
YWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOworI2VuZGlm
CisKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Cisg
ICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hh
bmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KKworICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVu
ZGVyIGludG8uCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAg
ICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYW4gRkJP
LgorICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICA6OmdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Cisg
ICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVS
LCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1Q
X1RPX0VER0UpOworCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1
cmUpOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRl
eHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9U
LCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCAwKTsKKyNlbmRpZgorCisgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIEFT
U0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAg
aWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMo
MSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdG
Qk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgIDo6
Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAg
ICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAg
ICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgorICAgICAgICBn
bEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZC
TyA9IG1fZmJvOworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRl
cHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsK
KyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVy
YnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbmRpZgorICAgICAgICBpZiAoYXR0cmli
dXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbEdlblJlbmRl
cmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyNpZiAhVVNFKE9Q
RU5HTF9FUykKKyAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwor
CisgICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7CisgICAg
ICAgIG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7CisKKyAgICAgICAgLy8gRnJvbSB2ZXJzaW9u
IDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBv
dXB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgorICAgICAgICAvLyBPcGVuR0wgdmVyc2lvbiAz
LjIgdXNlcyBHTFNMIHZlcnNpb24gMS41MC4KKyAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2Vi
S2l0QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKKworICAgICAgICAvLyBGcm9tIHZl
cnNpb24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQg
YSBWQU8gZm9yIHJlbmRlcmluZy4KKyAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRlZCBh
bmQgYm91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJlTWFw
cGVyLCBXZWJHTCwgZXRjKS4gVGhpcyBpcworICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRpb246
IHRoZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0
IHdpbGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCisgICAgICAgIEdD
R0xpbnQgY3VycmVudFZBTyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlZF
UlRFWF9BUlJBWV9CSU5ESU5HKTsKKyAgICAgICAgaWYgKCFjdXJyZW50VkFPKSB7CisgICAgICAg
ICAgICBtX3ZhbyA9IGNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgICAgICBiaW5kVmVydGV4
QXJyYXkobV92YW8pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRm9yIGxv
d2VyIHZlcnNpb25zIHJlcXVlc3QgdGhlIGNvbXBhdGliaWxpdHkgb3V0cHV0IHRvIHRoZSBzaGFk
ZXIgY29tcGlsZXIuCisgICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9H
TFNMX0NPTVBBVElCSUxJVFlfT1VUUFVUKTsKKworICAgICAgICAvLyBHTF9QT0lOVF9TUFJJVEUg
aXMgbmVlZGVkIGluIGxvd2VyIHZlcnNpb25zLgorICAgICAgICA6OmdsRW5hYmxlKEdMX1BPSU5U
X1NQUklURSk7CisgICAgfQorI2Vsc2UKKyAgICAvLyBBZGp1c3QgdGhlIHNoYWRlciBzcGVjaWZp
Y2F0aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIEdMRVMzIChpLmUuIFdlYkdMMiBzdXBwb3J0KSB3
YXMgcmVxdWVzdGVkLgorI2lmIEVOQUJMRShXRUJHTDIpCisgICAgbV9jb21waWxlciA9IEFOR0xF
V2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCAoYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0g
R3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMikgPyBTSF9XRUJHTDJfU1BFQyA6
IFNIX1dFQkdMX1NQRUMpOworI2Vsc2UKKyAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlk
Z2UoU0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMX1NQRUMpOworI2VuZGlmCisjZW5kaWYKKworICAg
IC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgorICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJl
c291cmNlczsKKyAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsK
KworICAgIEFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMgPSBnZXRJbnRlZ2VyKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIEFOR0xFUmVzb3Vy
Y2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpOworICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heFZhcnlpbmdWZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
TUFYX1ZBUllJTkdfVkVDVE9SUyk7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAgIEFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpN
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4
VGV4dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRV
bmlmb3JtVmVjdG9ycyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9G
UkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMpOworCisgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBP
cGVuR0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOworCisgICAg
R0NHTGludCByYW5nZVsyXSB7IH07CisgICAgR0NHTGludCBwcmVjaXNpb24gPSAwOworICAgIGdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01FTlRf
U0hBREVSLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVj
aXNpb24pOworICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5n
ZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOworCisgICAgbV9jb21waWxlci5zZXRSZXNv
dXJjZXMoQU5HTEVSZXNvdXJjZXMpOworCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wo
KQoreworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigp
LnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICBpZiAobV90
ZXh0dXJlKQorICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQor
ICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2Vu
ZGlmCisKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAg
aWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAg
IDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgIH0gZWxz
ZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyNpZiBVU0Uo
T1BFTkdMX0VTKQorICAgICAgICBpZiAobV9kZXB0aEJ1ZmZlcikKKyAgICAgICAgICAgIGdsRGVs
ZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CisKKyAgICAgICAgaWYgKG1fc3Rl
bmNpbEJ1ZmZlcikKKyAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9zdGVu
Y2lsQnVmZmVyKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCisg
ICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgIH0KKyAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV9p
bnRlcm1lZGlhdGVUZXh0dXJlKTsKKyNlbmRpZgorCisjaWYgVVNFKENBSVJPKQorICAgIGlmICht
X3ZhbykKKyAgICAgICAgZGVsZXRlVmVydGV4QXJyYXkobV92YW8pOworI2VuZGlmCit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisjaWYg
VVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BV
U3RhdHVzKCkKK3sKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNv
bXBsaWFudCgpIGNvbnN0Cit7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICByZXR1cm4gdHJ1ZTsK
KyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShHVEsp
CitFeHRlbnNpb25zR0xPcGVuR0xDb21tb24mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRF
eHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykgeworI2lmIFVTRShPUEVOR0xf
RVMpCisgICAgICAgIC8vIGdsR2V0U3RyaW5naSBpcyBub3QgYXZhaWxhYmxlIG9uIEdMRVMyLgor
ICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnNHTE9wZW5HTEVTPih0
aGlzLCAgZmFsc2UpOworI2Vsc2UKKyAgICAgICAgLy8gRnJvbSBPcGVuR0wgMy4yIG9uIHdlIHVz
ZSB0aGUgQ29yZSBwcm9maWxlLCBhbmQgdGhlcmUgd2UgbXVzdCB1c2UgZ2xHZXRTdHJpbmdpLgor
ICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnNHTE9wZW5HTD4odGhp
cywgR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjApOworI2VuZGlmCisgICAg
fQorICAgIHJldHVybiAqbV9leHRlbnNpb25zOworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCit7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRl
ZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZl
bnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKQorICAgICAgICBtX2ZhaWxOZXh0U3RhdHVz
Q2hlY2sgPSB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJl
Rm9yRGlzcGxheSgpCit7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQoreworICAgIHJldHVybiBy
ZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb24pCit7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBF
eHRlbnNpb25zR0xPcGVuR0xDb21tb24mIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Cisg
ICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9ucy5l
bnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgICAgICAgICAv
LyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBhdHRycy5kZXB0
aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZh
bHNlOworICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgfQorICAgIGlm
IChhdHRycy5hbnRpYWxpYXMgJiYgIW1faXNGb3JXZWJHTDIpIHsKKyAgICAgICAgaWYgKCFleHRl
bnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7Cisg
ICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgICAgIHNldENvbnRl
eHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBleHRlbnNp
b25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Cisg
ICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgp
Cit7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKworI2lmICFVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRT
Y2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNl
dHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOworI2VuZGlmCisKKyAgICBp
ZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpCisgICAgICAgIHJlc29sdmVNdWx0aXNh
bXBsaW5nSWZOZWNlc3NhcnkoKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBzdGQ6OnN3
YXAobV90ZXh0dXJlLCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJl
MkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RF
WFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xGbHVzaCgpOworCisgICAgQVNTRVJUKG1f
c3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAobV9z
dGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7
CisgICAgZWxzZQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgOjpn
bEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtX3N0YXRlLmJvdW5kVGFyZ2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJE
ID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUoR0xfVEVYVFVSRTApIDogMCk7CisgICAgOjpnbEFjdGl2
ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCk7CisgICAgQVNTRVJUKG1fc3RhdGUu
Ym91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAobV9zdGF0ZS5i
b3VuZERyYXdGQk8gIT0gbV9mYm8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAg
OjpnbEZsdXNoKCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCit7CisgICAgYm9vbCBtdXN0UmVz
dG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykg
eworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zi
byk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwor
ICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAg
IG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgYXV0byByZXN1bHQgPSByZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7CisgICAg
aWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0
aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7CisgICAgaWYgKHdpZHRoIDwgMCB8fCBo
ZWlnaHQgPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKworICAg
IG1fY3VycmVudFdpZHRoID0gd2lkdGg7CisgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0Owor
CisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5n
IHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CisgICAgVGVtcG9yYXJ5
T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7CisgICAgCisg
ICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHJlc2hhcGVGQk9zKEludFNpemUod2lkdGgsIGhlaWdo
dCkpOworCisgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAgR0xmbG9h
dCBjbGVhckNvbG9yW10gPSB7IDAsIDAsIDAsIDAgfSwgY2xlYXJEZXB0aCA9IDA7CisgICAgR0xp
bnQgY2xlYXJTdGVuY2lsID0gMDsKKyAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7IEdMX1RS
VUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUgfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAg
ICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZm
ZmZmZmZmOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsK
KyAgICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAg
ICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09M
T1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xf
VFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CisKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKKworICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAgICA6OmdsR2V0RmxvYXR2
KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKDEpOworICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xf
REVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhHTF9U
UlVFKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQor
ICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVO
Q0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNp
bCgwKTsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWlu
dGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIDo6Z2xHZXRJbnRl
Z2VydihHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4o
JnN0ZW5jaWxNYXNrQmFjaykpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9G
Uk9OVCwgMHhmZmZmZmZmZik7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JB
Q0ssIDB4ZmZmZmZmZmYpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJf
QklUOworICAgIH0KKworICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOworCisgICAgOjpnbENsZWFy
Q29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJD
b2xvclszXSk7CisgICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwg
Y29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOworICAgIGlmIChhdHRycy5kZXB0aCkgeworICAg
ICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAg
ICAgICAgOjpnbERlcHRoTWFzayhkZXB0aE1hc2spOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3Rl
bmNpbCkgeworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAg
IDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7CisgICAgICAg
IDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7CisgICAg
fQorCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8p
OworCisgICAgYXV0byBlcnJvciA9IDo6Z2xHZXRFcnJvcigpOworICAgIGlmIChlcnJvciAhPSBH
TF9OT19FUlJPUikgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBPcGVuR0wg
ZXJyb3IgZHVyaW5nIEdyYXBoaWNzQ29udGV4dEdMIGJ1ZmZlciBpbml0aWFsaXphdGlvbiAoJWQp
LiIsIGVycm9yKTsKKyAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgOjpnbEZsdXNoKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVy
LCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVCht
X3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBBU1NFUlQobV9z
aGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBjb25zdCBhdXRv
JiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFs
dWU7CisgICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6U2hh
ZGVyVmFyaWFibGU+IGNvbWJpbmVkVmFyeWluZ3M7CisgICAgZm9yIChjb25zdCBhdXRvJiB2ZXJ0
ZXhTeW1ib2wgOiB2ZXJ0ZXhFbnRyeS52YXJ5aW5nTWFwKSB7CisgICAgICAgIGNvbnN0IFN0cmlu
ZyYgc3ltYm9sTmFtZSA9IHZlcnRleFN5bWJvbC5rZXk7CisgICAgICAgIC8vIFRoZSB2YXJ5aW5n
IG1hcCBpbmNsdWRlcyB2YXJpYWJsZXMgZm9yIGVhY2ggaW5kZXggb2YgYW4gYXJyYXkgdmFyaWFi
bGUuCisgICAgICAgIC8vIFdlIG9ubHkgd2FudCBhIHNpbmdsZSB2YXJpYWJsZSB0byByZXByZXNl
bnQgdGhlIGFycmF5LgorICAgICAgICBpZiAoc3ltYm9sTmFtZS5lbmRzV2l0aCgiXSIpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRG9uJ3QgY291bnQgYnVpbHQgaW4gdmFy
eWluZ3MuCisgICAgICAgIGlmIChzeW1ib2xOYW1lID09ICJnbF9GcmFnQ29vcmQiIHx8IHN5bWJv
bE5hbWUgPT0gImdsX0Zyb250RmFjaW5nIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Qb2ludENvb3Jk
IikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50
U3ltYm9sID0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmZpbmQoc3ltYm9sTmFtZSk7CisgICAg
ICAgIGlmIChmcmFnbWVudFN5bWJvbCAhPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAuZW5kKCkp
CisgICAgICAgICAgICBjb21iaW5lZFZhcnlpbmdzLmFkZChzeW1ib2xOYW1lLCBmcmFnbWVudFN5
bWJvbC0+dmFsdWUpOworICAgIH0KKworICAgIHNpemVfdCBudW1WYXJ5aW5ncyA9IGNvbWJpbmVk
VmFyeWluZ3Muc2l6ZSgpOworICAgIGlmICghbnVtVmFyeWluZ3MpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiB2YXJpYWJsZXM7Cisg
ICAgdmFyaWFibGVzLnJlc2VydmUoY29tYmluZWRWYXJ5aW5ncy5zaXplKCkpOworICAgIGZvciAo
Y29uc3QgYXV0byYgdmFyeWluZ1N5bWJvbCA6IGNvbWJpbmVkVmFyeWluZ3MudmFsdWVzKCkpCisg
ICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyeWluZ1N5bWJvbCk7CisKKyAgICBHQ0dMaW50
IG1heFZhcnlpbmdWZWN0b3JzID0gMDsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xHZXRJ
bnRlZ2VydihNQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOworI2Vsc2UK
KyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9W
QVJZSU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZWxzZSB7CisgICAgICAg
IEdDR0xpbnQgbWF4VmFyeWluZ0Zsb2F0cyA9IDA7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihH
TF9NQVhfVkFSWUlOR19GTE9BVFMsICZtYXhWYXJ5aW5nRmxvYXRzKTsKKyAgICAgICAgbWF4VmFy
eWluZ1ZlY3RvcnMgPSBtYXhWYXJ5aW5nRmxvYXRzIC8gNDsKKyAgICB9CisjZW5kaWYKKyAgICBy
ZXR1cm4gc2g6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5nVmVj
dG9ycywgdmFyaWFibGVzKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJl
Y2lzaW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2Jq
ZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1h
cC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAu
Y29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7CisgICAgY29uc3Qg
YXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFk
ZXIpLT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6R0xlbnVtPiB2ZXJ0ZXhTeW1i
b2xQcmVjaXNpb25NYXA7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdmVydGV4RW50
cnkudW5pZm9ybU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9
IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7CisgICAgICAgIHZlcnRleFN5bWJvbFByZWNp
c2lvbk1hcC5hZGQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgo
KSksIGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbik7CisgICAgfQorCisgICAgZm9yIChjb25z
dCBhdXRvJiBlbnRyeSA6IGZyYWdtZW50RW50cnkudW5pZm9ybU1hcCkgeworICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7
CisgICAgICAgIGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA9IHZlcnRleFN5bWJvbFByZWNpc2lv
bk1hcC5maW5kKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkp
KTsKKyAgICAgICAgaWYgKHZlcnRleFN5bWJvbCAhPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAu
ZW5kKCkgJiYgdmVydGV4U3ltYm9sLT52YWx1ZSAhPSBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNp
b24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVu
dW0gdGV4dHVyZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKKyAgICA6
OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAgICA6Omds
QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0p
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lN
Qk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJM
b2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWRO
YW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwg
aW5kZXgsIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZlcikKKyAg
ICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gKGNvbnRleHRBdHRy
aWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAgICBBU1NF
UlQodGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKTsKKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJl
YWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5i
b3VuZERyYXdGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZi
byk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8g
PSBmYm87CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVu
ZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOworfQorCisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1f
c3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7CisgICAgOjpnbEJpbmRU
ZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFt
cGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1
YXRpb24oR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVt
IG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRl
KG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJs
ZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0g
ZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJsZW5k
RnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwg
R0NHTHNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVzYWdlKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdl
dCwgc2l6ZSwgMCwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
dWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3Qgdm9pZD4gZGF0YSwgR0NH
TGVudW0gdXNhZ2UpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLmJ1ZlNpemUsIGRhdGEu
ZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJT
dWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0
IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRh
LmJ1ZlNpemUsIGRhdGEuZGF0YSk7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJ
T047CisKKyAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBm
IHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENsZWFy
Q29sb3IociwgZywgYiwgYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhcihtYXNrKTsKKyAgICBjaGVja0dQVVN0
YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwo
R0NHTGludCBzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVu
LCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ29sb3JNYXNrKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQo
c2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFt
ZSBoYXNoaW5nIHdvcmtzLCB3ZQorICAgIC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhl
IG1hcCBvd25lZCBieSB0aGlzIGNvbnRleHQuCisgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xF
UmVzb3VyY2VzID0gbV9jb21waWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICBTaEhhc2hGdW5jdGlv
bjY0IHByZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOwor
ICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9IG5hbWVIYXNoRm9yU2hhZGVyOworCisg
ICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCisgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hh
ZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7CisgICAgc2V0Q3VycmVudE5hbWVI
YXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7CisgICAgbV9jb21w
aWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworCisgICAgU3RyaW5nIHRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VB
TkdMRShzaGFkZXIpOworCisgICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0gcHJldmlv
dXNIYXNoRnVuY3Rpb247CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJj
ZXMpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsKKworICAg
IGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVk
U2hhZGVyU291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRy
ID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOworICAgIGludCB0cmFuc2xhdGVkU2hh
ZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcubGVuZ3RoKCk7CisKKyAgICBMT0co
V2ViR0wsICItLS0gYmVnaW4gb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5k
IG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4iLCBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gdHJhbnNsYXRlZCBzaGFk
ZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLSIs
IHRyYW5zbGF0ZWRTaGFkZXJQdHIpOworCisgICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEs
ICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7CisgICAgCisg
ICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICAKKyAgICBpbnQgY29tcGlsZVN0YXR1
czsKKyAgICAKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNv
bXBpbGVTdGF0dXMpOworCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBt
X3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgU2hhZGVyU291cmNlRW50cnkmIGVu
dHJ5ID0gcmVzdWx0LT52YWx1ZTsKKworICAgIC8vIFBvcHVsYXRlIHRoZSBzaGFkZXIgbG9nCisg
ICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZP
X0xPR19MRU5HVEgsICZsZW5ndGgpOworCisgICAgaWYgKGxlbmd0aCkgeworICAgICAgICBHTHNp
emVpIHNpemUgPSAwOworICAgICAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAg
ICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRh
KCkpOworCisgICAgICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAw
IH07CisgICAgICAgIGVudHJ5LmxvZyA9IGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwg
U3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7CisgICAgfQorCisgICAgaWYgKGNvbXBpbGVTdGF0
dXMgIT0gR0xfVFJVRSkgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7CisgICAgICAg
IExPRyhXZWJHTCwgIkVycm9yOiBzaGFkZXIgdHJhbnNsYXRvciBwcm9kdWNlZCBhIHNoYWRlciB0
aGF0IE9wZW5HTCB3b3VsZCBub3QgY29tcGlsZS4iKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBT
aGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3Vs
dC0+dmFsdWU7CisKKyAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50
cnkuc291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFk
ZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKKyAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hh
ZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsKKworICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBk
aXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNl
IC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsKKworICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVy
LCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKKworICAgIDo6Z2xD
b21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgICBpbnQgY29tcGlsZVN0YXR1czsKKworICAgIDo6
Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7CisK
KyAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7CisgICAgICAgIGVudHJ5LmlzVmFs
aWQgPSB0cnVlOworICAgICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hh
ZGVyIHN1Y2NlZWRlZC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0g
ZmFsc2U7CisgICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Yg
c2hhZGVyIGZhaWxlZC4iKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0
QXR0cmlidXRlcygpOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3Rh
dGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91
bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2Ft
cGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xp
bnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmli
dXRlcygpOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91
bmREcmF3RkJPKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJ
Zk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsK
KyAgICB9CisgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMg
JiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVs
dGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFj
ZShHQ0dMZW51bSBtb2RlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xDdWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERlcHRoRnVu
YyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdD
R0xib29sZWFuIGZsYWcpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbERlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFT
U0VSVChzaGFkZXIpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFt
KTsKKyAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xEaXNhYmxl
KGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhH
Q0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERyYXdB
cnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwg
R0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
RHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZp
bmlzaCgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpnbEZpbmlzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmbHVzaCgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50
LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
YXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUs
IEdDR0xpbnQgbGV2ZWwpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0
YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xG
cm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVy
YXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZv
KQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHTGludCBtYXhB
dHRyaWJ1dGVTaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElW
RV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOworICAgIFZlY3RvcjxH
TGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFY
X0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0
aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIDo6
Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1l
TGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBpZiAoIW5hbWVMZW5ndGgp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0g
b3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUs
IFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCkpOworICAgIAorI2lmbmRlZiBOREVCVUcK
KyAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOworICAgIExP
RyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgYXR0cmlidXRlICVkIGZyb20g
JyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCks
IG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorCisgICAgaW5mby5uYW1lID0g
b3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0NHTGludCBzeW1ib2xDb3VudDsKKyAgICBhdXRv
IHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Cisg
ICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewor
ICAgICAgICBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3ND
b250ZXh0R0w6OkFDVElWRV9BVFRSSUJVVEVTLCAmc3ltYm9sQ291bnQpOworICAgICAgICByZXN1
bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIH0K
KyAgICAKKyAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3Vs
dC0+dmFsdWU7CisgICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMu
ZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMu
ZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwW2luZGV4XSA6IC0xOworCisgICAgcmV0
dXJuIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOworfQorCiti
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQorewor
ICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdMaW50IG1heFVuaWZv
cm1TaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklG
T1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CisKKyAgICBWZWN0b3I8R0xjaGFyPiBu
YW1lKG1heFVuaWZvcm1TaXplKTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNs
dWRlcyBudWxsIHRlcm1pbmF0aW9uLgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAg
R0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVV
bmlmb3JtKHByb2dyYW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXpl
LCAmdHlwZSwgbmFtZS5kYXRhKCkpOworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJv
bE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIFN0cmluZyhuYW1lLmRh
dGEoKSwgbmFtZUxlbmd0aCkpOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgdW5p
Zm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOworICAgIExPRyhXZWJHTCwgIlByb2dy
YW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgdW5pZm9ybSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHBy
b2dyYW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRm
OCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAKKyAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7
CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlm
b3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCit7CisgICAgR0NHTGludCBzeW1ib2xDb3VudDsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
c2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICBnZXRO
b25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFD
VElWRV9VTklGT1JNUywgJnN5bWJvbENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQ
cm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0
aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOworICAg
IEdDR0x1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1
YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFs
VW5pZm9ybUluZGV4TWFwW2luZGV4XSA6IC0xOworICAgIAorICAgIHJldHVybiBnZXRBY3RpdmVV
bmlmb3JtSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVj
dCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQorCitzdGF0
aWMgU3RyaW5nIGdlbmVyYXRlSGFzaGVkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
aWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB1aW50NjRfdCBu
dW1iZXIgPSBuYW1lSGFzaEZvclNoYWRlcihuYW1lLnV0ZjgoKS5kYXRhKCksIG5hbWUubGVuZ3Ro
KCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJ3ZWJnbF8iLCBoZXgobnVtYmVyLCBMb3dlcmNh
c2UpKTsKK30KKworc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwg
QU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBp
ZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5z
eW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1hcC5m
aW5kKG5hbWUpOworICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvJiBtYXBwZWROYW1lID0gc3ltYm9s
RW50cnktPnZhbHVlLmdldCgpLm1hcHBlZE5hbWU7CisgICAgcmV0dXJuIFN0cmluZyhtYXBwZWRO
YW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpOworfQorCitTdHJpbmcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQor
eworICAgIEdDR0xzaXplaSBjb3VudCA9IDA7CisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJz
WzJdID0geyB9OworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNo
YWRlcnMpOworCisgICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Cisg
ICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNo
YWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFwcGVkTmFtZSkKKyAg
ICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgLy8gV2Ug
bWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcu
CisgICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOworICAg
IGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKKyAgICAgICAgYXV0byBs
aW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKKyAgICAgICAgYXV0byBtYXBwZWROYW1lID0g
bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9s
VHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAgICAgICAgICAgcmV0dXJu
IG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbElu
U2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsK
KyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52
YWx1ZSgpOworICAgIH0KKworICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQ
RV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMg
YXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFk
ZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVp
cmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgorICAgICAgICBpZiAoIW5hbWVI
YXNoTWFwRm9yU2hhZGVycykKKyAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1h
a2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7CisgICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1h
cEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOworCisgICAgICAgIGF1dG8g
Z2VuZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKKworICAgICAgICBzZXRD
dXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICAgICAgbV9wb3NzaWJs
eVVudXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7CisKKyAgICAgICAg
cmV0dXJuIGdlbmVyYXRlZE5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0
ZDo6b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1i
b2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJT
eW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3lt
Ym9sVHlwZSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkg
eworICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
LmNfc3RyKCkpCisgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hh
ZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgR0NH
THNpemVpIGNvdW50OworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXTsKKyAgICBnZXRB
dHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKyAgICAKKyAgICBm
b3IgKEdDR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBvcmln
aW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5
bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAgICAgICAgICAg
cmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IGhh
dmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgorICAgIGF1
dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVz
dWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgpKSB7CisgICAgICAgIGF1dG8gbGlua2VkU2hh
ZGVycyA9IHJlc3VsdC0+dmFsdWU7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2lu
YWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBl
LCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBv
cmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICAgICAgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1i
b2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFt
ZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCisgICAgICAgICAgICByZXR1cm4gb3JpZ2lu
YWxOYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZ
TUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQXR0
cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUg
YW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAorICAgICAgICAvLyBhbmQgYXJlbid0IGV2
ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCisKKyAgICAgICAg
Y29uc3QgYXV0byYgY2FjaGVkID0gbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5maW5kKG5h
bWUpOworICAgICAgICBpZiAoY2FjaGVkICE9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAu
ZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGVkLT52YWx1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbmFtZTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRT
eW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50LCBjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgZm9yIChzaXplX3Qgc3ltYm9sVHlwZSA9IDA7IHN5bWJv
bFR5cGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihTSEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORyk7
ICsrc3ltYm9sVHlwZSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9z
aGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ldKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFw
ID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3RhdGljX2Nhc3Q8ZW51bSBBTkdMRVNoYWRlclN5
bWJvbFR5cGU+KHN5bWJvbFR5cGUpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3lt
Ym9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBzeW1i
b2xFbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lLmNfc3RyKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzeW1ib2xFbnRyeS5rZXk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKworICAgIFN0
cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9M
X1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9j
YXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFt
ZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dy
YW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1
cm4gLTE7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
LTE7CisKKworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51
dGY4KCkuZGF0YSgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIG1vdmVkQW5FcnJvciA9IGZh
bHNlOworCisgICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9p
ZCBjcmVhdGluZyBhIGhhbmcgaWYKKyAgICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0
aGF0IGNhdXNlcyBpdCB0byBuZXZlciBjbGVhciB0aGUgZXJyb3IuCisgICAgLy8gT3RoZXJ3aXNl
LCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwgd2UgZ290IE5PX0VSUk9SLgorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGds
R2V0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7CisgICAgICAgIG1v
dmVkQW5FcnJvciA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKK30K
KworR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKK3sKKyAgICBp
ZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBOZWVkIHRvIG1v
dmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNl
CisgICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVj
dGVkIGJlaGF2aW9yIG9mIGJvdGgKKyAgICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3Ig
aXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9uY2UuCisgICAgICAgIG1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJv
cnMudGFrZUZpcnN0KCk7CisgICAgfQorCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCisgICAgcmV0dXJuIDo6Z2xH
ZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmlu
ZyhHQ0dMZW51bSBuYW1lKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsSGludCh0YXJnZXQsIG1vZGUpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFi
dWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNC
dWZmZXIoYnVmZmVyKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQo
Y2FwKTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVi
dWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVm
ZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzRnJh
bWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBp
ZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6
OmdsSXNQcm9ncmFtKHByb2dyYW0pOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7
CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwor
ICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKK30KKworR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7Cit9CisKK0dDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0
dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwor
CisgICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbExpbmVXaWR0
aCh3aWR0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisKKyAgICBHQ0dM
c2l6ZWkgY291bnQgPSAwOworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsK
KyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKwor
ICAgIGlmIChjb3VudCA9PSAyKQorICAgICAgICBtX2xpbmtlZFNoYWRlck1hcC5zZXQocHJvZ3Jh
bSwgc3RkOjptYWtlX3BhaXIoc2hhZGVyc1swXSwgc2hhZGVyc1sxXSkpOworCisgICAgOjpnbExp
bmtQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
aXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsUGl4ZWxTdG9y
ZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9s
eWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFBvbHln
b25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBBU1NFUlQo
c2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworCisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7CisKKyAgICBlbnRyeS5zb3VyY2Ug
PSBzdHJpbmc7CisKKyAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBXVEZNb3ZlKGVu
dHJ5KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdD
R0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsRnVu
YyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQg
cmVmLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMs
IHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxN
YXNrKEdDR0x1aW50IG1hc2spCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2Us
IEdDR0x1aW50IG1hc2spCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWls
LCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6
ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
T3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwg
R0NHTGVudW0genBhc3MpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWls
LCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRl
cmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHZhbHVlKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMaW50IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUs
IHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2
MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9y
bTFmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEo
YXJyYXkuYnVmU2l6ZSAlIDIpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6
ZSAvIDIsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdD
R0xmbG9hdCB2MikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5
LmJ1ZlNpemUgJSAzKSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAz
LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxv
YXQgdjIsIEdDR0xmbG9hdCB2MykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYy
LCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJh
eS5idWZTaXplIC8gNCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlm
b3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJh
eSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSwgYXJyYXkuZGF0YSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24s
IHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit7CisgICAg
QVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDIpKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgYXJy
YXkuYnVmU2l6ZSAvIDIsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2
MSwgR0NHTGludCB2MikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJh
eS5idWZTaXplICUgMykpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8g
MywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYy
LCBHQ0dMaW50IHYzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3sKKyAgICBBU1NFUlQoIShh
cnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXpl
IC8gNCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1
ZlNpemUgJSA0KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUg
LyA0LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRy
YW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3sKKyAgICBBU1NFUlQo
IShhcnJheS5idWZTaXplICUgOSkpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJh
eS5idWZTaXplIC8gOSwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit7Cisg
ICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDE2KSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9j
YXRpb24sIGFycmF5LmJ1ZlNpemUgLyAxNiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0p
Cit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1
aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0
ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMj4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJp
YjJmdihpbmRleCwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9h
dCB2MSwgR0NHTGZsb2F0IHYyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2
Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2
MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4
QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5
LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xi
b29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQor
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBz
dHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9m
ZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1BsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKK3sKKyAgICByZXR1
cm4gZ2V0RXh0ZW5zaW9ucygpLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmRlbGV0ZVZlcnRleEFycmF5T0VTKGFycmF5
KTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJy
YXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKK3sKKyAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucygp
LmlzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKK3sKKyAgICBnZXRF
eHRlbnNpb25zKCkuYmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdD
R0xib29sZWFuPiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlLmRhdGEpOwor
fQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJp
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9
IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVl
OworCisgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7
CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRGbG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bEdldEZsb2F0dihwbmFtZSwgdmFsdWUuZGF0YSk7Cit9CisKK0dDR0xpbnQ2NCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQoreworICAgIFVOVVNF
RF9QQVJBTShwbmFtZSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOworICAgIC8vIEZJWE1FIDE0MTE3
ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2lu
ZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVz
aW5nIE9wZW5HTCBFUyAzLjAuCisgICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVl
KTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0dDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0NHTGlu
dDY0IHZhbHVlID0gMDsKKyAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlz
IHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFu
ZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAg
IC8vIDo6Z2xHZXRJbnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7CisgICAgcmV0dXJu
IHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNo
bWVudCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGF0dGFj
aG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQorICAgICAgICBhdHRhY2htZW50ID0g
REVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3Mu
CisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwg
YXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAgIDo6Z2xH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3lt
Ym9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGlu
dCogdmFsdWUpCit7CisgICAgQVNTRVJUKEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1lIHx8IEFD
VElWRV9VTklGT1JNUyA9PSBwbmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmlu
ZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50
TWFwLmVuZCgpKSB7CisgICAgICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBl
KHBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2hhZGVyUHJvZ3JhbVN5
bWJvbENvdW50TWFwLnNldChwcm9ncmFtLCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMoKSk7Cisg
ICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSBtX3NoYWRlclByb2dy
YW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pLT52YWx1ZTsKKworICAgIC8vIFJldHJpZXZl
IHRoZSBhY3RpdmUgYXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEgbWFw
cGluZyBvZgorICAgIC8vIG91ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhlIHJl
YWwgdW5maWx0ZXJlZCBpbmRleGVzIGluc2lkZSBPcGVuR0wuCisgICAgR0NHTGludCBhdHRyaWJ1
dGVDb3VudCA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklC
VVRFUywgJmF0dHJpYnV0ZUNvdW50KTsKKyAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCBhdHRy
aWJ1dGVDb3VudDsgKytpKSB7CisgICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAgICAgICAgZ2V0
QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFt
ZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHN5
bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuYXBwZW5kKGkpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMuCisgICAgR0NHTGlu
dCB1bmlmb3JtQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZF
X1VOSUZPUk1TLCAmdW5pZm9ybUNvdW50KTsKKyAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCB1
bmlmb3JtQ291bnQ7ICsraSkgeworICAgICAgICBBY3RpdmVJbmZvIGluZm87CisgICAgICAgIGdl
dEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGksIGluZm8pOworICAgICAgICBpZiAoaW5mby5u
YW1lLnN0YXJ0c1dpdGgoImdsXyIpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
ICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBl
bmQoaSk7CisgICAgfQorICAgIAorICAgICp2YWx1ZSA9IHN5bWJvbENvdW50cy5jb3VudEZvclR5
cGUocG5hbWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFu
Z2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBHQ0dMc2l6ZWkgY291bnQs
IGNvbnN0IFN0cmluZyYgbG9nKQoreworICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRlcklu
Zm9Mb2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKworICAgIEpTQzo6WWFycjo6UmVndWxh
ckV4cHJlc3Npb24gcmVnRXhwKCJ3ZWJnbF9bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl0rIik7CisK
KyAgICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExvZzsKKyAgICAKKyAgICAvLyBBTkdMRSBpbnNl
cnRzIGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0aGUgc2hhZGVyIHNvdXJjZSB0aGF0CisgICAg
Ly8gY2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNvbXBpbGVycy4gVGhlcmUgaXMgbm8gcG9pbnQg
c2hvd2luZworICAgIC8vIHRoaXMgd2FybmluZyB0byB0aGUgdXNlciBzaW5jZSB0aGV5IGRpZG4n
dCB3cml0ZSB0aGUgY29kZSB0aGF0CisgICAgLy8gaXMgY2F1c2luZyBpdC4KKyAgICBzdGF0aWMg
Y29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhbmdsZVdhcm5pbmcgeyAiV0FSTklORzogMDox
OiBleHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxuIl9zIH07
CisgICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFydHNXaXRoKGFuZ2xlV2FybmluZykgPyBhbmds
ZVdhcm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOworICAgIGludCBtYXRjaGVkTGVuZ3RoID0gMDsK
KworICAgIGRvIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gcmVnRXhwLm1hdGNoKGxvZywgc3RhcnRG
cm9tLCAmbWF0Y2hlZExlbmd0aCk7CisgICAgICAgIGlmIChzdGFydCA9PSAtMSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhz
dGFydEZyb20sIHN0YXJ0IC0gc3RhcnRGcm9tKSk7CisgICAgICAgIHN0YXJ0RnJvbSA9IHN0YXJ0
ICsgbWF0Y2hlZExlbmd0aDsKKworICAgICAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWRTeW1ib2wg
PSBsb2cuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaGVkTGVuZ3RoKTsKKyAgICAgICAgY29uc3QgU3Ry
aW5nJiBtYXBwZWRTeW1ib2wgPSBtYXBwZWRTeW1ib2xOYW1lKHNoYWRlcnMsIGNvdW50LCBtYW5n
bGVkU3ltYm9sKTsKKyAgICAgICAgTE9HKFdlYkdMLCAiRGVtYW5nbGluZzogJXMgdG8gJXMiLCBt
YW5nbGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCksIG1hcHBlZFN5bWJvbC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChtYXBwZWRTeW1ib2wpOworICAgIH0gd2hpbGUg
KHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4obG9nLmxlbmd0aCgpKSk7CisKKyAgICBwcm9j
ZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBz
dGFydEZyb20pKTsKKworICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxu
JXMiLCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4g
cHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAg
IEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdl
dFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgR0xzaXplaSBzaXpl
ID0gMDsKKyAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgOjpnbEdldFByb2dy
YW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgIEdD
R0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0
QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICByZXR1
cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgp
LCBzaXplKSk7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAg
ICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhU
KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2hh
ZGVyLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBHQ0dMaW50
IHZhbHVlID0gMDsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gdmFsdWU7CisKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQoc2hhZGVyKTsKKyAgICAKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBERUxF
VEVfU1RBVFVTOgorICAgIGNhc2UgU0hBREVSX1RZUEU6CisgICAgICAgIDo6Z2xHZXRTaGFkZXJp
dihzaGFkZXIsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENPTVBJ
TEVfU1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgp
KQorICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNW
YWxpZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgorICAgICAg
ICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgdmFs
dWUgPSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6CisgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVy
U291cmNlKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7CisgICAgfQorICAgIHJldHVy
biB2YWx1ZTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJ
bmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOwor
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFk
ZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkg
PSByZXN1bHQtPnZhbHVlOworICAgIGlmICghZW50cnkuaXNWYWxpZCkKKyAgICAgICAgcmV0dXJu
IGVudHJ5LmxvZzsKKworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFNoYWRlcml2
KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAg
VmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNo
YWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOworCisgICAgUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKKyAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5m
b0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKK30KKworU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBjb25zdCBhdXRvJiBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9
PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKwor
ICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKK30KKworR0NHTGZsb2F0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUpCit7CisgICAgR0NHTGZsb2F0IHZhbHVlID0gMC5mOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICA6OmdsR2V0VGV4UGFy
YW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisK
K0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
OjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJu
IHZhbHVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dM
ZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVl
LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dM
aW50PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5k
YXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0x1
aW50PiB2YWx1ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BB
UkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworfQorCitHQ0dMaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOwor
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisg
ICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9T
WU1CT0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1M
b2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWRO
YW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK0dDR0xzaXplaXB0ciBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4
LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CisgICAgOjpnbEdldFZl
cnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50
ZXIpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2Zm
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhVVNFKE9QRU5H
TF9FUykKKyAgICBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykKKyAgICAgICAgdHlwZSA9IEdM
X0hBTEZfRkxPQVRfQVJCOworI2VuZGlmCisKKyAgICBpZiAobV91c2luZ0NvcmVQcm9maWxlKSAg
eworICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wg
dGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVk
CisgICAgICAgIC8vIHRvIGFkYXB0IHRoZW0sIGFzIHdlIGRvIGluIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTJEKCkuCisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAg
IGNhc2UgQUxQSEE6CisgICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkVEIHRvIGJhY2sg
R0xfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAgICAgICAgICAgIGZvcm1hdCA9IFJF
RDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKKyAg
ICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRyB0byBiYWNrIEdMX0xVTUlOQU5DRV9BTFBI
QSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgorICAgICAgICAgICAgZm9ybWF0ID0gUkc7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGgg
UGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRp
ZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgorICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxz
LmRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
cmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4g
ZGF0YSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmRhdGEpOworICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJl
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwg
R0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhLmRhdGEp
OworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRU
ZXh0dXJlKCkpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuQnVmZmVycygxLCAm
byk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdl
bkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGdsQ3JlYXRlUHJvZ3JhbSgpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGds
R2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0
eXBlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikg
PyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKK30KKworUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHVp
bnQgbyA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChvKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGdsRGVs
ZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlm
IChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgeworICAgICAgICAvLyBNYWtl
IHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5n
CisgICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgorICAgICAgICBi
aW5kRnJhbWVidWZmZXIoRlJBTUVCVUZGRVIsIDApOworICAgIH0KKyAgICBnbERlbGV0ZUZyYW1l
YnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRl
clByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgZ2xEZWxldGVQcm9n
cmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVS
ZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xEZWxldGVSZW5k
ZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xEZWxl
dGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5ib3VuZFRleHR1
cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgeworICAgICAgICByZXR1
cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKKyAgICB9KTsKKyAgICBnbERlbGV0
ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVt
b3ZlQWxsKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikKK3sKKyAgICAvLyBOZWVkIHRvIG1vdmUgdGhl
IGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCB0bworICAgIC8vIHBy
ZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRvIGdldEVycm9yIHdpbGwg
Z2V0CisgICAgLy8gYW55IGVycm9ycyBmcm9tIGdsRXJyb3IgYmVmb3JlIHRoZSBlcnJvciB3ZSBh
cmUgc3ludGhlc2l6aW5nLgorICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZvcmNlQ29udGV4dExvc3QoKQoreworICAgIGZvciAoYXV0byogY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0
TG9zdCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4
dCgpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkK
KyAgICAgICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4dCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKK3sKKyAg
ICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBj
bGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJl
bnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVp
IGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3
QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworICAg
IGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQoreworICAg
IGdldEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwg
dHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQg
aW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0
dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7Cit9CisKKyNpZiBIQVZFKE9QRU5HTF80
KSAmJiBFTkFCTEUoV0VCR0wyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0
aXZlUmVzdGFydEluZGV4KEdDR0x1aW50IGluZGV4KQoreworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xQcmltaXRpdmVSZXN0YXJ0SW5k
ZXgoaW5kZXgpOworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1
ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2Fn
ZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpCit7CisgICAgVU5VU0VEX1BB
UkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIFVOVVNFRF9QQVJBTSh1
c2FnZSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGxl
bmd0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNy
Y0RhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQoreworICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShkc3RCeXRlT2Zmc2V0KTsKKyAgICBV
TlVTRURfUEFSQU0oc3JjRGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY09mZnNldCk7CisgICAg
VU5VU0VEX1BBUkFNKGxlbmd0aCk7Cit9CisKKyNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9Q
RU5HTF9FU18zKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIg
cmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbENvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0
LCB3cml0ZU9mZnNldCwgc2l6ZSk7Cit9CisjZWxzZQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyLCBH
Q0dMaW50cHRyLCBHQ0dMc2l6ZWlwdHIpCit7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRw
dHIgb2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKK3sKKyNpZiBIQVZFKE9QRU5HTF80
KSB8fCBIQVZFKE9QRU5HTF9FU18zKQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBHQ0dMdm9pZCogcHRyID0gOjpnbE1hcEJ1ZmZlclJhbmdlKHRh
cmdldCwgb2Zmc2V0LCBkYXRhLmJ1ZlNpemUsIEdyYXBoaWNzQ29udGV4dEdMOjpNQVBfUkVBRF9C
SVQpOworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm47CisgICAgbWVtY3B5KGRhdGEuZGF0
YSwgcHRyLCBkYXRhLmJ1ZlNpemUpOworICAgIGlmICghOjpnbFVubWFwQnVmZmVyKHRhcmdldCkp
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09Q
RVJBVElPTik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9Q
QVJBTShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKKyAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworI2VuZGlmCit9CisK
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQg
c3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xp
bnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdD
R0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpCit7CisgICAgVU5VU0VEX1BBUkFNKHNy
Y1gwKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWTApOworICAgIFVOVVNFRF9QQVJBTShzcmNYMSk7
CisgICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WDApOworICAg
IFVOVVNFRF9QQVJBTShkc3RZMCk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFgxKTsKKyAgICBVTlVT
RURfUEFSQU0oZHN0WTEpOworICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKKyAgICBVTlVTRURfUEFS
QU0oZmlsdGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZm
ZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0
Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOwor
ICAgIFVOVVNFRF9QQVJBTSh0ZXh0dXJlKTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOworICAg
IFVOVVNFRF9QQVJBTShsYXllcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdD
R0xlbnVtPiBhdHRhY2htZW50cykKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBV
TlVTRURfUEFSQU0oYXR0YWNobWVudHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7
CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKKyAgICBVTlVTRURfUEFSQU0oeCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VE
X1BBUkFNKGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRC
dWZmZXIoR0NHTGVudW0gc3JjKQoreworICAgIFVOVVNFRF9QQVJBTShzcmMpOworfQorCisjaWYg
SEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IGRhdGEpCit7
CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVy
bmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwor
ICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZlNpemUpOworICAg
IFVOVVNFRF9QQVJBTShwYXJhbXMpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJn
ZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKK30KKyNlbHNlCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZv
cm1hdGl2KEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPEdDR0xpbnQ+KQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NH
THNpemVpKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdl
MkQoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpKQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkp
Cit7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQs
IEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQoreworICAgIFVOVVNFRF9QQVJBTSh0
YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7CisgICAgVU5VU0VEX1BBUkFNKHhvZmZz
ZXQpOworICAgIFVOVVNFRF9QQVJBTSh5b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oem9mZnNl
dCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVT
RURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworfQorCitHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShw
cm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0obmFtZSk7CisKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMdWludCB2MCkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNF
RF9QQVJBTSh2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQoreworICAgIFVO
VVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAgICBVTlVTRURf
UEFSQU0odjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odjApOwor
ICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5VU0VEX1BBUkFNKHYyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
dWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKK3sKKyAgICBV
TlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh2MCk7CisgICAgVU5VU0VE
X1BBUkFNKHYxKTsKKyAgICBVTlVTRURfUEFSQU0odjIpOworICAgIFVOVVNFRF9QQVJBTSh2Myk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9Q
QVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwor
ICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+
IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0o
ZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVO
VVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJh
bnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBV
TlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAg
IFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9z
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShs
b2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFN
KGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4
NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAg
ICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJB
TSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQorewor
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7
CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMaW50IHosIEdDR0xpbnQgdykKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAg
IFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFN
KHopOworICAgIFVOVVNFRF9QQVJBTSh3KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
TGludCwgND4gdmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VE
X1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IHgsIEdDR0x1aW50IHksIEdDR0x1
aW50IHosIEdDR0x1aW50IHcpCit7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVT
RURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh6KTsK
KyAgICBVTlVTRURfUEFSQU0odyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWlu
dCwgND4gdmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUs
IEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIFVOVVNFRF9QQVJB
TShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworICAgIFVOVVNFRF9QQVJBTSh0eXBl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RyaWRlKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NH
TGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
bW9kZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsKKyAgICBVTlVTRURfUEFSQU0oZW5kKTsK
KyAgICBVTlVTRURfUEFSQU0oY291bnQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBV
TlVTRURfUEFSQU0ob2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGJ1ZnMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1
ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5V
U0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZm
ZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykK
K3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZl
cik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKQoreworICAgIFVOVVNFRF9QQVJB
TShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBVTlVTRURfUEFS
QU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZm
ZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRo
LCBHQ0dMaW50IHN0ZW5jaWwpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisgICAgVU5V
U0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkZXB0aCk7CisgICAgVU5V
U0VEX1BBUkFNKHN0ZW5jaWwpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKK3sKKyAgICBV
TlVTRURfUEFSQU0ocXVlcnkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCBxdWVyeSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0ocXVlcnkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVy
eShHQ0dMZW51bSB0YXJnZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Cit9CisKK1Bs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKworICAgIHJldHVybiAwOworfQorCitHQ0dMdWludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aShQbGF0Zm9ybUdMT2JqZWN0
IHF1ZXJ5LCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocXVlcnkpOworICAg
IFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK1BsYXRmb3JtR0xPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQoreworICAgIHJldHVy
biAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Cit9
CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZv
cm1HTE9iamVjdCBzYW1wbGVyKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNh
bXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQoreworICAgIFVO
VVNFRF9QQVJBTSh1bml0KTsKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCit7CisgICAgVU5VU0VE
X1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BB
UkFNKHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBh
cmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZs
b2F0IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFS
QU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Cit9CisKK0dDR0xmbG9hdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7
CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMC5mOworfQorCitHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQorCit7CisgICAgVU5VU0VEX1BBUkFNKHNh
bXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK0dD
R0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0
aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbmRpdGlvbik7
CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKworICAgIHJldHVybiAwOworfQorCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN5bmMpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTeW5jKEdDR0xzeW5jIHN5bmMpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN5bmMpOworfQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dM
dWludDY0IHRpbWVvdXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9Q
QVJBTShmbGFncyk7CisgICAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOworCisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdDR0xzeW5jIHN5
bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisgICAgVU5VU0VEX1BBUkFN
KHRpbWVvdXQpOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5j
aShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3lu
Yyk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworUGxhdGZv
cm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJh
Y2soKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQoreworICAgIFVO
VVNFRF9QQVJBTShpZCk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCit7CisgICAgVU5VU0VE
X1BBUkFNKGlkKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oaWQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHByaW1pdGl2ZU1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRU
cmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh2YXJ5aW5ncyk7CisgICAg
VU5VU0VEX1BBUkFNKGJ1ZmZlck1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dy
YW0pOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQoreworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwg
R0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQoreworICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFN
KGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJS
YW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlciwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQoreworICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BB
UkFNKGJ1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFN
KHNpemUpOworfQorCitWZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiB1bmlmb3JtTmFtZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOworICAg
IFVOVVNFRF9QQVJBTSh1bmlmb3JtTmFtZXMpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworVmVj
dG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1J
bmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKK3sKKyAgICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVu
aWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVO
R0xfRVNfMykKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jt
c2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgp
LCBwbmFtZSwgcmVzdWx0LmRhdGEoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwcm9ncmFt
KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0lu
ZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tO
YW1lKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5p
Zm9ybUJsb2NrTmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShw
cm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAgIHJldHVy
biBlbXB0eVN0cmluZygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCit7CisgICAgVU5VU0VE
X1BBUkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0JpbmRpbmcpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAgICBVTlVT
RURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0o
aGVpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0odHlw
ZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1aW50IHByb2dyYW0sIEdDR0x1
aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGludD4g
cGFyYW1zKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0o
dW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VE
X1BBUkFNKHBhcmFtcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtICwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwg
R0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51
bSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51
bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NH
TFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRw
dHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0Qo
R0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJ
bWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRw
dHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJ
bWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4p
Cit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFn
ZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwg
R0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGlu
dHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJy
YXlzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xT
cGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48
Y29uc3QgR0NHTHNpemVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dM
c2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlE
cmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTHNp
emVpPiwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+LCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMc2l6ZWk+LCBHQ0dMc2l6ZWkpCit7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xpbnQgdW5wYWNrQWxpZ25tZW50KQoreworICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQg
PT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1
bnBhY2tBbGlnbm1lbnQgPT0gOCk7CisgICAgVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4gemVy
bzsKKyAgICB1bnNpZ25lZCBzaXplID0gMDsKKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+
IDApIHsKKyAgICAgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CisgICAgICAgIHBhcmFtcy5h
bGlnbm1lbnQgPSB1bnBhY2tBbGlnbm1lbnQ7CisgICAgICAgIEdDR0xlbnVtIGVycm9yID0gY29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJh
bXMsICZzaXplLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdyYXBo
aWNzQ29udGV4dEdMOjpOT19FUlJPUikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
ZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHpl
cm8gPSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4oc2l6ZSk7CisgICAgICAgIGlmICgh
emVybykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKKyAgICB9CisgICAgdGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBm
b3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bhbih6ZXJvLmdldCgpLCBzaXplKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTAzLDYgKzMxNzcsNiBAQCBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRz
Rm9yUGFpbgogICAgIHJldHVybiByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKIH0KIAotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorfQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmgKaW5kZXggNmM4MWVhN2E4ODk1NDBkNTNlMDY1ZDQ1MzRiNDY5NTZmMjBjZmExZi4uYmE5
ZDVhZjkwZDc0ODVhNzY0MzU2OTJkYjU2MGFiYmU5ZDgxNTA1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmgKQEAgLTI1LDUzICsyNSwxNyBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2lmIEVOQUJMRShXRUJHTCkKKyNpZiBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKKyNp
bmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5H
TENvbW1vbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVW5pcXVlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFp
bi5oIgotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ0EpCi0jaW5j
bHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCi0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLSNpbmNs
dWRlICJBTkdMRVV0aWxpdGllcy5oIgotI2Vsc2UKLSNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRn
ZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIgotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVz
dC5oIgotI2VuZGlmCi0KLS8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBhdm9pZCB0aGUg
bmFtZSBjb25mbGljdGlvbiBmb3IgTk9fRVJST1IuCi0jaWYgUExBVEZPUk0oV0lOKQotI3VuZGVm
IE5PX0VSUk9SCi0jZWxpZiBQTEFURk9STShHVEspCi0vLyBUaGlzIGRlZmluZSBpcyBmcm9tIHRo
ZSBYMTEgaGVhZGVycywgYnV0IGl0J3MgdXNlZCBiZWxvdywgc28gd2UgbXVzdCB1bmRlZmluZSBp
dC4KLSN1bmRlZiBWRVJTSU9OCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotT0JKQ19D
TEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXZWJHTExheWVyOwotbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOwotfQotI2VuZGlmIC8vIFBMQVRGT1JN
KENPQ09BKQotCiAjaWYgVVNFKE5JQ09TSUEpCiBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBH
Q0dMTGF5ZXI7CkBAIC04MCw5ICs0NCw3IEBAIGNsYXNzIEdDR0xMYXllcjsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgRXh0ZW5zaW9uc0dMOwotI2lmIFVTRShBTkdMRSkKLWNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFOwotI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpZiBVU0UoT1BFTkdMX0VT
KQogY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7CiAjZWxpZiBVU0UoT1BFTkdMKQogY2xhc3Mg
RXh0ZW5zaW9uc0dMT3BlbkdMOwpAQCAtOTcsMjggKzU5LDExIEBAIGNsYXNzIFRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllcjsKIAogdHlwZWRlZiBIYXNoTWFwPENTdHJpbmcsIHVpbnQ2NF90
PiBTaGFkZXJOYW1lSGFzaDsKIAorLy8gQmFzZSBjbGFzcyBmb3IgR3JhcGhpY3NDb250ZXh0R0wg
Y29udGV4dHMgdGhhdCB1c2UgT3BlbkdMIG9yIE9wZW5HTCBFUy4KIGNsYXNzIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMCiB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKTsKLSAgICBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0jaWYgVVNFKEFO
R0xFKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxh
eSgpIGNvbnN0OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgcGxhdGZvcm1D
b25maWcoKSBjb25zdDsKLSAgICBHQ0dMZW51bSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgp
OwotICAgIHN0YXRpYyBHQ0dMZW51bSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9y
RHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKLSAgICBzdGF0aWMgR0NHTGlu
dCBFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0g
ZHJhd2luZ1RhcmdldCk7Ci0gICAgZW51bSBjbGFzcyBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhh
dmlvciB7Ci0gICAgICAgIC8vIFJlbGVhc2VzIGN1cnJlbnQgY29udGV4dCBhZnRlciBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCBjYWxscyBkb25lIGluIHRoZSB0aHJlYWQuCi0gICAgICAgIFJlbGVh
c2VDdXJyZW50Q29udGV4dCwKLSAgICAgICAgLy8gUmVsZWFzZXMgYWxsIHRocmVhZCByZXNvdXJj
ZXMgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFk
LgotICAgICAgICBSZWxlYXNlVGhyZWFkUmVzb3VyY2VzLAotICAgICAgICAvLyBSZWxlYXNlcyBh
bGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcg
b2JqZWN0cyBoYXZlCi0gICAgICAgIC8vIGJlZW4gcmVsZWFzZWQuCi0gICAgICAgIFRlcm1pbmF0
ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMKLSAgICB9OwotICAgIHN0YXRpYyBib29sIHJlbGVh
c2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOwotI2VuZGlm
CiAKICAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZC
TyB0byByZWd1bGFyIEZCTy4KICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CkBAIC0xMzIsMTUg
Kzc3LDkgQEAgcHVibGljOgogICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4g
QWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCiAgICAgdm9pZCB0ZXhJbWFnZTJE
RGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKIAot
I2lmICFVU0UoQU5HTEUpCi0gICAgLy8gSGVscGVyIHRvIHRleEltYWdlMkQgd2l0aCBwaXhlbD09
MCBjYXNlOiBwaXhlbHMgYXJlIGluaXRpYWxpemVkIHRvIDAuCi0gICAgLy8gUmV0dXJuIHRydWUg
aWYgbm8gR0wgZXJyb3IgaXMgc3ludGhlc2l6ZWQuCi0gICAgLy8gQnkgZGVmYXVsdCwgYWxpZ25t
ZW50IGlzIDQsIHRoZSBPcGVuR0wgZGVmYXVsdCBzZXR0aW5nLgogICAgIGJvb2wgdGV4SW1hZ2Uy
RFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQg
Ym9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgYWxpZ25tZW50
ID0gNCk7Ci0jZW5kaWYKIAogICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0IGZpbmFs
OwotCiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4K
ICAgICAvLwpAQCAtMjA2LDkgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBHQ0dMaW50NjQgZ2V0SW50
ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKICAgICBHQ0dMaW50NjQgZ2V0SW50ZWdlcjY0
aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpIGZpbmFsOwogICAgIEdDR0xpbnQgZ2V0
UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7
Ci0jaWYgIVVTRShBTkdMRSkKICAgICB2b2lkIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3Vu
dChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1
ZSk7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKICAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2co
UGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CiAgICAgU3RyaW5nIGdldFVubWFuZ2xlZEluZm9Mb2co
UGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25zdCBTdHJpbmcmKTsKICAgICBHQ0dM
aW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSkgZmluYWw7CkBAIC0yODYsMTAgKzIyMyw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXNl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKICAgICB2b2lkIHZhbGlkYXRlUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKLSNpZiAhVVNFKEFOR0xFKQogICAgIGJvb2wgY2hl
Y2tWYXJ5aW5nc1BhY2tpbmcoUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3Jt
R0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0OwogICAgIGJvb2wgcHJlY2lzaW9uc01hdGNo
KFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50
U2hhZGVyKSBjb25zdDsKLSNlbmRpZgogCiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWlu
dCBpbmRleCwgR0NHTGZsb2F0IHgpIGZpbmFsOwogICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdD
R0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IHZhbHVlcykgZmluYWw7
CkBAIC0zMTcsMTAgKzI1Miw4IEBAIHB1YmxpYzoKIAogICAgIC8vID09PT09PT09PT0gV2ViR0wy
IGVudHJ5IHBvaW50cy4KIAotI2lmICFVU0UoQU5HTEUpCiAgICAgdm9pZCBidWZmZXJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50
IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKTsKICAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPZmZzZXQsIGNvbnN0IHZvaWQqIHNyY0Rh
dGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKTsKLSNlbmRpZgogICAgIHZv
aWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVU
YXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NH
THNpemVpcHRyIHNpemUpIGZpbmFsOwogCiAgICAgdm9pZCBnZXRCdWZmZXJTdWJEYXRhKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKSBm
aW5hbDsKQEAgLTQ0NSw5ICszNzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsK
ICAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZp
bmFsOwotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBw
YWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBsZSgpIGZpbmFsOwotI2VuZGlmCiAKICAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50
aW5nKCk7CiAgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZENvbXBvc2l0ZWRSZXN1
bHRzRm9yUGFpbnRpbmcoKTsKQEAgLTQ1Niw5ICszODYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
cmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSNlbmRpZgogCiAgICAg
dm9pZCBzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKSBmaW5hbDsKIApAQCAtNDg0LDEyICs0MTEs
OCBAQCBwdWJsaWM6CiAgICAgLy8gYWxsIG1ldGhvZHMgaXQgY29udGFpbnMgbWF5IG5lY2Vzc2Fy
aWx5IGJlIHN1cHBvcnRlZCBvbiB0aGUKICAgICAvLyBjdXJyZW50IGhhcmR3YXJlLiBNdXN0IGNh
bGwgRXh0ZW5zaW9uc0dMOjpzdXBwb3J0cygpIHRvCiAgICAgLy8gZGV0ZXJtaW5lIHRoaXMuCi0j
aWYgIVVTRShBTkdMRSkKICAgICAvLyBVc2UgY292YXJpYW50IHJldHVybiB0eXBlIGZvciBPUEVO
R0wvT1BFTkdMX0VTCiAgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBnZXRFeHRlbnNpb25z
KCkgZmluYWw7Ci0jZWxzZQotICAgIEV4dGVuc2lvbnNHTCYgZ2V0RXh0ZW5zaW9ucygpIGZpbmFs
OwotI2VuZGlmCiAKICAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2
ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CiAKQEAgLTQ5NywzMSArNDIwLDExIEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKSBvdmVycmlkZTsKIAotI2lmIEVOQUJMRShW
SURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLSAgICBHcmFwaGljc0NvbnRleHRHTENWKiBhc0NW
KCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHBhaW50VG9DYW52YXMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiwgUGl4ZWxCdWZmZXImJiwgY29uc3QgSW50U2l6
ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0Jik7Ci0KLSNpZiBVU0UoQU5HTEUpCi0gICAg
Y29uc3RleHByIHN0YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkZWZhdWx0RGlzcGxheSA9IEVH
TF9ERUZBVUxUX0RJU1BMQVk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgY29uc3RleHByIHN0
YXRpYyBFR0xOYXRpdmVEaXNwbGF5VHlwZSBsb3dQb3dlckRpc3BsYXkgPSBFR0xfQ0FTVChFR0xO
YXRpdmVEaXNwbGF5VHlwZSwgLTEpOwotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlz
cGxheVR5cGUgaGlnaFBlcmZvcm1hbmNlRGlzcGxheSA9IEVHTF9DQVNUKEVHTE5hdGl2ZURpc3Bs
YXlUeXBlLCAtMik7Ci0jZW5kaWYKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKLSNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbiBtX3N3YXBD
aGFpbjsKLSAgICBFR0xEaXNwbGF5IG1fZGlzcGxheU9iaiB7IG51bGxwdHIgfTsKLSAgICBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dE9iaiB7IG51bGxwdHIgfTsKLSAgICBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnT2JqIHsgbnVsbHB0ciB9OwotI2Vu
ZGlmCisKICAgICBHQ0dMdWludCBtX3RleHR1cmUgeyAwIH07CiAKLXByaXZhdGU6CiAgICAgLy8g
Q2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxs
eSBjYWxsIE9wZW5HTC4KICAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRy
eSBwb2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KICAg
ICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKQEAgLTU0Nywy
NCArNDUwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNl
c3NhcnkoY29uc3QgSW50UmVjdCYgPSBJbnRSZWN0KCkpOwogICAgIHZvaWQgYXR0YWNoRGVwdGhB
bmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0NHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKLSNpZiBVU0UoQU5HTEUpCi0gICAgYm9vbCBy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIGJvb2wgYWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKLSAgICBi
b29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBi
YWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKLSAgICBzdGF0aWMgYm9vbCBtYWtlQ3VycmVudChQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCk7
Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTsKLSNlbmRpZgotI2lm
IFVTRShBTkdMRSkKLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGNvbnRleHQgc2hvdWxkIGJlIGxv
c3QgZHVlIHRvIHRpbWVvdXQuCi0gICAgYm9vbCB3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKSBX
QVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICAvLyBQbGF0Zm9ybSBzcGVjaWZpYyBiZWhhdmlvciBm
b3IgcmVsZWFzZVJlc291cmNlcygpOwotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtUmVsZWFzZVRo
cmVhZFJlc291cmNlcygpOwotI2VuZGlmCiAKLSNpZiAhVVNFKEFOR0xFKQogICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFVuaXF1ZVJlZjxzaDo6U2hhZGVyVmFyaWFibGU+PiBTaGFkZXJTeW1i
b2xNYXA7CiAKICAgICBzdHJ1Y3QgU2hhZGVyU291cmNlRW50cnkgewpAQCAtNjMxLDEyICs1MTcs
OCBAQCBwcml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBvcmlnaW5hbFN5bWJvbElu
U2hhZGVyU291cmNlTWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJv
bFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZGVy
TmFtZUhhc2g+IG5hbWVIYXNoTWFwRm9yU2hhZGVyczsKLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQog
Ci0jaWYgVVNFKEFOR0xFKQotICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zR0xBTkdMRTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+IG1fZXh0ZW5zaW9uczsKLSNlbGlm
IFVTRShPUEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKICAgICBmcmllbmQgY2xhc3MgRXh0
ZW5zaW9uc0dMT3BlbkdMRVM7CiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTENv
bW1vbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+IG1fZXh0ZW5z
aW9uczsKQEAgLTY0OCw5ICs1MzAsNyBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFZlY3Rvcjxm
bG9hdD4+IG1fdmVydGV4QXJyYXk7CiAKLSNpZiAhVVNFKEFOR0xFKQogICAgIEFOR0xFV2ViS2l0
QnJpZGdlIG1fY29tcGlsZXI7Ci0jZW5kaWYKIAogICAgIEdDR0x1aW50IG1fZmJvIHsgMCB9Owog
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKQEAgLTY1OCw1NCArNTM4LDE0IEBAIHByaXZh
dGU6CiAgICAgR0NHTHVpbnQgbV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsgMCB9OwogI2VuZGlmCiAK
LSNpZiAhVVNFKEFOR0xFKSAmJiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVOR0xfRVMpCiAg
ICAgR0NHTHVpbnQgbV9kZXB0aEJ1ZmZlciB7IDAgfTsKICAgICBHQ0dMdWludCBtX3N0ZW5jaWxC
dWZmZXIgeyAwIH07CiAjZW5kaWYKICAgICBHQ0dMdWludCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciB7
IDAgfTsKIAogICAgIEdDR0x1aW50IG1faW50ZXJuYWxDb2xvckZvcm1hdCB7IDAgfTsKLSNpZiBV
U0UoQU5HTEUpCi0gICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCB7IDAg
fTsKLSNlbmRpZgotICAgIHN0cnVjdCBHcmFwaGljc0NvbnRleHRHTFN0YXRlIHsKLSAgICAgICAg
R0NHTHVpbnQgYm91bmRSZWFkRkJPIHsgMCB9OwotICAgICAgICBHQ0dMdWludCBib3VuZERyYXdG
Qk8geyAwIH07Ci0gICAgICAgIEdDR0xlbnVtIGFjdGl2ZVRleHR1cmVVbml0IHsgR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkUwIH07Ci0KLSAgICAgICAgdXNpbmcgQm91bmRUZXh0dXJlTWFwID0g
SGFzaE1hcDxHQ0dMZW51bSwKLSAgICAgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwgR0NHTGVu
dW0+LAotICAgICAgICAgICAgSW50SGFzaDxHQ0dMZW51bT4sCi0gICAgICAgICAgICBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50PiwKLSAgICAgICAgICAgIFBhaXJI
YXNoVHJhaXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KLSAgICAgICAgPjsK
LSAgICAgICAgQm91bmRUZXh0dXJlTWFwIGJvdW5kVGV4dHVyZU1hcDsKLSAgICAgICAgR0NHTHVp
bnQgY3VycmVudEJvdW5kVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3Rp
dmVUZXh0dXJlVW5pdCk7IH0KLSAgICAgICAgR0NHTHVpbnQgYm91bmRUZXh0dXJlKEdDR0xlbnVt
IHRleHR1cmVVbml0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9y
ID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOwotICAgICAgICAgICAgaWYgKGl0
ZXJhdG9yICE9IGJvdW5kVGV4dHVyZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
aXRlcmF0b3ItPnZhbHVlLmZpcnN0OwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0K
LQotICAgICAgICBHQ0dMdWludCBjdXJyZW50Qm91bmRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBi
b3VuZFRhcmdldChhY3RpdmVUZXh0dXJlVW5pdCk7IH0KLSAgICAgICAgR0NHTGVudW0gYm91bmRU
YXJnZXQoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IGF1dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0dXJlVW5pdCk7Ci0gICAg
ICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuc2Vjb25kOwotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEJvdW5kVGV4dHVyZShHQ0dMZW51bSB0
ZXh0dXJlVW5pdCwgR0NHTHVpbnQgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0KHRleHR1cmVVbml0LCBzdGQ6Om1ha2Vf
cGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVzaW5nIFRleHR1
cmVTZWVkQ291bnQgPSBIYXNoQ291bnRlZFNldDxHQ0dMdWludCwgSW50SGFzaDxHQ0dMdWludD4s
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+PjsKLSAgICAgICAg
VGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OwotICAgIH07CiAKICAgICBHcmFwaGlj
c0NvbnRleHRHTFN0YXRlIG1fc3RhdGU7CiAKQEAgLTcxNCwxNiArNTU0LDYgQEAgcHJpdmF0ZToK
ICAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9OwogICAg
IEdDR0x1aW50IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciB7IDAgfTsKIAotI2lmIFVTRShBTkdM
RSkKLSAgICAvLyBGb3IgcHJlc2VydmVEcmF3aW5nQnVmZmVyOnRydWUgd2l0aG91dCBtdWx0aXNh
bXBsaW5nLgotICAgIEdDR0x1aW50IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSB7IDAg
fTsKLSAgICAvLyBBdHRhY2hlcyBtX3RleHR1cmUgd2hlbiBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZl
clRleHR1cmUgaXMgbm9uLXplcm8uCi0gICAgR0NHTHVpbnQgbV9wcmVzZXJ2ZURyYXdpbmdCdWZm
ZXJGQk8geyAwIH07Ci0gICAgLy8gUXVlcmllZCBhdCBkaXNwbGF5IHN0YXJ0dXAuCi0gICAgRUdM
aW50IG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgeyAtMSB9OwotCi0jZW5kaWYKLQogICAg
IC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4KICAgICBMaXN0SGFzaFNl
dDxHQ0dMZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7CiAKQEAgLTc0NCwyOSArNTc0LDggQEAgcHJp
dmF0ZToKICNpZiBVU0UoQ0FJUk8pCiAgICAgUGxhdGZvcm1HTE9iamVjdCBtX3ZhbyB7IDAgfTsK
ICNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLy8gQmFja2luZyBzdG9yZSBmb3Ig
dGhlIHRoZSBidWZmZXIgd2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5LgotICAg
IC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3
aW5nIGJ1ZmZlciBiYWNraW5nIHN0b3JlLgotICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVm
ZmVyID09IHRydWUsIHRoaXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7Ci0g
ICAgdm9pZCogbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3Vy
YXRpb24geyBmYWxzZSB9OwotICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9o
aWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0OwotI2VuZGlmCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoQVZGT1VOREFUSU9OKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENW
QU5HTEU+IG1fY3Y7Ci0jZW5kaWYKLSNpZiBVU0UoQU5HTEUpCi0gICAgYm9vbCBtX3VzZUZlbmNl
U3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKLSAgICBzaXplX3QgbV9vbGRlc3RGcmFtZUNvbXBs
ZXRpb25GZW5jZSB7IDAgfTsKLSAgICBTY29wZWRHTEZlbmNlIG1fZnJhbWVDb21wbGV0aW9uRmVu
Y2VzW21heFBlbmRpbmdGcmFtZXNdOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSAm
JiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1v
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMGQ2ZDM2N2YxZjk1NDQ1YjBh
NzljMTc0ZGE4OGEzZWU1MWNiOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ODQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlk
b3dAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCIKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKLQot
I2lmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCIKLSNl
bHNlCi0jaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJB
TkdMRVdlYktpdEJyaWRnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkludFNp
emUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNp
bmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNz
aW9uLmg+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+Ci0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMu
aD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlICJFcG94eVNoaW1zLmgi
Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKLSNlbGlm
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgVGhyZWFkU3BlY2lmaWM8
U2hhZGVyTmFtZUhhc2gqPiYgZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkKLXsKLSAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0gICAgc3RhdGljIFRocmVhZFNwZWNp
ZmljPFNoYWRlck5hbWVIYXNoKj4qIHNoYXJlZE5hbWVIYXNoOwotICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIHNoYXJlZE5hbWVIYXNoID0gbmV3IFRocmVhZFNwZWNp
ZmljPFNoYWRlck5hbWVIYXNoKj47Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gKnNoYXJlZE5hbWVI
YXNoOwotfQotCi1zdGF0aWMgdm9pZCBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoU2hh
ZGVyTmFtZUhhc2gqIHNoYWRlck5hbWVIYXNoKQotewotICAgICpnZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIoKSA9IHNoYWRlck5hbWVIYXNoOwotfQotCi0vLyBIYXNoIGZ1bmN0aW9uIHVz
ZWQgYnkgdGhlIEFOR0xFIHRyYW5zbGF0b3IvY29tcGlsZXIgdG8gZG8KLS8vIHN5bWJvbCBuYW1l
IG1hbmdsaW5nLiBTaW5jZSB0aGlzIGlzIGEgc3RhdGljIG1ldGhvZCwgYmVmb3JlCi0vLyBjYWxs
aW5nIGNvbXBpbGVTaGFkZXIgd2Ugc2V0IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcgotLy8g
dG8gcG9pbnQgdG8gdGhlIG1hcCBrZXB0IGJ5IHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLgotCi1zdGF0aWMgdWludDY0X3QgbmFtZUhhc2hGb3JTaGFkZXIo
Y29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBpZiAoIWxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDU3RyaW5nIG5hbWVBc0NTdHJpbmcgPSBDU3RyaW5nKG5h
bWUpOwotCi0gICAgLy8gTG9vayB1cCBuYW1lIGluIG91ciBsb2NhbCBtYXAuCi0gICAgU2hhZGVy
TmFtZUhhc2gqJiBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIgPSAqZ2V0Q3VycmVudE5hbWVI
YXNoTWFwRm9yU2hhZGVyKCk7Ci0gICAgU2hhZGVyTmFtZUhhc2g6Oml0ZXJhdG9yIGZpbmRSZXN1
bHQgPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmZpbmQobmFtZUFzQ1N0cmluZyk7Ci0g
ICAgaWYgKGZpbmRSZXN1bHQgIT0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVlOwotCi0gICAgdW5zaWduZWQgaGFzaFZh
bHVlID0gbmFtZUFzQ1N0cmluZy5oYXNoKCk7Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSAzMi1iaXQg
aGFzaCBmcm9tIENTdHJpbmc6Omhhc2ggaW50byBhIDY0LWJpdCByZXN1bHQKLSAgICAvLyBieSBz
aGlmdGluZyB0aGVuIGFkZGluZyB0aGUgc2l6ZSBvZiBvdXIgdGFibGUuIE92ZXJmbG93IHdvdWxk
Ci0gICAgLy8gb25seSBiZSBhIHByb2JsZW0gaWYgd2UncmUgYWxyZWFkeSBoYXNoaW5nIHRvIHRo
ZSBzYW1lIHZhbHVlIChhbmQKLSAgICAvLyB3ZSdyZSBob3BpbmcgdGhhdCBvdmVyIHRoZSBsaWZl
dGltZSBvZiB0aGUgY29udGV4dCB3ZQotICAgIC8vIGRvbid0IGhhdmUgdGhhdCBtYW55IHN5bWJv
bHMpLgotCi0gICAgdWludDY0X3QgcmVzdWx0ID0gaGFzaFZhbHVlOwotICAgIHJlc3VsdCA9IChy
ZXN1bHQgPDwgMzIpICsgKGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2l6ZSgpICsgMSk7
Ci0KLSAgICBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNldChuYW1lQXNDU3RyaW5nLCBy
ZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNp
bEV4dGVuc2lvbikKLXsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQot
ICAgIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbiYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMo
KTsKLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdXBw
b3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7Ci0gICAgICAgICAgICBleHRlbnNp
b25zLmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKLSAgICAgICAg
ICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KLSAgICAgICAgICAgIGF0dHJz
LmRlcHRoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhdHRycy5zdGVuY2ls
ID0gZmFsc2U7Ci0gICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICB9Ci0g
ICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiAhbV9pc0ZvcldlYkdMMikgewotICAgICAgICBpZiAo
IWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikp
IHsKLSAgICAgICAgICAgIGF0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICAgICAgc2V0
Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGV4
dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUi
KTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0
dXJlKCkKLXsKLSAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotCi0jaWYg
IVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNj
b3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5T3Bl
bkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Ci0jZW5kaWYKLQot
ICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykKLSAgICAgICAgcmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIHN0
ZDo6c3dhcChtX3RleHR1cmUsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRl
eHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwg
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKLSAgICBnbEZsdXNoKCk7Ci0KLSAgICBBU1NF
UlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlm
IChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmREcmF3
RkJPKTsKLSAgICBlbHNlCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSAg
ICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fc3RhdGUuYm91bmRUYXJnZXQoR0xfVEVYVFVSRTApID09IEdMX1RFWFRV
UkVfMkQgPyBtX3N0YXRlLmJvdW5kVGV4dHVyZShHTF9URVhUVVJFMCkgOiAwKTsKLSAgICA6Omds
QWN0aXZlVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0KTsKLSAgICBBU1NFUlQobV9z
dGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChtX3N0
YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsK
LSAgICA6OmdsRmx1c2goKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKLXsKLSAgICBib29sIG11
c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFs
aWFzKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLSAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IG1fZmJvKTsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZC
Tyk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBtX2ZibykgewotICAgICAg
ICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsK
LSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaWYgKHdpZHRoID09IG1fY3VycmVu
dFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdodCA+PSAwKTsKLSAgICBpZiAod2lkdGggPCAw
IHx8IGhlaWdodCA8IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwot
Ci0gICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKLSAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWln
aHQ7Ci0KLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLQotICAgIFRlbXBvcmFyeU9wZW5HTFNl
dHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKLSAgICBUZW1w
b3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKLSAg
ICAKLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gcmVzaGFwZUZCT3MoSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KLSAgICBH
TGZsb2F0IGNsZWFyQ29sb3JbXSA9IHswLCAwLCAwLCAwfSwgY2xlYXJEZXB0aCA9IDA7Ci0gICAg
R0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKLSAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xf
VFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUU7Ci0g
ICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZiwgc3RlbmNpbE1hc2tCYWNrID0gMHhm
ZmZmZmZmZjsKLSAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7
Ci0gICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7Ci0g
ICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgOjpnbEdldEJvb2xlYW52KEdMX0NP
TE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKLSAgICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdM
X1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOwotCi0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRy
aWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgOjpnbEdldEZsb2F0
dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOwotICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsKLSAgICAgICAgOjpnbEdldEJvb2xlYW52KEdM
X0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7Ci0gICAgICAgIDo6Z2xEZXB0aE1hc2soR0xf
VFJVRSk7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwotICAgIH0K
LSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RF
TkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIDo6Z2xDbGVhclN0ZW5j
aWwoMCk7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgcmVp
bnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykpOwotICAgICAgICA6OmdsR2V0SW50
ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+
KCZzdGVuY2lsTWFza0JhY2spKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
RlJPTlQsIDB4ZmZmZmZmZmYpOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9C
QUNLLCAweGZmZmZmZmZmKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVS
X0JJVDsKLSAgICB9Ci0KLSAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKLQotICAgIDo6Z2xDbGVh
ckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFy
Q29sb3JbM10pOwotICAgIDo6Z2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0s
IGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKLSAgICBpZiAoYXR0cnMuZGVwdGgpIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7Ci0g
ICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0
ZW5jaWwpIHsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwpOwotICAgICAg
ICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgc3RlbmNpbE1hc2spOwotICAgICAg
ICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCBzdGVuY2lsTWFza0JhY2spOwotICAg
IH0KLQotICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKLQotICAgIGF1dG8gZXJyb3IgPSA6OmdsR2V0RXJyb3IoKTsKLSAgICBpZiAoZXJyb3IgIT0g
R0xfTk9fRVJST1IpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViR0wsICJGYXRhbDogT3BlbkdM
IGVycm9yIGR1cmluZyBHcmFwaGljc0NvbnRleHRHTCBidWZmZXIgaW5pdGlhbGl6YXRpb24gKCVk
KS4iLCBlcnJvcik7Ci0gICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIDo6Z2xGbHVzaCgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRl
ciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQo
bV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Ci0gICAgQVNTRVJUKG1f
c2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0gICAgY29uc3QgYXV0
byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZh
bHVlOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgc2g6OlNo
YWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdzOwotICAgIGZvciAoY29uc3QgYXV0byYgdmVy
dGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWluZ01hcCkgewotICAgICAgICBjb25zdCBTdHJp
bmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wua2V5OwotICAgICAgICAvLyBUaGUgdmFyeWlu
ZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBlYWNoIGluZGV4IG9mIGFuIGFycmF5IHZhcmlh
YmxlLgotICAgICAgICAvLyBXZSBvbmx5IHdhbnQgYSBzaW5nbGUgdmFyaWFibGUgdG8gcmVwcmVz
ZW50IHRoZSBhcnJheS4KLSAgICAgICAgaWYgKHN5bWJvbE5hbWUuZW5kc1dpdGgoIl0iKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIERvbid0IGNvdW50IGJ1aWx0IGluIHZh
cnlpbmdzLgotICAgICAgICBpZiAoc3ltYm9sTmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIiB8fCBzeW1i
b2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfUG9pbnRDb29y
ZCIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBhdXRvJiBmcmFnbWVu
dFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWluZ01hcC5maW5kKHN5bWJvbE5hbWUpOwotICAg
ICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmVuZCgp
KQotICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5ncy5hZGQoc3ltYm9sTmFtZSwgZnJhZ21lbnRT
eW1ib2wtPnZhbHVlKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbnVtVmFyeWluZ3MgPSBjb21iaW5l
ZFZhcnlpbmdzLnNpemUoKTsKLSAgICBpZiAoIW51bVZhcnlpbmdzKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJsZT4gdmFyaWFibGVzOwot
ICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBjb21iaW5lZFZhcnlpbmdzLnZhbHVlcygpKQot
ICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZhcnlpbmdTeW1ib2wpOwotCi0gICAgR0NHTGlu
dCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsR2V0
SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdWZWN0b3JzKTsKLSNlbHNl
Ci0gICAgaWYgKG1faXNGb3JXZWJHTDIpCi0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhf
VkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIGVsc2UgewotICAgICAg
ICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMgPSAwOwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYo
R0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFyeWluZ0Zsb2F0cyk7Ci0gICAgICAgIG1heFZh
cnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0cyAvIDQ7Ci0gICAgfQotI2VuZGlmCi0gICAg
cmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMobWF4VmFyeWluZ1Zl
Y3RvcnMsIHZhcmlhYmxlcyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBy
ZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9i
amVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VN
YXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFw
LmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0gICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOwotICAgIGNvbnN0
IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hh
ZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgc2g6OkdMZW51bT4gdmVydGV4U3lt
Ym9sUHJlY2lzaW9uTWFwOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IHZlcnRleEVu
dHJ5LnVuaWZvcm1NYXApIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUg
PSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOwotICAgICAgICB2ZXJ0ZXhTeW1ib2xQcmVj
aXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3Ro
KCkpLCBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNpb24pOwotICAgIH0KLQotICAgIGZvciAoY29u
c3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5LnVuaWZvcm1NYXApIHsKLSAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OwotICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNp
b25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgp
KSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wgIT0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFw
LmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUgIT0gZW50cnkudmFsdWUuZ2V0KCkucHJlY2lz
aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDR0xl
bnVtIHRleHR1cmUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmU7Ci0gICAg
OjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVy
KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAgOjpn
bEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9ncmFt
KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZ
TUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Ci0gICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmli
TG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVk
TmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICA6OmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHTHVpbnQgZmJvOwotICAgIGlmIChidWZmZXIpCi0g
ICAgICAgIGZibyA9IGJ1ZmZlcjsKLSAgICBlbHNlCi0gICAgICAgIGZibyA9IChjb250ZXh0QXR0
cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7Ci0gICAgQVNT
RVJUKHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUik7Ci0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRS
ZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAoZmJvICE9IG1fc3RhdGUu
Ym91bmREcmF3RkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBm
Ym8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJP
ID0gZmJvOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJl
bmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVy
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLX0KLQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZSht
X3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0YXJnZXQpOwotICAgIDo6Z2xCaW5k
VGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xh
bXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRXF1YXRpb24obW9kZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51
bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0
ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xC
bGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Ci19ICAgICAgIAotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVt
IGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFscGhhKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCbGVu
ZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVyRGF0YSh0YXJn
ZXQsIHNpemUsIDAsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IHZvaWQ+IGRhdGEsIEdD
R0xlbnVtIHVzYWdlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgZGF0YS5idWZTaXplLCBkYXRh
LmRhdGEsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVy
U3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0
YS5idWZTaXplLCBkYXRhLmRhdGEpOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwotCi0gICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1w
ZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDbGVh
ckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhcihHQ0dMYml0ZmllbGQgbWFzaykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXIobWFzayk7Ci0gICAgY2hlY2tHUFVT
dGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KEdDR0xpbnQgcykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVl
biwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENvbG9yTWFzayhy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJU
KHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1ZSB0byB0aGUgd2F5IEFOR0xFIG5h
bWUgaGFzaGluZyB3b3Jrcywgd2UKLSAgICAvLyBwb2ludCBhIGdsb2JhbCBoYXNobWFwIHRvIHRo
ZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdM
RVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgU2hIYXNoRnVuY3Rp
b242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsK
LSAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24gPSBuYW1lSGFzaEZvclNoYWRlcjsKLQot
ICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICBuYW1lSGFzaE1hcEZvclNo
YWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwotICAgIHNldEN1cnJlbnROYW1l
SGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOwotICAgIG1fY29t
cGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLQotICAgIFN0cmluZyB0cmFuc2xh
dGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUoc2hhZGVyKTsKLQotICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9IHByZXZp
b3VzSGFzaEZ1bmN0aW9uOwotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7Ci0KLSAg
ICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRl
ZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0
ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICBpbnQgdHJhbnNsYXRlZFNo
YWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmxlbmd0aCgpOwotCi0gICAgTE9H
KFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVu
ZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuIiwgZ2V0U2hhZGVyU291cmNlKHNoYWRlciku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIHRyYW5zbGF0ZWQgc2hh
ZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS0i
LCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKLQotICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAx
LCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFkZXJMZW5ndGgpOwotICAgIAot
ICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgCi0gICAgaW50IGNvbXBpbGVTdGF0
dXM7Ci0gICAgCi0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZj
b21waWxlU3RhdHVzKTsKLQotICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
bV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBl
bnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0KLSAgICAvLyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZwot
ICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5G
T19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAgIGlmIChsZW5ndGgpIHsKLSAgICAgICAgR0xz
aXplaSBzaXplID0gMDsKLSAgICAgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAg
ICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0
YSgpKTsKLQotICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwg
MCB9OwotICAgICAgICBlbnRyeS5sb2cgPSBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEs
IFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwotICAgIH0KLQotICAgIGlmIChjb21waWxlU3Rh
dHVzICE9IEdMX1RSVUUpIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOwotICAgICAg
ICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRyYW5zbGF0b3IgcHJvZHVjZWQgYSBzaGFkZXIg
dGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUuIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hNYXA8UGxhdGZvcm1HTE9iamVjdCwg
U2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1
bHQtPnZhbHVlOwotCi0gICAgY29uc3QgQ1N0cmluZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IGVu
dHJ5LnNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogc2hhZGVyU291cmNlUHRyID0gc2hh
ZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7Ci0gICAgaW50IHNoYWRlclNvdXJjZUxlbmd0aCA9IHNo
YWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4g
ZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBkaXJlY3Qgc2hhZGVyIHNvdXJj
ZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7Ci0KLSAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRl
ciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRlclNvdXJjZUxlbmd0aCk7Ci0KLSAgICA6Omds
Q29tcGlsZVNoYWRlcihzaGFkZXIpOwotCi0gICAgaW50IGNvbXBpbGVTdGF0dXM7Ci0KLSAgICA6
OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOwot
Ci0gICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xfVFJVRSkgewotICAgICAgICBlbnRyeS5pc1Zh
bGlkID0gdHJ1ZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNo
YWRlciBzdWNjZWVkZWQuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9
IGZhbHNlOwotICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogZGlyZWN0IGNvbXBpbGF0aW9uIG9m
IHNoYWRlciBmYWlsZWQuIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGF0dHJzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJv
dW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNh
bXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBpZiAoYXR0cnMu
YW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJv
dW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFz
ICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211
bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZh
Y2UoR0NHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBmdW5jKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEZXB0aEZ1
bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhH
Q0dMYm9vbGVhbiBmbGFnKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBB
U1NFUlQoc2hhZGVyKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3Jh
bSk7Ci0gICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRGlzYWJs
ZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMo
R0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50KQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUs
IEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQq
PihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXAp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRW5hYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
aW5pc2goKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xGaW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2goKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0
dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVu
dCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
LCBHQ0dMaW50IGxldmVsKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0
dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6Omds
RnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5l
cmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5m
bykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR0xpbnQgbWF4
QXR0cmlidXRlU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJ
VkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXplKTsKLSAgICBWZWN0b3I8
R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01B
WF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNpemVpIG5hbWVMZW5n
dGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICA6
OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFt
ZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAgaWYgKCFuYW1lTGVuZ3Ro
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9
IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRF
LCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBM
T0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIGF0dHJpYnV0ZSAlZCBmcm9t
ICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgp
LCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgIGluZm8ubmFtZSA9
IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNp
emU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4
LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIEdDR0xpbnQgc3ltYm9sQ291bnQ7Ci0gICAgYXV0
byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwot
ICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsK
LSAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNz
Q29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywgJnN5bWJvbENvdW50KTsKLSAgICAgICAgcmVz
dWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICB9
Ci0gICAgCi0gICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1
bHQtPnZhbHVlOwotICAgIEdDR0x1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRz
LmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRz
LmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcFtpbmRleF0gOiAtMTsKLQotICAgIHJl
dHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIHJhd0luZGV4LCBpbmZvKTsKLX0KLQot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsK
LSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHTGludCBtYXhVbmlm
b3JtU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5J
Rk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwotCi0gICAgVmVjdG9yPEdMY2hhcj4g
bmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5j
bHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwotICAg
IEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0aXZl
VW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6
ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1i
b2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBTdHJpbmcobmFtZS5k
YXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIHVu
aWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBMT0coV2ViR0wsICJQcm9n
cmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZvcm0gJWQgZnJvbSAnJXMnIHRvICclcyciLCBw
cm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0
ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAgCi0gICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1l
OwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZv
JiBpbmZvKQotewotICAgIEdDR0xpbnQgc3ltYm9sQ291bnQ7Ci0gICAgYXV0byByZXN1bHQgPSBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgZ2V0
Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpB
Q1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7Ci0gICAgICAgIHJlc3VsdCA9IG1fc2hhZGVy
UHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgfQotICAgIAotICAgIEFj
dGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAg
ICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0
dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVh
bFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsKLSAgICAKLSAgICByZXR1cm4gZ2V0QWN0aXZl
VW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmpl
Y3QqIHNoYWRlcnMpCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRBdHRh
Y2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKLX0KLQotc3Rh
dGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgdWludDY0X3Qg
bnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFtZS51dGY4KCkuZGF0YSgpLCBuYW1lLmxlbmd0
aCgpKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygid2ViZ2xfIiwgaGV4KG51bWJlciwgTG93ZXJj
YXNlKSk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIs
IEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17
Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAg
aWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUu
c3ltYm9sTWFwKHN5bWJvbFR5cGUpOwotICAgIGF1dG8gc3ltYm9sRW50cnkgPSBzeW1ib2xNYXAu
ZmluZChuYW1lKTsKLSAgICBpZiAoc3ltYm9sRW50cnkgPT0gc3ltYm9sTWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgYXV0byYgbWFwcGVkTmFtZSA9IHN5bWJv
bEVudHJ5LT52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOwotICAgIHJldHVybiBTdHJpbmcobWFwcGVk
TmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkK
LXsKLSAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwotICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
c1syXSA9IHsgfTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBz
aGFkZXJzKTsKLQotICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewot
ICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChz
aGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1hcHBlZE5hbWUpCi0g
ICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFdl
IG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5n
LgotICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsKLSAg
ICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIGF1dG8g
bGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9
IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJv
bFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAgICAgICAgICAgIHJldHVy
biBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgICAgIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJ
blNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7
Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUu
dmFsdWUoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZ
UEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBBdHRyaWJ1dGVz
IGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkgYmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hh
ZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCi0gICAgICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1
aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIgcHJvZ3JhbS4KLSAgICAgICAgaWYgKCFuYW1l
SGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBt
YWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwotICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFkZXJzLmdldCgpKTsKLQotICAgICAgICBhdXRv
IGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hlZE5hbWUobmFtZSk7Ci0KLSAgICAgICAgc2V0
Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51bGxwdHIpOwotCi0gICAgICAgIG1fcG9zc2li
bHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVyYXRlZE5hbWUsIG5hbWUpOwotCi0gICAgICAg
IHJldHVybiBnZW5lcmF0ZWROYW1lOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotfQotCi1z
dGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3lt
Ym9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVy
U3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgYXV0byBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9
PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5
bWJvbFR5cGUpOwotICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXAp
IHsKLSAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZS5jX3N0cigpKQotICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNo
YWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEdD
R0xzaXplaSBjb3VudDsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07Ci0gICAgZ2V0
QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0gICAgCi0gICAg
Zm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGF1dG8gb3Jp
Z2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBz
eW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKLSAgICAgICAgICAg
IHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBtaWdodCBo
YXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KLSAgICBh
dXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJl
c3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgewotICAgICAgICBhdXRvIGxpbmtlZFNo
YWRlcnMgPSByZXN1bHQtPnZhbHVlOwotICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdp
bmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlw
ZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1cm4g
b3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgICAgIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3lt
Ym9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5h
bWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG9yaWdp
bmFsTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9T
WU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEF0
dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3Jl
IGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKLSAgICAgICAgLy8gYW5kIGFyZW4ndCBl
dmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgotCi0gICAgICAg
IGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZmluZChu
YW1lKTsKLSAgICAgICAgaWYgKGNhY2hlZCAhPSBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFw
LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC0+dmFsdWU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG5hbWU7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVk
U3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29u
c3QgU3RyaW5nJiBuYW1lKQotewotICAgIGZvciAoc2l6ZV90IHN5bWJvbFR5cGUgPSAwOyBzeW1i
b2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oU0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcp
OyArK3N5bWJvbFR5cGUpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1h
cCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0YXRpY19jYXN0PGVudW0gQU5HTEVTaGFkZXJT
eW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5
bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3lt
Ym9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBuYW1lOwotfQotCi1pbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0KLSAgICBT
dHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJP
TF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Ci0gICAgTE9HKFdlYkdMLCAiOjpnbEdldEF0dHJpYkxv
Y2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5h
bWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1pbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0
dXJuIC0xOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IC0xOwotCi0KLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUu
dXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBm
YWxzZTsKLQotICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZv
aWQgY3JlYXRpbmcgYSBoYW5nIGlmCi0gICAgLy8gYSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcg
dGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9yLgotICAgIC8vIE90aGVyd2lz
ZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19FUlJPUi4KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKLSAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBn
bEdldEVycm9yKCk7Ci0gICAgICAgIGlmIChlcnJvciA9PSBOT19FUlJPUikKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwotICAgICAgICBt
b3ZlZEFuRXJyb3IgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBtb3ZlZEFuRXJyb3I7Ci19
Ci0KLUdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigpCi17Ci0gICAg
aWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gTmVlZCB0byBt
b3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxpc3QgaW4gY2Fz
ZQotICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFscmVhZHkgdGhlcmUsIHNpbmNlIHRoZSBleHBl
Y3RlZCBiZWhhdmlvciBvZiBib3RoCi0gICAgICAgIC8vIGdsR2V0RXJyb3IgYW5kIGdldEVycm9y
IGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3IgY29kZSBvbmNlLgotICAgICAgICBtb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJy
b3JzLnRha2VGaXJzdCgpOwotICAgIH0KLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLQotICAgIHJldHVybiA6Omds
R2V0RXJyb3IoKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJp
bmcoR0NHTGVudW0gbmFtZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICgh
YnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElz
QnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNFbmFibGVk
KGNhcCk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1l
YnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFmcmFtZWJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc0Zy
YW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAg
aWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4g
OjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQot
ewotICAgIGlmICghcmVuZGVyYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0K
LSAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLUdD
R0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOwotfQotCi1HQ0dMYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4
dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsK
LQotICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0IHdpZHRoKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xMaW5lV2lk
dGgod2lkdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotCi0gICAgR0NH
THNpemVpIGNvdW50ID0gMDsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07
Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0K
LSAgICBpZiAoY291bnQgPT0gMikKLSAgICAgICAgbV9saW5rZWRTaGFkZXJNYXAuc2V0KHByb2dy
YW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0sIHNoYWRlcnNbMV0pKTsKLQotICAgIDo6Z2xM
aW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFBpeGVsU3Rv
cmVpKHBuYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBv
bHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NHTGZsb2F0IHVuaXRzKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xQb2x5
Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgQVNTRVJU
KHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLQotICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5OwotCi0gICAgZW50cnkuc291cmNl
ID0gc3RyaW5nOwotCi0gICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgV1RGTW92ZShl
bnRyeSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhH
Q0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNpbEZ1
bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50
IHJlZiwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5j
LCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
TWFzayhHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMdWludCBtYXNrKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFp
bCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwg
emZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWws
IEdDR0xlbnVtIHpwYXNzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFp
bCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0
ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwg
djApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZv
cm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZs
b2F0IHYwLCBHQ0dMZmxvYXQgdjEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCgh
KGFycmF5LmJ1ZlNpemUgJSAyKSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0yZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNp
emUgLyAyLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBH
Q0dMZmxvYXQgdjIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJh
eS5idWZTaXplICUgMykpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8g
MywgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZs
b2F0IHYyLCBHQ0dMZmxvYXQgdjMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2
MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAg
QVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgYXJy
YXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5p
Zm9ybTFpKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJy
YXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUsIGFycmF5LmRhdGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9u
LCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQotewotICAg
IEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIGFy
cmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQg
djEsIEdDR0xpbnQgdjIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJy
YXkuYnVmU2l6ZSAlIDMpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAv
IDMsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2
MiwgR0NHTGludCB2MykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCi17Ci0gICAgQVNTRVJUKCEo
YXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6
ZSAvIDQsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5i
dWZTaXplICUgNCkpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXpl
IC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCi17Ci0gICAgQVNTRVJU
KCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJy
YXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGFycmF5KQotewot
ICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAxNikpOwotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
KQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQ0dM
dWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAxPiBhcnJheSkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVy
dGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwg
R0NHTGZsb2F0IHYxKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGlu
ZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IGFycmF5KQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRy
aWIyZnYoaW5kZXgsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxv
YXQgdjEsIEdDR0xmbG9hdCB2MikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwg
djIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gYXJyYXkpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQg
djAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRl
eEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJh
eS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
UG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dM
Ym9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkK
LXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwg
c3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90Pihv
ZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCi17Ci0gICAgcmV0
dXJuIGdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0
IGFycmF5KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5kZWxldGVWZXJ0ZXhBcnJheU9FUyhhcnJh
eSk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFy
cmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCi17Ci0gICAgcmV0dXJuIGdldEV4dGVuc2lvbnMo
KS5pc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCi17Ci0gICAgZ2V0
RXh0ZW5zaW9ucygpLmJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxH
Q0dMYm9vbGVhbj4gdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZS5kYXRhKTsK
LX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVy
aShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xpbnQgdmFsdWUg
PSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1
ZTsKLQotICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUp
OwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmRhdGEpOwotfQotCi1HQ0dMaW50NjQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBVTlVT
RURfUEFSQU0ocG5hbWUpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgR0NHTGludDY0IHZhbHVlID0gMDsKLSAgICAvLyBGSVhNRSAxNDEx
Nzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNp
bmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1
c2luZyBPcGVuR0wgRVMgMy4wLgotICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1
ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1HQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4KQotewot
ICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdDR0xp
bnQ2NCB2YWx1ZSA9IDA7Ci0gICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhp
cyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBh
bmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KLSAg
ICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1lLCBpbmRleCwgdmFsdWUpOwotICAgIHJldHVy
biB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFj
aG1lbnQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChhdHRh
Y2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKLSAgICAgICAgYXR0YWNobWVudCA9
IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtz
LgotICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQs
IGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5
bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQqIHZhbHVlKQotewotICAgIEFTU0VSVChBQ1RJVkVfQVRUUklCVVRFUyA9PSBwbmFtZSB8fCBB
Q1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZp
bmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5lbmQoKSkgewotICAgICAgICAqdmFsdWUgPSByZXN1bHQtPnZhbHVlLmNvdW50Rm9yVHlw
ZShwbmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkpOwot
ICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKS0+dmFsdWU7Ci0KLSAgICAvLyBSZXRyaWV2
ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxkIGEgZmlsdGVyZWQgY291bnQsIGFuZCBhIG1h
cHBpbmcgb2YKLSAgICAvLyBvdXIgaW50ZXJuYWwgYXR0cmlidXRlcyBpbmRleGVzIHRvIHRoZSBy
ZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUgT3BlbkdMLgotICAgIEdDR0xpbnQgYXR0cmli
dXRlQ291bnQgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX0FUVFJJ
QlVURVMsICZhdHRyaWJ1dGVDb3VudCk7Ci0gICAgZm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgYXR0
cmlidXRlQ291bnQ7ICsraSkgewotICAgICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGdl
dEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwgaW5mbyk7Ci0gICAgICAgIGlmIChpbmZvLm5h
bWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBz
eW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwLmFwcGVuZChpKTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gRG8gdGhlIHNhbWUgZm9yIHVuaWZvcm1zLgotICAgIEdDR0xp
bnQgdW5pZm9ybUNvdW50ID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElW
RV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Ci0gICAgZm9yIChHQ0dMaW50IGkgPSAwOyBpIDwg
dW5pZm9ybUNvdW50OyArK2kpIHsKLSAgICAgICAgQWN0aXZlSW5mbyBpbmZvOwotICAgICAgICBn
ZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKLSAgICAgICAgaWYgKGluZm8u
bmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
LSAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuYXBw
ZW5kKGkpOwotICAgIH0KLSAgICAKLSAgICAqdmFsdWUgPSBzeW1ib2xDb3VudHMuY291bnRGb3JU
eXBlKHBuYW1lKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKLXsKLSAgICBMT0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJ
bmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBKU0M6OllhcnI6OlJlZ3Vs
YXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAxMjM0NTY3ODlhYmNkZWZBQkNERUZdKyIpOwot
Ci0gICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRMb2c7Ci0gICAgCi0gICAgLy8gQU5HTEUgaW5z
ZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8gdGhlIHNoYWRlciBzb3VyY2UgdGhhdAotICAg
IC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBjb21waWxlcnMuIFRoZXJlIGlzIG5vIHBvaW50
IHNob3dpbmcKLSAgICAvLyB0aGlzIHdhcm5pbmcgdG8gdGhlIHVzZXIgc2luY2UgdGhleSBkaWRu
J3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAotICAgIC8vIGlzIGNhdXNpbmcgaXQuCi0gICAgc3RhdGlj
IGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYW5nbGVXYXJuaW5nIHsgIldBUk5JTkc6IDA6
MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRlcjUnIGlzIG5vdCBzdXBwb3J0ZWRcbiJfcyB9
OwotICAgIGludCBzdGFydEZyb20gPSBsb2cuc3RhcnRzV2l0aChhbmdsZVdhcm5pbmcpID8gYW5n
bGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsKLSAgICBpbnQgbWF0Y2hlZExlbmd0aCA9IDA7
Ci0KLSAgICBkbyB7Ci0gICAgICAgIGludCBzdGFydCA9IHJlZ0V4cC5tYXRjaChsb2csIHN0YXJ0
RnJvbSwgJm1hdGNoZWRMZW5ndGgpOwotICAgICAgICBpZiAoc3RhcnQgPT0gLTEpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmco
c3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkpOwotICAgICAgICBzdGFydEZyb20gPSBzdGFy
dCArIG1hdGNoZWRMZW5ndGg7Ci0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBtYW5nbGVkU3ltYm9s
ID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hlZExlbmd0aCk7Ci0gICAgICAgIGNvbnN0IFN0
cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3ltYm9sTmFtZShzaGFkZXJzLCBjb3VudCwgbWFu
Z2xlZFN5bWJvbCk7Ci0gICAgICAgIExPRyhXZWJHTCwgIkRlbWFuZ2xpbmc6ICVzIHRvICVzIiwg
bWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBtYXBwZWRTeW1ib2wudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobWFwcGVkU3ltYm9sKTsKLSAgICB9IHdoaWxl
IChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+KGxvZy5sZW5ndGgoKSkpOwotCi0gICAgcHJv
Y2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgbG9nLmxlbmd0aCgpIC0g
c3RhcnRGcm9tKSk7Ci0KLSAgICBMT0coV2ViR0wsICJVbm1hbmdsZWQgU2hhZGVySW5mb0xvZzpc
biVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJu
IHByb2Nlc3NlZExvZy50b1N0cmluZygpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAg
ICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6Z2xH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6
ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgIDo6Z2xHZXRQcm9n
cmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICBH
Q0dMc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdOwotICAgIGdl
dEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAgcmV0
dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEo
KSwgc2l6ZSkpOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0g
ICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVY
VCh0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGlu
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlciwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgR0NHTGlu
dCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIHZhbHVlOwotCi0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7Ci0gICAgCi0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgREVM
RVRFX1NUQVRVUzoKLSAgICBjYXNlIFNIQURFUl9UWVBFOgotICAgICAgICA6OmdsR2V0U2hhZGVy
aXYoc2hhZGVyLCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDT01Q
SUxFX1NUQVRVUzoKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkKLSAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnZhbHVlLmlz
VmFsaWQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoKLSAgICAg
ICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHZh
bHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgotICAgICAgICB2YWx1ZSA9IGdldFNoYWRl
clNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VOVU0pOwotICAgIH0KLSAgICByZXR1
cm4gdmFsdWU7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsK
LQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgY29uc3QgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5
ID0gcmVzdWx0LT52YWx1ZTsKLSAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCi0gICAgICAgIHJldHVy
biBlbnRyeS5sb2c7Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6Z2xHZXRTaGFkZXJp
dihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotICAg
IFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKLSAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhz
aGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgIFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07Ci0gICAgcmV0dXJuIGdldFVubWFuZ2xlZElu
Zm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci19Ci0KLVN0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgY29uc3QgYXV0byYg
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQg
PT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0K
LSAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3VyY2U7Ci19Ci0KLUdDR0xmbG9hdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuYW1lKQotewotICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgOjpnbEdldFRleFBh
cmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQot
Ci1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgR0NHTGludCB2YWx1ZSA9IDA7Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVy
biB2YWx1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
TGZsb2F0PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1
ZS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
TGludD4gdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbEdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUu
ZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dM
dWludD4gdmFsdWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9Q
QVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLX0KLQotR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsK
LQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAtMTsKLQot
ICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJf
U1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7Ci0gICAgTE9HKFdlYkdMLCAiOjpnZXRVbmlmb3Jt
TG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVk
TmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1HQ0dMc2l6ZWlwdHIgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRl
eCwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOwotICAgIDo6Z2xHZXRW
ZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2lu
dGVyKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9m
ZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVVTRShPUEVO
R0xfRVMpCi0gICAgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgIHR5cGUgPSBH
TF9IQUxGX0ZMT0FUX0FSQjsKLSNlbmRpZgotCi0gICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkg
IHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdM
IHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVl
ZAotICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBhcyB3ZSBkbyBpbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAg
ICBjYXNlIEFMUEhBOgotICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdMX1JFRCB0byBiYWNr
IEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCi0gICAgICAgICAgICBmb3JtYXQgPSBS
RUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6Ci0g
ICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkcgdG8gYmFjayBHTF9MVU1JTkFOQ0VfQUxQ
SEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAgICAgICAgICAgIGZvcm1hdCA9IFJHOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRo
IFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBk
aWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KLSAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVs
cy5kYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
aW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IGRhdGEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKLSAg
ICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVy
ZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQs
IEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lk
PiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YS5kYXRh
KTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5k
VGV4dHVyZSgpKTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkJ1ZmZlcnMoMSwg
Jm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xH
ZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBnbENyZWF0ZVByb2dyYW0oKTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBn
bEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0g
dHlwZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIp
ID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7Ci19Ci0KLVBsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x1
aW50IG8gPSAwOwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOwotICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnbERl
bGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBp
ZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pIHsKLSAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2lu
ZwotICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVsZXRlZC4KLSAgICAgICAg
YmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgZ2xEZWxldGVGcmFt
ZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFk
ZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwotICAgIGdsRGVsZXRlUHJv
Z3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdsRGVs
ZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
bGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuYm91bmRUZXh0
dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5VmFsdWUpIHsKLSAgICAgICAgcmV0
dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7Ci0gICAgfSk7Ci0gICAgZ2xEZWxl
dGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJl
bW92ZUFsbCh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3lu
dGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCi17Ci0gICAgLy8gTmVlZCB0byBtb3ZlIHRo
ZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxpc3QgdG8KLSAgICAvLyBw
cmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBzbyBhIGNhbGxlciB0byBnZXRFcnJvciB3aWxs
IGdldAotICAgIC8vIGFueSBlcnJvcnMgZnJvbSBnbEVycm9yIGJlZm9yZSB0aGUgZXJyb3Igd2Ug
YXJlIHN5bnRoZXNpemluZy4KLSAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsK
LSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4
dExvc3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRl
eHQoKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykp
Ci0gICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRleHQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCi17Ci0g
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAg
Y2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJy
ZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkuZHJh
d0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLSAg
ICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkKLXsKLSAg
ICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQs
IHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50
IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQotewotICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhB
dHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwotfQotCi0jaWYgSEFWRShPUEVOR0xf
NCkgJiYgRU5BQkxFKFdFQkdMMikKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByaW1p
dGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRleCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsUHJpbWl0aXZlUmVzdGFydElu
ZGV4KGluZGV4KTsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
dWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNh
Z2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgbGVuZ3RoKQotewotICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLSAgICBVTlVTRURfUEFSQU0o
dXNhZ2UpOwotICAgIFVOVVNFRF9QQVJBTShzcmNPZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShs
ZW5ndGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRh
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RCeXRlT2Zmc2V0LCBjb25zdCB2b2lkKiBz
cmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxlbmd0aCkKLXsKLSAgICBVTlVT
RURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZHN0Qnl0ZU9mZnNldCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHNyY0RhdGEpOwotICAgIFVOVVNFRF9QQVJBTShzcmNPZmZzZXQpOwotICAg
IFVOVVNFRF9QQVJBTShsZW5ndGgpOwotfQotCi0jaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShP
UEVOR0xfRVNfMykKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJE
YXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRy
IHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNl
dCwgd3JpdGVPZmZzZXQsIHNpemUpOwotfQotI2Vsc2UKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0ciwg
R0NHTGludHB0ciwgR0NHTHNpemVpcHRyKQotewotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpCi17Ci0jaWYgSEFWRShPUEVOR0xf
NCkgfHwgSEFWRShPUEVOR0xfRVNfMykKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgR0NHTHZvaWQqIHB0ciA9IDo6Z2xNYXBCdWZmZXJSYW5nZSh0
YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBHcmFwaGljc0NvbnRleHRHTDo6TUFQX1JFQURf
QklUKTsKLSAgICBpZiAoIXB0cikKLSAgICAgICAgcmV0dXJuOwotICAgIG1lbWNweShkYXRhLmRh
dGEsIHB0ciwgZGF0YS5idWZTaXplKTsKLSAgICBpZiAoITo6Z2xVbm1hcEJ1ZmZlcih0YXJnZXQp
KQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9P
UEVSQVRJT04pOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURf
UEFSQU0ob2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci0gICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLSNlbmRpZgotfQot
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50
IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dM
aW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBH
Q0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQotewotICAgIFVOVVNFRF9QQVJBTShz
cmNYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1kwKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWDEp
OwotICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFgwKTsKLSAg
ICBVTlVTRURfUEFSQU0oZHN0WTApOwotICAgIFVOVVNFRF9QQVJBTShkc3RYMSk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRzdFkxKTsKLSAgICBVTlVTRURfUEFSQU0obWFzayk7Ci0gICAgVU5VU0VEX1BB
UkFNKGZpbHRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVm
ZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgUGxh
dGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGxheWVyKQotewot
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50KTsK
LSAgICBVTlVTRURfUEFSQU0odGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKLSAg
ICBVTlVTRURfUEFSQU0obGF5ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZW51bT4gYXR0YWNobWVudHMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQp
OwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwot
ICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNF
RF9QQVJBTShoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFk
QnVmZmVyKEdDR0xlbnVtIHNyYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3JjKTsKLX0KLQotI2lm
IEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKQot
ewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldEludGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRl
cm5hbGZvcm1hdCwgcG5hbWUsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhKTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsK
LSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIFVOVVNFRF9QQVJBTShidWZTaXplKTsKLSAg
ICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NH
THNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xUZXhTdG9yYWdlM0QodGFy
Z2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7Ci0gICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUo
KSk7Ci19Ci0jZWxzZQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxm
b3JtYXRpdihHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMU3BhbjxHQ0dMaW50PikK
LXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdD
R0xzaXplaSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFn
ZTJEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkK
LXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVp
KQotewotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhT
dWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0
LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsKLSAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwotICAgIFVOVVNFRF9QQVJBTSh4b2Zm
c2V0KTsKLSAgICBVTlVTRURfUEFSQU0oeW9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHpvZmZz
ZXQpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLX0KLQotR0NHTGlu
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
cHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKG5hbWUpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTHVpbnQgdjApCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVT
RURfUEFSQU0odjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSkKLXsKLSAgICBV
TlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYy
KQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsK
LSAgICBVTlVTRURfUEFSQU0odjEpOwotICAgIFVOVVNFRF9QQVJBTSh2Mik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NH
THVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odjApOwotICAgIFVOVVNF
RF9QQVJBTSh2MSk7Ci0gICAgVU5VU0VEX1BBUkFNKHYyKTsKLSAgICBVTlVTRURfUEFSQU0odjMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURf
UEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNw
YW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50
PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFN
KGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBV
TlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBk
YXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRy
YW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAg
ICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
bG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJp
eDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFS
QU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsK
LSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2Up
OwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQg
eSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAg
ICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJB
TSh6KTsKLSAgICBVTlVTRURfUEFSQU0odyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQsIDQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNF
RF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dM
dWludCB6LCBHQ0dMdWludCB3KQotewotICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0oeik7
Ci0gICAgVU5VU0VEX1BBUkFNKHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQsIDQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBl
LCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBVTlVTRURfUEFS
QU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICBVTlVTRURfUEFSQU0odHlw
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0cmlkZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdD
R0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3Vu
dCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KG1vZGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGFydCk7Ci0gICAgVU5VU0VEX1BBUkFNKGVuZCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBidWZzKQotewotICAgIFVOVVNF
RF9QQVJBTShidWZzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJC
dWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29u
c3QgR0NHTGludD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwotICAgIFVO
VVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVm
ZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFNKGRyYXdidWZm
ZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVm
ZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlcykKLXsKLSAgICBVTlVTRURfUEFS
QU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAgVU5VU0VEX1BB
UkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOwotICAgIFVO
VVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZGVwdGgpOwotICAgIFVO
VVNFRF9QQVJBTShzdGVuY2lsKTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5
KQotewotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgcXVlcnkpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHF1ZXJ5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVl
cnkoR0NHTGVudW0gdGFyZ2V0KQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotfQotCi1Q
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwot
ICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotR0NHTHVpbnQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoUGxhdGZvcm1HTE9iamVj
dCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKLSAg
ICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIHJldHVybiAwOwotfQotCi1QbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKCkKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2FtcGxlcihQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOwot
fQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRm
b3JtR0xPYmplY3Qgc2FtcGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRT
YW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKLXsKLSAgICBV
TlVTRURfUEFSQU0odW5pdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2Jq
ZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQotewotICAgIFVOVVNF
RF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIFVOVVNFRF9Q
QVJBTShwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQ
YXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xm
bG9hdCBwYXJhbSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VEX1BB
UkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW0pOwotfQotCi1HQ0dMZmxvYXQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmpl
Y3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIp
OwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDAuZjsKLX0KLQotR0NHTGlu
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKLQotewotICAgIFVOVVNFRF9QQVJBTShz
YW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIHJldHVybiAwOwotfQotCi1H
Q0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRp
dGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQotewotICAgIFVOVVNFRF9QQVJBTShjb25kaXRpb24p
OwotICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyhHQ0dMc3luYyBzeW5jKQotewot
ICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyhHQ0dMc3luYyBzeW5jKQotewotICAg
IFVOVVNFRF9QQVJBTShzeW5jKTsKLX0KLQotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NH
THVpbnQ2NCB0aW1lb3V0KQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURf
UEFSQU0oZmxhZ3MpOwotICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsKLQotICAgIHJldHVybiAw
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbnQ2NCB0aW1lb3V0KQotewotICAgIFVOVVNF
RF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwotICAgIFVOVVNFRF9QQVJB
TSh0aW1lb3V0KTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3lu
Y2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN5
bmMpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRi
YWNrKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCBpZCkKLXsKLSAgICBV
TlVTRURfUEFSQU0oaWQpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNF
RF9QQVJBTShpZCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGlkKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFu
c2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQotewotICAgIFVOVVNFRF9QQVJB
TShwcmltaXRpdmVNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5k
VHJhbnNmb3JtRmVlZGJhY2soKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQotewotICAg
IFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odmFyeWluZ3MpOwotICAg
IFVOVVNFRF9QQVJBTShidWZmZXJNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9n
cmFtKTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCkKLXsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQs
IEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJB
TShidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVy
UmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKLXsKLSAgICBVTlVT
RURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9Q
QVJBTShidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJB
TShzaXplKTsKLX0KLQotVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQotewotICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKLSAg
ICBVTlVTRURfUEFSQU0odW5pZm9ybU5hbWVzKTsKLQotICAgIHJldHVybiB7IH07Ci19Ci0KLVZl
Y3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3Jt
SW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVmVjdG9yPEdDR0xpbnQ+IHJlc3VsdCh1
bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOwotI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BF
TkdMX0VTXzMpCi0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICA6OmdsR2V0QWN0aXZlVW5pZm9y
bXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEo
KSwgcG5hbWUsIHJlc3VsdC5kYXRhKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3Jh
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJ
bmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2Nr
TmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVu
aWZvcm1CbG9ja05hbWUpOwotICAgIHJldHVybiAwOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0o
cHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZv
cm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQotewotICAgIFVOVVNF
RF9QQVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOwot
ICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tCaW5kaW5nKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKLXsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGhlaWdodCk7Ci0gICAgVU5VU0VEX1BBUkFNKGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5
cGUpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dM
dWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+
IHBhcmFtcykKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIFVOVVNF
RF9QQVJBTShwYXJhbXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSAsIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQs
IEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVu
dW0sIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
bXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVp
LCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVu
dW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBH
Q0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50
cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNE
KEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0
IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Vi
SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50
cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1h
Z2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBH
Q0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0s
IEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lk
PikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xp
bnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0Fy
cmF5c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29u
c3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTFNwYW48
Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NH
THNpemVpKQotewotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3Qg
R0NHTHNpemVpPiwgR0NHTHNpemVpKQotewotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKLXsKLSAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50
ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIgfHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwg
dW5wYWNrQWxpZ25tZW50ID09IDgpOwotICAgIFVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHpl
cm87Ci0gICAgdW5zaWduZWQgc2l6ZSA9IDA7Ci0gICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQg
PiAwKSB7Ci0gICAgICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwotICAgICAgICBwYXJhbXMu
YWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50OwotICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGNv
bXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgcGFy
YW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChlcnJvciAhPSBHcmFw
aGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICB6
ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHNpemUpOwotICAgICAgICBpZiAo
IXplcm8pIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgfQotICAgIHRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4oemVyby5nZXQoKSwgc2l6ZSkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwCmluZGV4
IGU2NmUwMGFkYjI4NzVhZGY2OWExOTdmY2M2OTIzMTZkYTZmOTZlNmUuLmQyOTlhMTlmYTg2NjM5
NzU1MmRkNmRlNzg4MGNjYTQzMzgyZjI4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwCkBAIC0yOCw5ICsyOCwxMyBAQAogI2lmIEVOQUJMRShX
RUJHTCkKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIKIAotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
CisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKKyNl
bHNlCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNlbmRpZgogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXImIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpCkBAIC01Niw3ICs2MCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25maWd1
cmVkKCkKIH0KICNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6
YWRkQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0wqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIGlmICghY29udGV4
dCkKQEAgLTY2LDcgKzcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6
OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQKICAgICBtX2NvbnRl
eHRzLmFwcGVuZChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXI6OnJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6cmVtb3ZlQ29udGV4dChQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMKiBjb250ZXh0KQogewogICAgIGlmICghbV9jb250ZXh0cy5jb250
YWlucyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlci5oCmluZGV4IDBlZjg2ZGM2ZGU3ZjIxZDVlOGU5MTIwZTlhMzJi
MGE4YjFmMWY3MzEuLmQxNDgzNDEwZDAyM2Y4MzAzNmQ5Nzg1NjQzNWZhZTU1ODRiMDQ2NzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKQEAgLTM2LDE1
ICszNiwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IHVuc2lnbmVkIE1heENvbnRl
eHRzID0gMTY7CiAKKyNpZiBVU0UoQU5HTEUpCitjbGFzcyBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OworI2Vsc2UKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOworI2VuZGlmCiAKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlciB7CiAgICAgZnJpZW5kIE5ldmVyRGVzdHJv
eWVkPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcj47CiBwdWJsaWM6CisjaWYgVVNFKEFO
R0xFKQorICAgIHVzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgPSBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOworI2Vsc2UKKyAgICB1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMID0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYKKwogICAgIHN0YXRpYyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXImIHNoYXJlZE1hbmFnZXIoKTsKICAgICAKLSAgICB2b2lkIGFk
ZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRl
eHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lkIGFkZENvbnRleHQoUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTCopOworICAgIHZvaWQgcmVtb3ZlQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMKik7CiAgICAgCiAgICAgdm9pZCByZWN5Y2xlQ29udGV4dElmTmVjZXNz
YXJ5KCk7CiAgICAgYm9vbCBoYXNUb29NYW55Q29udGV4dHMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHRzLnNpemUoKSA+PSBNYXhDb250ZXh0czsgfQpAQCAtNTksNyArNjksNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcigpID0gZGVmYXVs
dDsKIAotICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTCo+IG1fY29udGV4dHM7Cisg
ICAgVmVjdG9yPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wqPiBtX2NvbnRleHRzOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAppbmRl
eCAwNTc1NDQ0OGI5MDNlMTQ5OTNlZDMxYjBjYmQ2MWU4Njk0YTllZTk5Li45NzZlM2FiZTViYjNh
YzQwYWY4ZjIwYzllZTRlZThhMjU1M2IwYTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtODcsMTIgKzg3LDEwIEBAIFJlZlB0cjxHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
cjo6Y3JlYXRlKEdyCiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6On5HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIoKSA9IGRlZmF1bHQ7CiAKIEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyQmFzZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCi0vLyBGSVhNRTogQmVsb3cgZnVu
Y3Rpb25hbGl0eSBzaG91bGQgYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgotCiBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
R0w+IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZWQgPSBmYWxzZTsKQEAgLTEyNSwzMTQgKzEyMyw3IEBAIFJlZlB0cjxHcmFwaGljc0NvbnRleHRH
TD4gY3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4
CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQot
ewotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0ZXMud2Vi
R0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7Ci0jZW5k
aWYKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBMYXllciA9
IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7Ci0jZW5k
aWYKLSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0g
ICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hh
bmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJl
bmRlciBpbnRvLgotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1l
dGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0g
ICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
Z2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOwotCi0gICAgLy8gQ3JlYXRlIGFuIEZC
Ty4KLSAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0g
ICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fY29tcG9zaXRvclRleHR1cmUpOwot
ICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKLQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0
dXJlKTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdl
dCwgMCk7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KLSAgICBB
U1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAg
IGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmREcmF3
RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICBn
bDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAg
ICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KLSAgICAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9mYm87Ci0gICAgICAg
IGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAg
IGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQot
Ci0gICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0jZWxzZQotR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcykK
LXsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTExheWVyPigqdGhpcyk7Ci0jZWxzZQotICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtl
VW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOwotI2VuZGlmCi0K
LSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAg
YXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdl
ZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVy
IGludG8uCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6
OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gRkJPLgot
ICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOwotCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUp
OwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1
cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIEFTU0VS
VChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYg
KGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8g
PSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIDo6Z2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBp
ZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICA6
OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9
IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgotICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0KLSNpZiAhVVNFKE9QRU5H
TF9FUykKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwotCi0g
ICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7Ci0gICAgICAg
IG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMu
MiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBvdXB1
dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgotICAgICAgICAvLyBPcGVuR0wgdmVyc2lvbiAzLjIg
dXNlcyBHTFNMIHZlcnNpb24gMS41MC4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0
QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKLQotICAgICAgICAvLyBGcm9tIHZlcnNp
b24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQgYSBW
QU8gZm9yIHJlbmRlcmluZy4KLSAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRlZCBhbmQg
Ym91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJlTWFwcGVy
LCBXZWJHTCwgZXRjKS4gVGhpcyBpcwotICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRpb246IHRo
ZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdp
bGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCi0gICAgICAgIEdDR0xp
bnQgY3VycmVudFZBTyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlZFUlRF
WF9BUlJBWV9CSU5ESU5HKTsKLSAgICAgICAgaWYgKCFjdXJyZW50VkFPKSB7Ci0gICAgICAgICAg
ICBtX3ZhbyA9IGNyZWF0ZVZlcnRleEFycmF5KCk7Ci0gICAgICAgICAgICBiaW5kVmVydGV4QXJy
YXkobV92YW8pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRm9yIGxvd2Vy
IHZlcnNpb25zIHJlcXVlc3QgdGhlIGNvbXBhdGliaWxpdHkgb3V0cHV0IHRvIHRoZSBzaGFkZXIg
Y29tcGlsZXIuCi0gICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNM
X0NPTVBBVElCSUxJVFlfT1VUUFVUKTsKLQotICAgICAgICAvLyBHTF9QT0lOVF9TUFJJVEUgaXMg
bmVlZGVkIGluIGxvd2VyIHZlcnNpb25zLgotICAgICAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQ
UklURSk7Ci0gICAgfQotI2Vsc2UKLSAgICAvLyBBZGp1c3QgdGhlIHNoYWRlciBzcGVjaWZpY2F0
aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIEdMRVMzIChpLmUuIFdlYkdMMiBzdXBwb3J0KSB3YXMg
cmVxdWVzdGVkLgotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9jb21waWxlciA9IEFOR0xFV2Vi
S2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCAoYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3Jh
cGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMikgPyBTSF9XRUJHTDJfU1BFQyA6IFNI
X1dFQkdMX1NQRUMpOwotI2Vsc2UKLSAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2Uo
U0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMX1NQRUMpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIC8v
IEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291
cmNlczsKLSAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLQot
ICAgIEFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX0FUVFJJQlMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1h
eFZhcnlpbmdWZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFY
X1ZBUllJTkdfVkVDVE9SUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMpOwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVu
R0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0gICAgR0NH
TGludCByYW5nZVsyXSB7IH07Ci0gICAgR0NHTGludCBwcmVjaXNpb24gPSAwOwotICAgIGdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01FTlRfU0hB
REVSLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNp
b24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVsw
XSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwotCi0gICAgbV9jb21waWxlci5zZXRSZXNvdXJj
ZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19
Ci0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0woKQotewotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKLSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmICht
X2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29t
cG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0
QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAg
IGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwot
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAg
ICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7Ci0gICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVGQk8pOwotICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpIHsKLSNpZiAhVVNFKEFOR0xFKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgICAgICBp
ZiAobV9kZXB0aEJ1ZmZlcikKLSAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
bV9kZXB0aEJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKG1fc3RlbmNpbEJ1ZmZlcikKLSAgICAgICAg
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgot
ICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbDo6RGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLSAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsK
LSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotICAgIGlmIChtX3ZhbykKLSAgICAgICAgZGVsZXRl
VmVydGV4QXJyYXkobV92YW8pOwotI2VuZGlmCi19Ci0jZWxzZQotR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAg
ICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxl
dGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxldGVUZXh0dXJl
cygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0cmlidXRl
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMp
IHsKLSAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkgewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmICht
X2RlcHRoQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoQnVmZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIDo6Z2xEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotI2Vu
ZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxldGVWZXJ0
ZXhBcnJheShtX3Zhbyk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0jaWYgVVNF
KE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3Rh
dHVzKCkKLXsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBs
aWFudCgpIGNvbnN0Ci17Ci0jaWYgVVNFKEFOR0xFKQotICAgIHJldHVybiBtX2lzRm9yV2ViR0wy
OwotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAjaWYgVVNFKE5J
Q09TSUEpCiAgICAgcmV0dXJuICZtX25pY29zaWFMYXllci0+Y29udGVudExheWVyKCk7CkBAIC00
NDEsMzggKzEzMiw4IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiAh
VVNFKEFOR0xFKQotRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpIHsKLSNpZiBV
U0UoT1BFTkdMX0VTKQotICAgICAgICAvLyBnbEdldFN0cmluZ2kgaXMgbm90IGF2YWlsYWJsZSBv
biBHTEVTMi4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xP
cGVuR0xFUz4odGhpcywgIGZhbHNlKTsKLSNlbHNlCi0gICAgICAgIC8vIEZyb20gT3BlbkdMIDMu
MiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJlIHdlIG11c3QgdXNlIGdsR2V0
U3RyaW5naS4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xP
cGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKTsKLSNl
bmRpZgotICAgIH0KLSAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKLX0KLSNlbmRpZgotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGlu
ZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50ID09IFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVyZSkKLSAgICAgICAgbV9mYWls
TmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZUZvckRpc3BsYXkoKQotewotfQotCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBs
ZSgpCiB7CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpZiAoYXV0byBwaXhlbEJ1ZmZlciA9IHJl
YWRDb21wb3NpdGVkUmVzdWx0cygpKQpAQCAtNDgyLDExICsxNDMsNiBAQCBSZWZQdHI8TWVkaWFT
YW1wbGU+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9N
ZWRpYVNhbXBsZQogfQogI2VuZGlmCiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQotewotICAgIHJldHVy
biByZWFkUmVuZGVyaW5nUmVzdWx0cygpOwotfQotCiAjaWYgRU5BQkxFKFZJREVPKQogYm9vbCBH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlh
UGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0NHTGVudW0g
b3V0cHV0VGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgK
aW5kZXggZTQ2NjJiNjgzZWE0NWI2ZjE5NjZiMzE5NzMzOTMzMDNhYWY4NjA5NS4uZDFhYzBlYjdj
MGFkYTJmZjg4ZjE3OWRiOWNkNGVjMGEwNWU3NmNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaApAQCAtMjcsMTggKzI3LDM0IEBACiAKICNpZiBFTkFC
TEUoV0VCR0wpCiAKKyNpZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5oIgorI2Vsc2UKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
IHsKKyNpZiBVU0UoQU5HTEUpCit1c2luZyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJC
YXNlID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCit1c2luZyBHcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXJCYXNlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYK
KworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDog
cHVibGljIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2UgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyPiBjcmVhdGUoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIH5HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIoKTsKIAorICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlckJhc2Ugb3ZlcnJpZGVzLgorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCBmaW5hbDsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVyZUZyb21N
ZWRpYShNZWRpYVBsYXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGZp
bmFsOwogI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFT
YW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5k
aWYKKwogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcihXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlckFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKaW5kZXggMDg1Mzlh
N2Q5Mjk4MTE0NWRjMDYwMDFiNTc0Y2E4YzlhNzFmODk1NS4uMTQ3ODdiNWI3MDhjZTc5MjU5MDNk
YTViN2JjYTM5NmY4ZjIzZTY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAKICNpbmNsdWRl
ICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgorI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyLmgiCiAKICNpZiBVU0UoTklDT1NJQSkKICNpbmNsdWRlICJOaWNvc2lhR0NHTEFOR0xF
TGF5ZXIuaCIKQEAgLTQwLDcgKzQyLDEwNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybURpc3BsYXkoKSBjb25zdAorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAg
ICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCit7CisjaWYgRU5BQkxFKFdFQkdMMikK
KyAgICBtX2lzRm9yV2ViR0wyID0gYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3JhcGhpY3ND
b250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsKKyNlbmRpZgorI2lmIFVTRShOSUNPU0lBKQor
ICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcj4o
KnRoaXMpOworI2Vsc2UKKyAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFw
cGVyR0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlzKTsKKyNlbmRpZgorICAgIGJvb2wgc3VjY2VzcyA9
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vz
cyk7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKyAgICBhdHRyaWJ1dGVzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9u
LgorCisgICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpOworICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAgZ2w6Okdl
blRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFy
Z2V0LCBtX3RleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVy
ZVRhcmdldCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgIGdsOjpHZW5GcmFtZWJ1
ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBtX2Zibyk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgZ2w6OkdlblRl
eHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4
dHVyZVRhcmdldCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYo
dGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGds
OjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVy
ZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgZ2w6
OkdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGdsOjpCaW5kVGV4
dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsK
KworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCAwKTsKKyNlbmRpZgorCisgICAg
Ly8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFs
aWFzKSB7CisgICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVu
Y2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgorICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9z
dGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyAgICBnbDo6Q2xlYXJDb2xvcigw
LCAwLCAwLCAwKTsKK30KKworR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQoreworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAg
ICBpZiAobV90ZXh0dXJlKQorICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBvc2l0b3JU
ZXh0dXJlKQorICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1
cmUpOworI2VuZGlmCisKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygp
OworCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIGdsOjpEZWxldGVS
ZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAo
YXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6
RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwor
ICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsK
KyAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgZ2w6OkRlbGV0
ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgZ2w6
OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKyAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7
CisjZW5kaWYKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJ
QSkKICAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtRGlzcGxheSgpOwpAQCAtNDks
NyArMTQ5LDcgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnMKICNlbmRpZgogfQogCi1QbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9y
bUNvbmZpZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJ
QSkKICAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtQ29uZmlnKCk7CkBAIC01OCw3
ICsxNTgsMjggQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGxhdGZvcm1Db25maWcoKSBjb25zdAogI2VuZGlmCiB9CiAKLWJvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCitib29s
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisjaWYgVVNF
KE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgp
OworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hlY2tHUFVTdGF0
dXMoKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNldENvbnRleHRWaXNp
YmlsaXR5KGJvb2wpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFy
ZUZvckRpc3BsYXkoKQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc2hh
cGVEaXNwbGF5QnVmZmVyQmFja2luZygpCiB7CiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRy
aWJ1dGVzKCk7CiAgICAgY29uc3QgYXV0byBzaXplID0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKTsKQEAgLTgyLDcgKzIwMyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291
cmNlcygpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1M
YXllci5jcHAKaW5kZXggZjQ0YzdhMDkzNGFhMGIyZTMyNGFiMzgzOGI4ODhkYmQxMDdiMGFjNy4u
MTdmMjk0NDYyYzExNzE1YzNhY2M4YmJjNmJhZmViNjg0NDc5ZjU0MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6
OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYg
Y29udGV4dCkKK1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6VGV4dHVyZU1hcHBlckdD
R0xQbGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUmIGNvbnRleHQpCiAgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKIHsKICAgICBhdXRvIHNoYXJpbmdDb250ZXh0ID0gUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCkt
PnBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZv
cm1MYXllci5oCmluZGV4IGM3NGU3NTU0MjFlMGMxNGQ2NzE3YmRmOWIwNjNhNDdkODg2NGYyY2Qu
LmUzZWVkNmJiOWUzNjY2MjY5MzczNWMyY2NkMTBjZTFiN2U2ZDZlM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmgKQEAgLTIxLDcgKzIxLDcgQEAKIAog
I2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEp
CiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKKyAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5
ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSYpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJH
Q0dMUGxhdGZvcm1MYXllcigpOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAg
LTUwLDcgKzUwLDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmIG1fY29udGV4dDsKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xFJiBt
X2NvbnRleHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gbV9nbENvbnRleHQ7
CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xE
aXJlY3QyRC5jcHAKaW5kZXggMTIxNTBiMWQ1MGU1YmM4OTM3NGVhYTgxMWUyMzJiM2NjNTBmMzE1
MS4uM2I0Yjc1ODAyN2Y2OTY0ZTAwOWViMmU1NzIwZDRhM2MxYmNjZWRiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGly
ZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRHTERpcmVjdDJELmNwcApAQCAtNDgsNyArNDgsNyBAQCBib29sIEdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wgaQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBj
b25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xHTDo6cGFpbnRUb0Nh
bnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiB7CiAgICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVNpemUuaXNFbXB0eSgpIHx8IGNh
bnZhc1NpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KaW5kZXggOTU0NGI1MWMyNzhkZjU2
OWVhNGFiMGJmZWY3ZWY3NDRhYzUyYzczNS4uNmQ3NzA3ZDQwYzMyZjI4NDI5YzNkMzI0NTE1YTVj
YzY5Nzc2MWJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9X
ZWJDb3JlVGhyZWFkLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2Vi
Q29yZVRocmVhZC5tbQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW1wb3J0ICJDb21tb25WTS5oIgog
I2ltcG9ydCAiRmxvYXRpbmdQb2ludEVudmlyb25tZW50LmgiCi0jaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgogI2lt
cG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAj
aW1wb3J0ICJUaHJlYWRHbG9iYWxEYXRhLmgiCkBAIC03NywxMyArNzcsMTMgQEAgdm9pZCBSZWxl
YXNlV2ViVGhyZWFkR2xvYmFsU3RhdGUoKQogICAgIC8vIEluIHNpbmdsZS10aHJlYWRlZCBlbnZp
cm9ubWVudHMgd2UgZG8gbm90IG5lZWQgdG8gdW5zZXQgdGhlIGNvbnRleHQsIGFzIHRoZXJlIHNo
b3VsZCBub3QgYmUgYWNjZXNzIGZyb20KICAgICAvLyBtdWx0aXBsZSB0aHJlYWRzLgogICAgIEFT
U0VSVChXZWJUaHJlYWRJc0VuYWJsZWQoKSk7Ci0gICAgdXNpbmcgUmVsZWFzZVRocmVhZFJlc291
cmNlQmVoYXZpb3IgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UmVsZWFzZVRo
cmVhZFJlc291cmNlQmVoYXZpb3I7CisgICAgdXNpbmcgUmVsZWFzZVRocmVhZFJlc291cmNlQmVo
YXZpb3IgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpSZWxlYXNlVGhyZWFkUmVz
b3VyY2VCZWhhdmlvcjsKICAgICAvLyBGb3Igd2ViIHRocmVhZCwganVzdCByZWxlYXNlIHRoZSBj
b250ZXh0IGFzIHdlIGtub3cgd2Ugd2lsbCBzZWUgY2FsbHMgdG8gaXQgYWdhaW4uCiAgICAgLy8g
Rm9yIG5vbi13ZWIgdGhyZWFkcywgZS5nLiB0aGlyZC1wYXJ0eSBjbGllbnQgdGhyZWFkcywgd2Ug
ZG9uJ3Qga25vdyBpZiB3ZSBldmVyIHNlZSBhbm90aGVyIGNhbGwgZnJvbSB0aGUKICAgICAvLyB0
aHJlYWQsIHNvIHdlIGFsc28gcmVsZWFzZSB0aGUgdGhyZWFkIHJlc291cmNlcy4KICAgICBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNlQmVoYXZpb3IgPQogICAgICAgICBXZWJU
aHJlYWRJc0N1cnJlbnQoKSA/IFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpSZWxlYXNl
Q3VycmVudENvbnRleHQgOiBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6UmVsZWFzZVRo
cmVhZFJlc291cmNlczsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhyZWxlYXNlQmVoYXZpb3IpOworICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMocmVsZWFzZUJlaGF2aW9y
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKaW5kZXggYWM5NTk1MjBhMmUzZGZh
ZDlmY2Q4MmIzOTJmMTBhOWE1YTYwNDg0MC4uODRiMmU2ODQ1ZDA3NDljZGFhMWU3OGI4NTMwZDhm
OGVhNWEwZTA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC0yMzYsNyArMjM2LDcg
QEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VC
dWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3IKICAgICAgICAgICAgIC8vIEhlcmUgd2UgZG8gbm90
IHRyeSB0byBwbGF5IGJhY2sgcGVuZGluZyBjb21tYW5kcyBmb3IgaW1hZ2VCdWZmZXIuIEN1cnJl
bnRseSB0aGlzIGNhbGwgaXMgb25seSBtYWRlIGZvciBlbXB0eQogICAgICAgICAgICAgLy8gaW1h
Z2UgYnVmZmVycyBhbmQgdGhlcmUncyBubyBnb29kIHdheSB0byBhZGQgZGlzcGxheSBsaXN0cy4K
ICAgICAgICAgICAgIGlmIChwaXhlbEJ1ZmZlcikKLSAgICAgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb250ZXh0QXR0cmlidXRlcywgV1RGTW92ZSgq
cGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50VG9DYW52
YXMoY29udGV4dEF0dHJpYnV0ZXMsIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXIt
PmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuY2xlYXJSZWN0KHsgSW50
UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkgfSk7CiAgICAgICAgICAgICAvLyBV
bmZvcnR1bmF0ZWx5ICJmbHVzaCIgaW1wbGVtZW50YXRpb24gaW4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCBvdmVybG9hZHMgb3JkZXJpbmcgYW5kIGVmZmVjdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNS
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJH
TFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCmluZGV4IDVhNmNlNjVlNzQ0N2QyNGUxZTc3
MzYwZjJkOGNmZTY0ZWE4OGIzMmEuLjBkYTdiOTVkMTRlOWFkZmNkZDM2NjkzOTkzM2Q4MDBmMDBi
ZjhmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29w
ZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Qu
Y3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRH
TC5oIgogI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYv
U2Vjb25kcy5oPgogCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgU2NvcGVkV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXMoKQogICAgIGlmIChz
X3JlcXVlc3RzKQogICAgICAgICByZXR1cm47CiAgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xT
dHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbXSB7Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6VGVybWluYXRl
QW5kUmVsZWFzZVRocmVhZFJlc291cmNlcyk7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6OlRlcm1pbmF0ZUFuZFJl
bGVhc2VUaHJlYWRSZXNvdXJjZXMpOwogICAgIH0pOwogfQogCg==
</data>
<flag name="commit-queue"
          id="470549"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445391</attachid>
            <date>2021-11-30 00:41:54 -0800</date>
            <delta_ts>2021-11-30 01:53:02 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211130104151.patch</filename>
            <type>text/plain</type>
            <size>577504</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5iZjg5NTYxODJiZmMyMjEzZTU0YmFjMzMwNDk0NWUzYjZi
MjI0ZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEzMTMsNiArMTMxMyw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMU3RhdGUu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJGYWN0b3J5LmgKQEAgLTE0MDUsNiArMTQwNiw3IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0FOR0xF
SGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGlsaXRpZXMuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4MDExODYuLjE1
ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N2
L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggN2I2ZDU2MTQ2
OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVjMmQ1MzE4YWIz
OTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEzNiw2IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNv
L0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09WVFRD
dWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5h
Z2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTkyOTQ5ODk1MjBj
MjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxp
dGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKLXBsYXRmb3Jt
L2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVyLm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGQ5
ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJlZTAyNmE2YTlk
MTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBACiAJCTdBRjlC
MjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpT
VlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJl
Z2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlEMjU0OTcyMDEw
MEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhDMUFDIC8qIEdy
YXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29j
b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAz
MzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYwOTRERDI3MEM0
NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0
aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFj
ZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNl
U3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQ
VVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1
ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIzMDA4QUMwMjMg
LyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZF
OTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVEMjc1NEZGN0Mw
MDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYwQ0UgLyogR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0NoZWNrc01hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCNjgwQjgy
NUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAyMTAwMzg2NTlF
IC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBHcmFwaGljc0Nv
bnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVG
IC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRU
UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBBMThDRkI1RjMw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8qIEdyYXBoaWNz
Q29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEwMzM5QzI1NDk3
MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFw
aGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlEMjU0OTcyMDEw
MEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNz
Q29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IxNjE5MTAyNzE5
ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4MEM3MCAvKiBH
cmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1Nyw4IEBACiAJ
CTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhDIC8qIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdC
OTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBH
cmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEltYWdl
RXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0QTQ3MjUzNzc2
QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJCTZFMjdGMjQz
MjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJCQkJNkUyN0Yy
NDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJCQkJNkUyN0Yy
NDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwICovLAorCQkJ
CTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8s
CiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0dGluZy5j
cHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0
dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8sCiAJCQkJ
N0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2
ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5
IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyog
R3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBAQAogCQkJCTdC
OEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJCTdCOEVENUVG
MjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEwMzM5RDI1NDk3
MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdCMTAzMzlBMjU0
OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICovLAotCQkJCTdC
MTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCAqLywK
KwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
LmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8qIEltYWdlUm90
YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdGRjkgLyogSW1h
Z2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQg
LyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0MjYyLDE2IEBA
CiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3JhcGhpY3NDb250
ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3MDIzQTk2OTcz
MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCOTVD
RkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIxMDAzODY1OUUg
LyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IxMDMzOUUy
NTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFkZXJzICovLAot
CQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGlj
c0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4MjUzNzc2Q0Ew
MDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8qIEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0
MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0Eu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5MTVmYTVmNzRk
YzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2MzQ1NTlmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0
cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwg
Y29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wg
ZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCBzb3VyY2VJ
bWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxp
Z25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNh
bnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGludCBtX2N1cnJl
bnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xT
dGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNiNGQ3ZTljZWUx
ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50
ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJh
aXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNzQ29udGV4dEdM
U3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBHQ0dMdWludCBi
b3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4dHVyZU1hcCA9
IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwgR0NHTGVudW0+
LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJhaXRzPFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5kVGV4dHVyZU1h
cCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0KKyAgICBHQ0dM
dWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOwor
ICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gYm91
bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91bmRUYXJnZXQo
R0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9y
ID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0
b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
LT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQgc2V0
Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0dXJlLCBHQ0dM
ZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0KHRleHR1cmVV
bml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisKKyAgICB1c2lu
ZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIEludEhhc2g8R0NH
THVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Cisg
ICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVu
c2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYwZmI1ZWUxYWMz
OTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2NDBmZDRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNp
b25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNpbmNsdWRlICJF
eHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dMQU5HTEU6OkV4
dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0KQorRXh0ZW5z
aW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIGNv
bnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKICAg
ICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5kZXggMGE2MWVm
YzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRiOWY2MTVjM2Iz
YTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0zMiwxMyArMzIs
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4dGVuc2lvbnNH
TEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRp
YXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMuCi0gICAgZXhw
bGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICAv
LyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVuc2lvbnNHTEFO
R0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRlbnNpb25zR0xB
TkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4ICs2NCw4IEBA
IHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRlbnNpb25zOwog
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAgLy8gV2VhayBw
b2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFjayB0byBHcmFw
aGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIG1fY29udGV4
dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0aW5nLXBvaW50
IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAgICBib29sIG1f
d2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0
R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBkZmEyYjdhNTA5
Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCiAK
ICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIu
aD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElP
TikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBkZWZpbml0aW9u
IHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAgLTc2LDggKzcx
LDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdDR0xlbnVtIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCitHQ0dM
ZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgp
CiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEpCiAgICAgICAg
IEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3JtQ29uZmlnKCks
IEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQorR0NHTGVudW0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZv
ckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBzd2l0Y2ggKGRy
YXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyArOTksNyBAQCBH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRGb3JEcmF3
aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChH
Q0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1RhcmdldCkgewog
ICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZvckRyYXdpbmdU
YXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHJl
bGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVsZWFzZVRocmVh
ZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNlQmVoYXZpb3Ip
CiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAgLTE2MSw3ICsx
NTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xfUmVsZWFzZVRo
cmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRz
KCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRy
eUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpAQCAtMTg3LDE0
ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBwaXhlbEJ1ZmZl
cjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1dGVz
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKIHsK
ICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygpLmFscGhhID8g
R0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwocGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgYXV0byBh
dHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53
aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11c3RSZXN0b3Jl
RkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0
ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YXR0YWNo
RGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRycyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50
ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZFNjaXNzb3Io
R0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNj
b3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAgZ2w6OlJlbmRl
cmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDR0xlbnVtIHBu
YW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBn
bDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwgbnVsbHB0ciwg
dmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0NHTGVu
dW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48R0NHTGludCwg
Mj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRl
clR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUs
IHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAgICAgICAgIGlu
dGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihnZXRFeHRlbnNp
b25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwg
Zm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
ZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3Vu
ZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFr
ZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQpLCAwKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0wK
ICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2Uy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5
b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewog
ICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBi
b3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRh
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBtYWtl
R0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xz
aXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2
b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xhbXBm
IHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRo
UmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGdsOjpEZXB0aFJh
bmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oekZhcikp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFt
cGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVwdGgoR0NHTGNs
YW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVwdGhmKHN0YXRp
Y19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lvbnMpCiAgICAg
ICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+KHRoaXMpOwog
ICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkblBpeGVs
cyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRh
KQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0YS5kYXRhLCBm
YWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxzKEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJbXBsKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBsZW5ndGgsIEdD
R0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0YSwgYm9vbCBy
ZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMsIEdDR0xzaXpl
aSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZmZXJPYmplY3Qp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxz
SW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYKIH0KIAotLy8g
VGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZvbGxvdywgcG9y
dGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0
ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCiB7
CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwogICAgIC8v
IEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZvcm1zIGFyZSBu
b3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1MTYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBj
aGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpw
cmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQogICAgICAgICBy
ZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFTU0VSVCghbV9s
YXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1zdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVSZWFkRnJhbWVi
dWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5ib3VuZFJlYWRG
Qk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpAQCAtNTg3LDcg
KzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc2hh
cGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRX
aWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1cm47CkBAIC02
NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4Miw3
ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJlKEdD
R0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRl
cik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0
YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KICAgICBnbDo6
QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGlu
ZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpi
aW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03
MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBy
ZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0CiB9CiAK
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVy
ZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGdsOjpCaW5kVGV4
dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBm
IGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1
ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NH
TGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2Rl
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51
bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2Rl
QWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5k
RXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9CiAKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdD
R0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyhH
Q0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVu
dW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBz
cmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFs
cGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dM
ZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVt
IGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQgogICAgIGds
OjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBz
aXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBH
Q0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xT
cGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJT
dWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZmZXJTdWJEYXRh
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lkPiBk
YXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51
bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0
LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwg
R0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3
cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdl
dCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3Jp
dGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGlu
dD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJuYWxmb3JtYXRp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0aXZSb2J1c3RB
TkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXplLCBudWxscHRy
LCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxl
cywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODQ4LDcgKzg0
Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBtX3N0YXRlLnRl
eHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2
ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZl
bHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZv
aWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UzRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxz
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAgZ2w6OlRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6ZSwgcGl4ZWxz
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVs
LCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQp
LCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50
IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50
IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmYKICAg
ICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdWJJbWFn
ZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQs
IGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNl
dCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bh
bihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51
bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4OTQsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlM0RSb2J1
c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xz
aXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dM
aW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXpl
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNldCks
IDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xT
cGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhv
ZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5MDcsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1YkltYWdlM0RS
b2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6ZSwgZGF0YS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xp
bnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5
b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0QodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZv
cm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNv
bnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKK1Zl
Y3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtcyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1J
bmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVu
aWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpAQCAtOTI5LDcg
KzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwpAQCAt
OTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6OkNoZWNrRnJh
bWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBH
Q0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQ29sb3IoR0NH
TGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk0NSw3
ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdDR0xj
bGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFyQ29sb3Iociwg
ZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xi
aXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhcihHQ0dMYml0
ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NjIsNyArOTU2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NH
TGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dM
Ym9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwgR0NHTGJvb2xl
YW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGls
ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGls
ZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
IHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVT
aGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNvbXBpbGVTaGFk
ZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2Uy
RERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVy
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEwMTYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEwMzMsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoZnJhbWVi
dWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkN1
bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1
bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhGdW5j
KEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVuYyhmdW5jKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFu
IGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhHQ0dMYm9vbGVh
biBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
cHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxhZyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNo
YWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMTwogICAg
IGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpEaXNh
YmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODksNyArMTA4Myw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51
bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpCiAg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdF
bGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZW5h
YmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2FwKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NH
THVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQog
ICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1c2goKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMzks
NyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKICAgICBn
bDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dM
ZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVy
ZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51
bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTU2
LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE2NCw3ICsx
MTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDR0xlbnVt
IG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3Miw3ICsx
MTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NH
TGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICBpZiAo
IXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBA
IC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJp
YihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwgaW5mbyk7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7
CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURf
VkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
Y3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVu
aWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5m
byYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaW5k
ZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hl
ZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdD
R0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVj
dCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpZiAoIXByb2dy
YW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAgaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0cmliTG9jYXRp
b25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3Qo
KQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJuIG1vdmVkQW5F
cnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkK
K0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsKICAgICBpZiAo
IW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVkIHRvIG1vdmUg
dGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCkBA
IC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMzA3LDcg
KzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dM
ZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMxNSw3
ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2RlKTsKIH0KIAot
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKICAg
ICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xMzM0
LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFi
bGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXApOwogfQogCi1H
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewogICAgIGlm
ICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzNDUsNyArMTMz
OSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVy
KFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJc0ZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQog
ewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTM1Niw3
ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1Byb2dyYW0ocHJv
Z3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRl
cmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVy
YnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZQogICAgIHJl
dHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
KQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2w6
OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
IHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzODks
NyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1
cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNUZXh0dXJlKHRl
eHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0aCh3aWR0aCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogICAgIGds
OjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFj
dG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5p
dHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdD
R0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2FtcGxlQ292
ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAsNyArMTQyNCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFt
cGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVyYWdlKHZhbHVl
LCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xNDUxLDcgKzE0
NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJTb3VyY2Uoc2hh
ZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NH
TGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0
ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NTks
NyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdD
R0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCBy
ZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxG
dW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdD
R0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLAogICAg
IGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3
NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2so
R0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwg
R0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3Nyw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0g
ZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBt
YXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xl
bnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBH
Q0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtCiAg
ICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51
bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZh
aWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWls
LCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQ
YXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsxNTAxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyArMTUxNyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAg
IGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5kYXRhKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5p
Zm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NF
UlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpV
bmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2
Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyArMTU3Niw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9jYXRpb24sIGFy
cmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50
IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlmb3JtMWkobG9j
YXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBh
cnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBH
Q0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGds
OjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NH
TGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGlu
dCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFy
cmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBh
cnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdD
R0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00aShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYz
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAgZ2w6OlVuaWZv
cm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQogewogICAgIEFT
U0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGluCiAgICAgZ2w6
OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJh
CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9z
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAgICAgQVNTRVJU
KCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJy
YXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZT
aXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTY3NSw3ICsx
NjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAg
Z2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjFm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xm
bG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBH
Q0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBnbDo6VmVy
dGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0
cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRl
eEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEs
IEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZgog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
CiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4
LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBnbDo6VmVydGV4
QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4g
YXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cKICAgICBnbDo6
VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkg
c3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51
bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsCiAgICAg
Z2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0
cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zm
c2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJ
UG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dM
c2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwg
R0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc3Myw3
ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBv
aW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVydGV4QXR0cmli
SVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZp
ZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDCiAgICAgZ2w6
OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE3OTQsNyAr
MTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xP
YmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgw
Niw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4
QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0ZVZlcnRleEFy
cmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFy
cmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTE4
MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Zl
cnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRl
eEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4MjgsNyAr
MTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQ
bGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFycmF5T0VTKGFy
cmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NH
TGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xi
b29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+CiAg
ICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNpemUsIG51bGxw
dHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAgR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGZsb2F0
PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xFKHBuYW1lLCB2
YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdDR0xpbnQ2NCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQorR0NH
TGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFt
ZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dM
ZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCiB7CiAg
ICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYsNyBAQCBHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJv
Z3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBH
Q0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg5
MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3Jh
bWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVybiB2YWx1ZTsK
IH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9n
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJp
bmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1hbmdsZWRJbmZv
TG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBT
dHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAgVU5VU0VEX1BB
UkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0s
CiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFtSW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0x
OTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dy
YW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4gZ2V0VW5tYW5n
bGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7CiB9
CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmkoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChzaGFkZXIpOwog
ICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwg
R0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK1N0
cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTczLDEyICsxOTY3
LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhz
aGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCkKK1N0
cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZsb2F0IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFy
YW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9h
dCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTk4Nyw3
ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJh
bWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQog
ewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
TGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
TGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvYwog
ICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6
ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2Nh
dGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3ICsyMDE3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVpdlJvYnVzdEFO
R0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0K
IAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBA
IC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAgIHJldHVybiBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAK
LUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0ciBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0wK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAgIHJldHVybiBv
OwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNy
ZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICByZXR1cm4gbzsK
IH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJv
Z3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVBy
b2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVhdGVQcm9ncmFt
KCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogICAgIHJldHVy
biBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIwODMsNyBAQCBQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIoR0NH
TGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVO
VF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7CiB9CiAK
LVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUo
KQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVUZXh0dXJl
KCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVi
dWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAgICBnbDo6RGVs
ZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6RGVsZXRlUHJv
Z3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5k
ZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogICAgIGds
OjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkRlbGV0ZVNo
YWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2MSw3ICsyMTU1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9y
bUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFs
bCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6
ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5
bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQgdG8gbW92ZSB0
aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCiAgICAgLy8g
cHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2ls
bCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50aGV0aWNFcnJv
cnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VD
b250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExv
c3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykp
CiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250ZXh0KCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWRO
b3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNwYXRjaENvbnRl
eHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5n
ZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkg
Y291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNp
emVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwg
R0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NH
THNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVp
IHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0VsZW1lbnRzSW5z
dGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVt
IG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4
LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMjMsNyArMjIx
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3Io
R0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0ZXhBdHRyaWJE
aXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIyNiw3IEBAIEdD
R0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3JtQmxvY2tJbmRl
eChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1TdHJpbmcg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkKK1N0cmluZyBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7CiAgICAgQVNT
RVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjUyLDcg
KzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBTdHJpbmcoYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9j
a0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAog
CiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0dXJuIG5hbWU7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGdsOjpCZWdpblF1
ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
bmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVu
ZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6OkVuZFF1ZXJ5
KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVy
eU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50IEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lKQogCiAv
LyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAt
MjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9y
bUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRi
YWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAgICAgZ2w6OkRl
bGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwogfQogCi1HQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0
Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9y
bUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJh
bnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNr
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMzM0LDcgKzIz
MjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJh
Y2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJhbnNmb3JtRmVl
ZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhH
Q0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2RlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM1MCw3ICsy
MzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZm
ZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZh
cnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFt
LCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3MuZGF0YSgpLCBi
dWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0gMDsKLSAgICBn
bDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAgZ2w6OkdldFBy
b2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZPUk1fRkVFREJB
Q0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZTaXplKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRC
dWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsCiAgICAg
Z2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dM
aW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBH
Q0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQg
bWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwg
R0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RY
MSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDAz
LDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZm
ZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpCbGl0RnJhbWVi
dWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRz
dFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1l
bnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NHTGludCBsYXll
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVMYXllcih0YXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNw
YW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0YXJnZXQsIGF0
dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFy
Z2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihH
Q0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRCdWZmZXIoR0NH
TGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNyYyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQs
IEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZl
clRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZy
YWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIC0x
OwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMKICAgICByZXR1
cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NH
THVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDc2LDcg
KzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtMnVpKGxv
Y2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkoR0NHTGludCBs
b2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDg0LDcgKzI0
NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtM3VpKGxvY2F0
aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1
aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWlu
dAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWlu
dD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGds
OjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8g
MiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjUxOCw3ICsy
NTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9ybTN1aXYobG9j
YXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1CiAg
ICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyArMjUzMCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDNmdihsb2Nh
dGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkK
IHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwg
dHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NF
UlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
QEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVu
aWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJhbnNwb3NlLCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTcyLDcg
KzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlmb3JtTWF0cml4
M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVmU2l6ZSAlIDEy
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyArMjU3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDNmdihsb2Nh
dGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGluZGV4
LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4Myw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShpbmRleCwgeCwg
eSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
Ykk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyArMjU5MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aXYoaW5kZXgs
IHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVp
bnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0
cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQg
eiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdQog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xl
bnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBH
Q0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcKICAgICBnbDo6
RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+
IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6OkRyYXdCdWZm
ZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZl
ciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdD
R0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIsIGRyYXdidWZm
ZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFu
PGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNs
ZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFs
dWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZl
ciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlcy5kYXRh
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50
IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyZmkoR0NH
TGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGlu
dCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsCiAgICAg
Z2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKICAgICBnbDo6
RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJuIGdsOjpJc1F1
ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVlKTsKIH0KIAot
UGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigp
CitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVNhbXBsZXIo
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAgICBnbDo6RGVs
ZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiAgICAgcmV0
dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5p
dCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcyMyw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIs
IHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBs
ZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdD
R0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2FtcGxlclBhcmFt
ZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNh
bXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6
OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLUdDR0xmbG9h
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NHTGZsb2F0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2Jq
ZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
ciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNh
bXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUp
CiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwKICAgICByZXR1
cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5
bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dMc3luYyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0
ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYQog
ICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQogCi1HQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCitHQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMgc3luYykKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMoc3luYyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3lu
YykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dMc3luYyBzeW5j
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5
bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0KIAotR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMs
IEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVudW0gR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZp
ZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4OSw3ICsyNzgz
LDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdD
R0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNsaWVudFdhaXRT
eW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50
NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5bmMoR0NHTHN5
bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNzk3LDcgKzI3
OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3luYyhzeW5jLCBm
bGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKIHsK
ICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNr
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFu
c2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgy
Myw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgz
MSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlclJh
bmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6QmluZEJ1ZmZl
clJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0KIAotVmVjdG9y
PEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVz
KQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtSW5k
aWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlm
b3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWludD4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJv
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBwYXJhbXMpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1
aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJsb2NraXZSb2J1
c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcy5idWZTaXpl
LCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0FycmF5
c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NH
TFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg1OSw3
ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlz
QU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVsdGlEcmF3QXJy
YXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xT
cGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGlu
c3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkg
ZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTCiAgICAg
Z2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5kYXRhLCBjb3Vu
dHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2Rl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2Rl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yODgwLDcgKzI4
NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0FO
R0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURyYXdFbGVtZW50
c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCksIGRyYXdjb3Vu
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBj
b3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg5
Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxl
bWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6TXVsdGlEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwgcG9pbnRlcnMu
ZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQorYm9vbCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogewogICAgIHNp
emVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVDb21wbGV0aW9u
RmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKQEAg
LTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5k
VXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50
Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JU
ZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3BsYXlXYXNS
ZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChl
dmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1cmUpIHsKKyAg
ICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVuZGVyaW5nUmVz
dWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBwYWlu
dFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1h
Z2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVh
ZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RGTW92ZSgqcGl4
ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0
KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBSZWFk
aW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3
aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVk
QWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byByZXN1bHRzID0g
cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1bHRzICYmICFy
ZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1bHRzLT5mb3Jt
YXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0cy0+Zm9ybWF0
KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAgLy8gRklYTUU6
IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJvd0J5dGVzIGFu
ZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXplID0gcmVzdWx0
cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6ZS53aWR0aCgp
ICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRhdGEoKTsKKyAg
ICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAxKSAqIHJvd1N0
cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChuZXcgdWludDhf
dFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9wICs9IHJvd1N0
cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5KHRlbXAuZ2V0
KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0b20sIHRvcCwg
cm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCksIHJvd1N0cmlk
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3N0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdS
ZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJl
dHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWlu
dGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlYWRDb21w
b3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRlMzBiY2JjNDc3NDViYjhiNDIxNTI3YmZkMzQ5YmFkNjc3YmQwNjcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSU9T
dXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0
LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29zaWEgeworY2xh
c3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBIb3N0V2luZG93
OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNzIFBpeGVsQnVm
ZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQ
bGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBoaWNzQ29udGV4
dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7CisgICAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0OworICAgIEdD
R0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGljIEdDR0xlbnVt
IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVt
IGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdCdWZmZXJUZXh0
dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKKyAgICBl
bnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAgICAgLy8gUmVs
ZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgY2FsbHMg
ZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCisgICAg
ICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlVGhyZWFk
UmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQg
YmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisgICAgICAgIC8v
IGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFz
ZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9u
LCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAgdm9pZCBwcmVw
YXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlvbiB3aXRob3V0
IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAgaW50IGdldEF0
dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2luZyB0aHJvdWdo
IEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0KTsK
KworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09
MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8vIEdyYXBoaWNz
Q29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdCBm
aW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkgZmluYWw7Cisg
ICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZv
cm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgZmluYWw7Cisg
ICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmlu
YWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVuZENvbG9yKEdD
R0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFt
cGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKSBm
aW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBH
Q0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAgdm9pZCBidWZm
ZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEsIEdD
R0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZp
bmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0
KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5hbDsKKyAgICB2
b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFt
cGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVhckRlcHRoKEdD
R0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDR0xpbnQgcykg
ZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFsOworICAgIHZv
aWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlUZXhTdWJJbWFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dM
aW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0gbW9kZSkgZmlu
YWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7CisgICAgdm9pZCBk
ZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdD
R0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9pZCBkZXRhY2hT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0FycmF5cyhHQ0dM
ZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFsOworICAgIHZv
aWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxlKEdDR0xlbnVt
IGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBp
bmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lkIGZsdXNoKCkg
ZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9udEZhY2UoR0NH
TGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJn
ZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBib29sIGdldEFj
dGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7CisgICAgYm9vbCBn
ZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBs
YXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGdl
dEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpIGZp
bmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZpbmFsOworICAg
IHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVl
KSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkgZmlu
YWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGlu
dD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5h
bWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5nIGdldFVubWFu
Z2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25zdCBTdHJpbmcm
KTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJpKFBsYXRmb3Jt
R0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5m
b0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25UeXBlLCBHQ0dM
U3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5hbDsKKyAgICBT
dHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIFN0cmlu
ZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0IGdldFRleFBh
cmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NH
TGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7CisgICAgdm9p
ZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRVbmlmb3JtdWl2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
THVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0
Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdDR0xzaXplaXB0
ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKSBm
aW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKSBmaW5h
bDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAgICBHQ0dMYm9v
bGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIEdDR0xib29s
ZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBp
c1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBp
c1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RleHR1
cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgoR0NHTGZsb2F0
KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFs
OworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5p
dHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCByZWFkblBp
eGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBm
aW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSBm
aW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29s
ZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgc2hh
ZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIHZv
aWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2sp
IGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dM
ZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBz
dGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2Vw
YXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBzdGVu
Y2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKSBmaW5h
bDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZh
aWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAgdm9pZCB0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7
CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXpl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCBjb21wcmVz
c2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQg
Ym9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7Cisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhv
ZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgpIGZpbmFsOwor
ICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCB1
bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdikg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB4LCBH
Q0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6KSBmaW5h
bDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikgZmluYWw7
CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgsIEdDR0xm
bG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0
Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHkp
IGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQg
eikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBmaW5hbDsKKyAg
ICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwg
R0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAgdm9pZCBkcmF3
QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBj
b3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxlbWVudHNJ
bnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKSBmaW5h
bDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmluYWw7CisgICAg
dm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQg
YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgY29weUJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdD
R0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRy
KSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3Jj
WDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQg
ZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIp
IGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZUZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRz
KSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAgdm9p
ZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlcm5hbGZv
cm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVz
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5hbDsKKyAgICB2
b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFn
ZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdD
R0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0
aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGlu
dCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZz
ZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7Cisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBH
Q0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAg
R0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVp
bnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3VpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+KSBmaW5h
bDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHVu
aWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aShH
Q0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3
KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6
LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5hbDsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0
LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0
ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NH
TGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZm
ZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2
b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVF1
ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5
KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkp
IGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KSBm
aW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0dWkoUGxhdGZv
cm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBsYXRmb3JtR0xP
YmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2FtcGxlcihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU2FtcGxlcihQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAgICB2b2lkIHNh
bXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUs
IEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmYoUGxhdGZv
cm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5h
bDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBz
YW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTYW1wbGVyUGFy
YW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsK
KyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQg
ZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykgZmluYWw7Cisg
ICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBjbGllbnRX
YWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQp
IGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywg
R0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2koR0NHTHN5bmMs
IEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVRyYW5z
Zm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQ
bGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RyYW5zZm9ybUZl
ZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmluZFRyYW5zZm9y
bUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkgZmluYWw7Cisg
ICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpIGZp
bmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZpbmFsOworICAg
IHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lkIHBhdXNlVHJh
bnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9ybUZlZWRiYWNr
KCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1
aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAgdm9pZCBiaW5k
QnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZpbmFsOworICAg
IFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsKKyAgICBWZWN0
b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpIGZp
bmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1CbG9ja0Jp
bmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRl
eCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9pZCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJ
bmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykgZmluYWw7Cisg
ICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dM
c2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0FycmF5c0luc3Rh
bmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywg
R0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXpl
aT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworICAgIHZv
aWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
b2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtdWx0aURy
YXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBv
ZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6
ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZUJ1ZmZl
cigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKSBmaW5h
bDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsKKyAgICBQbGF0
Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xP
YmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5h
bDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lk
IGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBzeW50aGVz
aXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdldEV4dGVuc2lv
bnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2
ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsKKyAgICB2b2lk
IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAg
IHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCk7Cisg
ICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOworICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5k
ZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworCisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CisjZW5kaWYKKyAgICB1bnNp
Z25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKTsKKworICAgIGNvbnN0ZXhwciBzdGF0
aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQ
TEFZOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZl
RGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5
cGUsIC0xKTsKKyAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQ
ZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwor
I2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xFKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJs
aWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICAvLyBDYWxs
ZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRo
YXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2Vy
J3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKKyAgICAvLyBpbiBwYXJ0
aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBv
cgorICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMg
b2YgdGhlIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQgdmFsaWRhdGVE
ZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKKyAg
ICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgdm9pZCByZWFkblBpeGVsc0ltcGwo
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpKiBsZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9p
ZCogZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCk7CisKKyAgICAvLyBEaWQg
dGhlIG1vc3QgcmVjZW50IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUgaW4gYW4gYWNj
ZXB0YWJsZSBzdGF0ZT8KKyAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsKKworICAgIGJv
b2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcHJlcGFyZVRleHR1cmVJ
bXBsKCk7CisgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IElu
dFJlY3QmID0gSW50UmVjdCgpKTsKKyAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZl
cklmTmVlZGVkKEdDR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpOworCisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIGFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZm
ZXJCYWNraW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CisgICAgc3RhdGljIGJv
b2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXksIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wpOworI2VuZGlmCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBjb250
ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgorICAgIGJvb2wgd2FpdEFuZFVwZGF0
ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gUGxhdGZvcm0gc3Bl
Y2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICBzdGF0aWMgdm9pZCBw
bGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKKworICAgIEdDR0x1aW50IG1fdGV4dHVy
ZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsQ29sb3JGb3JtYXQg
eyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCB7IDAgfTsK
KyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OworICAgIEdDR0x1aW50IG1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyIHsgMCB9OworICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6
dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCisgICAgR0NHTHVpbnQgbV9wcmVzZXJ2ZURyYXdp
bmdCdWZmZXJUZXh0dXJlIHsgMCB9OworICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVyZSB3aGVuIG1f
cHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KKyAgICBHQ0dMdWludCBt
X3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKKyAgICAvLyBRdWVyaWVkIGF0IGRpc3Bs
YXkgc3RhcnR1cC4KKyAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCB7IC0x
IH07CisgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgorICAgIExp
c3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKyAgICBib29sIG1faXNGb3JX
ZWJHTDIgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3VudCB7IDAgfTsK
KyAgICBib29sIG1fZmFpbE5leHRTdGF0dXNDaGVjayB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Vz
ZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKKyAgICBzaXplX3QgbV9vbGRlc3RGcmFt
ZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKKyAgICBTY29wZWRHTEZlbmNlIG1fZnJhbWVDb21wbGV0
aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOworICAgIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUg
bV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+IG1fZXh0ZW5z
aW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJm
YWNlU3dhcENoYWluIG1fc3dhcENoYWluOworICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsg
bnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsg
bnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWdP
YmogeyBudWxscHRyIH07CisgICAgLy8gQmFja2luZyBzdG9yZSBmb3IgdGhlIHRoZSBidWZmZXIg
d2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5LgorICAgIC8vIFdoZW4gcHJlc2Vy
dmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3aW5nIGJ1ZmZlciBiYWNr
aW5nIHN0b3JlLgorICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IHRydWUsIHRo
aXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7CisgICAgdm9pZCogbV9kaXNw
bGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24geyBmYWxzZSB9
OworICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9oaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0OworI2VuZGlmCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIEdD
R0x1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm1l
ZGlhdGVUZXh0dXJlIHsgMCB9OworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisgICAgc3RkOjp1
bmlxdWVfcHRyPE5pY29zaWE6OkdDR0xMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKKyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFOworI2lmIFVTRShOSUNPU0lBKQorICAgIGZyaWVuZCBjbGFzcyBOaWNv
c2lhOjpHQ0dMTGF5ZXI7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgZnJpZW5kIGNs
YXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyNlbmRpZgorfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXggY2NjYjU3MjRhNGNk
OTJmZjBiZjhlNzM4M2M1ZDlmZTY4OWQ3N2I4Ni4uNGQ1OWNiMTJjNWU0NDc1MzdkZTBhZWUyMTBk
ZTAwMmNiZDc5ZmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKQEAgLTEw
Niw3ICsxMDYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJh
Y3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFBpeGVs
QnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50VG9DYW52YXMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRl
cywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVCghcGl4ZWxCdWZmZXIuc2l6
ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcAppbmRleCBmNzlmMjJlMzEzZWExMTczODljNWY0MDlkZDBmNDk0YWUxNWFlYjkz
Li5hZjRjMTdkNTFmYTU5ZjQ2ODhkZjQzOTY1MzUxOGY1Y2EwZGFhZjIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFn
ZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50
VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0
QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJj
ZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJU
KCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFzU2l6ZS5pc0Vt
cHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRHTENvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKaW5kZXggMjU1NWZmMDgzMjhlMzQ2
OWNkN2E0YTI5N2RiZWY3OTBmNjMwNTI4OC4uZTQwOTVhMmIxOWUyNGQxZGI4MDljMTgyZjY0MzJi
ZGMwY2I3ODZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApAQCAtMjcsMTIgKzI3
LDE4IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbmNsdWRl
ICJJT1N1cmZhY2UuaCIKIAorI2lmIEVOQUJMRShWSURFTykKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMQ29jb2Eg
OiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgeworY2xhc3MgV0VCQ09SRV9FWFBPUlQg
R3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMQ29jb2E+IGNyZWF0
ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAgfkdyYXBoaWNz
Q29udGV4dEdMQ29jb2EoKTsKQEAgLTQ5LDE0ICs1NSwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwogI2VuZGlmCiAK
LSAgICAvLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBvdmVycmlkZXMuCisgICAgLy8gR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0IG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGNvcHlU
ZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBmbGlwWSkgZmluYWw7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pCisgICAgR3JhcGhpY3ND
b250ZXh0R0xDViogYXNDVigpIGZpbmFsOworI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0ZDo6dW5pcXVl
X3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29u
dGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3MmM3N2VjYjIx
OWUzOS4uMDI5Y2MzZmFlNDdmODcwMjNjNWMzMDIyNWUwMjU5YTA0MWYwZDY2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0
R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9H
cmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5kaWYKIAogI2lm
IEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxhdGZvcm1Jc0FO
R0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpID09IHRy
dWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJlYWRlZCBtYW5u
ZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxzZSBjYXNlIHRo
aXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1dCBhbHdheXMg
c2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIgYW5kIG51bGxw
dHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIGN1cnJl
bnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKQog
ewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNw
bGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgfQogCiAg
ICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNrZW5kLiIsIGF0
dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRpdmVEaXNwbGF5
VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlZmF1bHREaXNw
bGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNlTWV0YWwpIHsK
ICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9BTkdMRV9UWVBF
X0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0YXRpYyBFR0xE
aXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAgICAgICAgICAg
ICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwog
ICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9XRVJfQU5HTEUp
OwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjps
b3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYgKHBvd2VyUHJl
ZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJlZmVyZW5jZTo6
SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQo
RUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5hdGl2ZURpc3Bs
YXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlzcGxheTsKKyAg
ICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpoaWdoUGVy
Zm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlBdHRyaWJ1dGVz
LmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xBTkdMRShXVEZN
b3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVuY3Rpb25hbGl0
eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29hIHRvIHNpbXBs
aWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzKQorR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRycykKIHsKICAg
ICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdM
V2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVuc2lvbik7CiAg
ICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0gICAgICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRp
c3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0YWwg
aW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3RzIGFyZSBub3Qg
c2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVycywgc28KICAg
ICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0bGluZy4gT3Bl
bkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21lIHNvcnQgb2Yg
aW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAotICAgIExPRyhX
ZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRoaXMpOwor
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICglcCkuIiwg
dGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUo
KQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigp
LnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVudCgpKSB7CkBA
IC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAhPSB0aGlzKTsK
ICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9HKFdlYkdMLCAi
RGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlzKTsKKyAgICBM
T0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICglcCkuIiwgdGhp
cyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgpIGNvbnN0CkBA
IC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmlzVmFsaWQo
KSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIq
IEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4dEN1
cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNv
bnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXNDaGVjaykgewog
ICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0ICglcCkuIExv
c2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRTdGF0dXMgPSAw
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0
eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2V0Q29udGV4
dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlm
ICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUyMCw3ICs1MjAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShi
b29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmICht
X3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcgKzUyOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQog
ICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsK
ICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAg
ICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxsb2NhdGluZyBh
IG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVzc3VyZS4KQEAg
LTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlz
cGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVm
ZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0
ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAgICBBU1NFUlQo
IWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBhdXRvIGJhY2tp
bmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
KQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShiYWNraW5nKSwg
cGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmREaXNwbGF5
QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBw
YnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcikK
IHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4dHVyZVRhcmdl
dCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJC
KTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJy
ZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7
CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdM
X05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNw
bGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNobWVudFVzYWdl
IHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0NHTHVpbnQg
cGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewogICAgICAgICBM
T0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19jYXN0PGludD4o
dGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2NywyNCArNjY3
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZhY2VGcm9tU2hh
cmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNG
b3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZl
bnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsKLSAgICBpZiAo
ZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3Bs
YXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZXZl
bnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKSB7Ci0gICAg
ICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXkoKQogewogICAg
IGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0LDE1ICs3MDcs
MTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQog
CiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGljc0NvbnRleHRH
TENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3YgPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3YgPSBHcmFwaGlj
c0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1fY3YuZ2V0KCk7
CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogewog
ICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCk7CiAg
ICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQpA
QCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFT
YW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5
QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZm
ZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlCiB9
CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1SZWxlYXNl
VGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1S
ZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7
CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNv
cHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtRwogfQogI2Vu
ZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdPYmo7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0Nv
bnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKSAm
JiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRlICJBTkdMRVV0
aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8cGFsL3Nw
aS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQ
SS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TY29w
ZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3Rz
Q0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpbmNsdWRlICJD
b3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25z
dGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0dHJpYnV0ZSB2
ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBpbnQgdV9mbGlw
WTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZhcnlp
bmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAgICAi
eyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAxLjApOyIKLSAg
ICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41ICsgLjU7Igot
ICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFsaXplZFBvc2l0
aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2X3lUZXh0dXJl
Q29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2VGV4dHVyZUNv
b3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19OwotCi1zdGF0aWMg
Y29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKLSAgICAi
YXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0dXJl
U2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAgICJ1bmlmb3Jt
IGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIK
LSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZvaWQgbWFp
bigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24sIDAs
IDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9uICog
LjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAgICAgICBub3Jt
YWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKLSAgICAiICAg
IHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95VGV4dHVyZVNp
emU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9u
ICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHByIGF1dG8gc195
dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVuaWZvcm0gc2Ft
cGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JNYXRyaXg7Igot
ICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2YXJ5aW5nIHZl
YzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0gICAgInsiCi0g
ICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1X3lUZXh0dXJl
LCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0ZXh0dXJlMkQo
dV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIgICAgeXV2LmEg
PSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCi0g
ICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVy
VGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyIKLSAgICAi
dW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3JtIHNhbXBsZXIy
RFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1hdHJpeDsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZhcnlpbmcgdmVj
MiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAgICAieyIKLSAg
ICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVjdCh1X3lUZXh0
dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0ZXh0dXJl
MkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIKLSAgICAiICAg
IHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVfY29sb3JNYXRy
aXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2UgewotICAgIFVua25v
d24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJhbnNmZXJGdW5j
dGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBrSVRVX1JfNjAx
XzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQM19ENjUsCi0g
ICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJhbmdlRnJvbVBp
eGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBpeGVsRm9ybWF0
KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4OgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlw
ZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRU
eXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhBVkUoQ09SRVZJ
REVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlmCi0gICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlX0FSR0IyMTAx
MDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBs
YW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3IxMEJp
UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEw
QmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9G
T1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhC
aVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6RnVs
bDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5rbm93bjsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5jdGlvbkZyb21T
dHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVxdWFsKHN0cmlu
Zywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAgICAgIHJldHVy
biBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZFcXVhbChzdHJp
bmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAgICAgICByZXR1
cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENGRXF1YWwoc3Ry
aW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkpCi0gICAgICAg
IHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0gICAgaWYgKGNh
bkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKCkgJiYgQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkKLSAgICAgICAg
cmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2FuTG9hZF9Db3Jl
VmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVxdWFsKHN0cmlu
Zywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICByZXR1cm4gVHJh
bnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJ
bWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0cmluZywga0NW
SW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0dXJuIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25D
Vjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5pb24gewotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAgICAgR0xmbG9h
dCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxvYXQgY2I7Ci0g
ICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07Ci0KLSAgICBj
b25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZsb2F0IGIpCi0g
ICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNvbnN0ZXhwciBH
TGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkKLSAgICAgICAg
OiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAgIH0KLQotICAg
IGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xmbG9hdENvbG9y
JiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
YnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAgICAgICAmJiBh
YnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAgICAgICAmJiBh
YnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0KLX07Ci0KLXN0
cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBi
bGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB3aGl0
ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciByZWQgICAg
IHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsw
LCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVlICAgIHswLCAw
LCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAgIHswLCAxLCAx
fTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsxLCAwLCAxfTsK
LSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAxLCAwfTsKLX07
Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKLQot
ICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2ll
bnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0
KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0gICAgfQotCi0g
ICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikg
Y29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFu
Z2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQot
ICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJH
QiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiArIEtnICogRyAr
IEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0gICAgLy8gQ3Ig
PSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEti
IGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQg
ZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0aGUgYWJvdmUg
ZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8g
UiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2Ip
KSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0g
KCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8gV2hlbiB0aGUg
Y29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0g
d2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEgcmFuZ2Ugb2Yg
WzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUg
RnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFuZ2Ugb2YgWzAs
IDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9
IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0IHlTY2FsaW5n
RmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7
Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1
bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFj
dG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10gPSAwOwotCi0g
ICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0gPSAtY2JjclNj
YWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8g
Y2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIg
KiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsK
LSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsK
LSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNp
ZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsKLQotICAgIHJv
d3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11bMl0gPSAwOwot
ICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4g
b2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQotICAgIC8v
IGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0
MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVt
YmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAgICAgICAgYXV0
byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAgICAgYXV0byYg
eiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAgICB3IC09ICh5
ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRl
bykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQotY29uc3RleHBy
IEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYg
Y29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAgICAgcm93c1sw
XVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsy
XSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVswXSAqIGNvbG9y
LnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJn
Yi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93
c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sy
XVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4
Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVu
Y3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFp
cjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1hdHJpeE1hcCA9
IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBv
bmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAgLy8gaHR0cHM6
Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JD
ck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5
OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0
ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAg
MTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxs
b3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNf
YXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAy
NTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAx
MjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0
ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3
aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwg
InIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDks
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUg
ZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lm
aWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5
OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXgg
eyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIy
LCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAy
NTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0
MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Z3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
ODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJp
eCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAv
IDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAz
MCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBn
cmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYp
LCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcs
IDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAg
ICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFu
IGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25l
bnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8v
d3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNy
TWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4y
NjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4
IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1
NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRl
byBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjks
ICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
NzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAg
OTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVk
LCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIw
IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0gICAgLy8gTWF0
cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0x
OTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1
bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBN
VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07Ci0gICAgY29u
c3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5n
ZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1W
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBU
RSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAx
MjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0
ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVm
IC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xm
bG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNt
cHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0K
LSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAs
ICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0
ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwg
IlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMs
IDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Onll
bGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1h
dHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlF
cXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBN
IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEs
ICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAx
LjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5
YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKLSAgICAgICAg
bWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVy
RnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0
cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5j
dGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2Vz
LmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2VzLmdl
dCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6
a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5l
bXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRV
X1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1w
bGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1Jf
MjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNl
KE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQw
TV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5l
bXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBU
RV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQotICAgIC8vIFdl
IHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFu
Z2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5r
bm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0gICAgICAgIHJh
bmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5n
ZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8gQXNzdW1lIHVu
a25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRlcmF0b3IgPT0g
bWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmljZXMuZ2V0KCku
ZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7Ci0KLSAgICBB
U1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJldHVybiBpdGVy
YXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4dCkgfTsKLSAg
ICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0gICAgZ2w6OkRl
bGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rlc3Ryb3lDb250
ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
OjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG93bmVy
KQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0aWJsZSBjb250
ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBkb2VzIG5vdAot
ICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5LgotICAgIGNvbnN0
IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09OVEVYVF9DTElF
TlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAyLAotICAgICAg
ICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUsCi0gICAgICAg
IEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19FTkFCTEVEX0FO
R0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJTkRfR0VORVJB
VEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9O
T05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0Zm9ybURpc3Bs
YXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25maWcoKTsKLSAg
ICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5LCBjb25maWcs
IG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlmIChjb250ZXh0
ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAgYXV0byBjb250
ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVHTF9OT19DT05U
RVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRleHQpOwotICAg
IH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRyYXdpbmdCdWZm
ZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQpIHsKLSAgICAg
ICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUi
KTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBHTF9OT19FUlJP
UikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdMaW50IHZlcnRl
eFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgR0xpbnQg
ZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0g
ICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAgIGF1dG8gcHJv
Z3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVy
LCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsK
LSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIGdsOjpE
ZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNlIGFyZSB3cml0
dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQgdnNMZW5ndGgg
PSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNf
eXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBHTGludCBmc0xl
bmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQubGVuZ3Ro
KCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRl
eFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZTsKLSAg
ICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hh
ZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFk
ZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBnbDo6Q29tcGls
ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZyYWdtZW50U2hh
ZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0g
ICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2w6
OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlzIGNoZWNrZWQg
YWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24gYmVuZWZpdC4K
LQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5CdWZmZXJzKDEs
ICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xlYW51cCA9IG1h
a2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVsZXRlQnVmZmVy
cygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0aWNlc1sxMl0g
PSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsKLSAgICBnbDo6
QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0gICAgZ2w6OkJ1
ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR0xf
U1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAgICBnbDo6R2Vu
RnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1ZmZlckNsZWFu
dXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVsZXRlRnJh
bWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGludCBzdGF0dXMg
PSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFtLCBHTF9MSU5L
X1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMpIHsKLSAgICAg
ICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZSb2J1c3RBTkdM
RSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmdnNTdGF0dXMp
OwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRTaGFkZXJpdlJv
YnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwgbnVsbHB0ciwg
JmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
KCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIsIHRoaXMsIHN0
YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
b250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xlYW51cC5yZWxl
YXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBtX2Rpc3BsYXkg
PSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25maWcgPSBjb25m
aWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0gICAgbV9mcmFt
ZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7Ci0gICAgbV91
dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dy
YW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRpb24gPSBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4Iik7Ci0gICAg
bV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJv
Z3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiA9IGds
OjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXplIik7Ci0gICAg
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlvbkF0dHJpYnV0
ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJhX3Bvc2l0aW9u
Iik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdoaWxlIHRoZSBw
cm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRpb25BdHRyaWJ1
dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQb3NpdGlvbkF0
dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAgIGdsOjpDbGVh
ckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6
Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIFBsYXRmb3Jt
R0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewotICAgIC8vIEZJ
WE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQyMGYnIHBpeGVs
IGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3JtYXRzLgotICAg
IE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUoaW1h
Z2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNy
OEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZv
cm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShDT1JFVklERU9f
Q09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVsRm9ybWF0ICE9
IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAg
ICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhC
aVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4
dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVz
JykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJlZiBzdXJmYWNl
ID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFzdXJmYWNlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJm
YWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKLSAgICAg
ICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1cmZhY2VTZWVk
ID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRU
ZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7Ci0gICAgICAg
IC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRp
bWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVu
IG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5v
LW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwg
IUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fY29udGV4
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9IENWUGl4ZWxC
dWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4ZWxCdWZmZXJH
ZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQp
OwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVk
IGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAvLyBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xlYXJUZXh0dXJl
T25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIp
OwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgfSk7Ci0g
ICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0gICAgZ2w6OkJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
LSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBnbDo6RnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9U
RVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0YXR1cyA9IGds
OjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVz
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVw
KSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1cmUuIiwgdGhp
cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0dXJlcyBm
b3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0ID0gSU9TdXJm
YWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxhbmVXaWR0aCA9
IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRvIHV2UGxhbmVI
ZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwotCi0gICAgR0xl
bnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5UZXh0dXJlcygx
LCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0
KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVv
VGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3JlOjpjcmVhdGVQ
YnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZpZGVvVGV4dHVy
ZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1dlBsYW5lV2lk
dGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEpOwotICAgIGlm
ICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2SGFuZGxlQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFuZGxlXSB7Ci0g
ICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXks
IHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7Ci0gICAgZ2w6
OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwg
JnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7
Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9IFdlYkNvcmU6
OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlk
ZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkVELCB5
UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAwKTsK
LSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHlIYW5k
bGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgeUhhbmRsZV0g
ewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNwbGF5LCB5SGFu
ZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBwYXJhbWV0ZXJz
LgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMCk7Ci0gICAg
Z2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0gICAgZ2w6OlVu
aWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlwWTo6WWVzID8g
MSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24s
IHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYobV91dlRleHR1
cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQpOwotCi0g
ICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOwot
ICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9tU3RyaW5nKGR5
bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50KGltYWdlLCBr
Q1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBjb2xvck1hdHJp
eCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24ocmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29sb3JNYXRyaXhV
bmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAgICAvLyBEbyB0
aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5HTEVTLCAwLCA2
KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1cmZhY2VTZWVk
ID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91dHB1dFRleHR1
cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1fbGFzdEZsaXBZ
ID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQzMDFmMTI1MWI3
MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVPKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5oIgotCi0jaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0vLyBHcmFwaGlj
c0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9mIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBp
bXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5HTEUgQ29jb2Eu
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1
ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBG
bGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4dHVyZVNlZWQo
R0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RUZXh0dXJlU2Vl
ZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG1f
b3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9kaXNwbGF5IHsg
bnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0IHsgbnVs
bHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWcgeyBu
dWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIgeyAwIH07Ci0g
ICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAgICBHQ0dMaW50
IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV91dlRleHR1
cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlwWVVuaWZvcm1M
b2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9u
IHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiB7IC0x
IH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0g
ICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotCi0gICAg
RmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2ludGVyPElPU3Vy
ZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJmYWNlU2VlZCB7
IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dMdWludCwgdW5z
aWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVyZVNlZWQ7Ci19
OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4
dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oIgorCisjaWYg
RU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNp
bmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY29j
b2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIHsKKyAg
ICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ1bmlm
b3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRl
OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZvaWQg
bWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24s
IDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9u
ICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAiICAgICAgICBu
b3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKKyAgICAi
ICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIKKyAgICAiICAg
IHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisgICAgIn0iX3MK
K307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmVSZWN0
YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAidW5pZm9ybSB2
ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0dXJlU2l6ZTsi
CisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVy
ZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIK
KyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQo
YV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQb3NpdGlvbiA9
IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09IDEpIgorICAg
ICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXplZFBvc2l0aW9u
Lnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb24g
KiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5hdGUgPSBub3Jt
YWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9OworCitjb25z
dGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0dXJlOyIKKyAg
ICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3JtIG1hdDQgdV9j
b2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2b2lkIG1haW4o
KSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5yID0gdGV4dHVy
ZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAiICAgIHl1di5n
YiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRlKS5yZzsiCisg
ICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5dXYgKiB1X2Nv
bG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsiCisgICAgInVu
aWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0gbWF0NCB1X2Nv
bG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIKKyAg
ICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZvaWQgbWFpbigp
IgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIgPSB0ZXh0dXJl
MkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAiICAgIHl1
di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSku
cmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2
ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3MgUGl4ZWxSYW5n
ZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKworZW51bSBjbGFz
cyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9SXzcwOV8yLAor
ICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtEQ0lfUDMsCisg
ICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhlbFJhbmdlIHBp
eGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQoreworICAgIHN3aXRj
aCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80NDQ0QVlwQ2JD
cjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoKKyAgICBjYXNl
IGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2FzZSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAg
Y2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6Cisj
aWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisj
ZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
XzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5
cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVWSURFT19DT01Q
UkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV9B
R1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQaXhlbFJhbmdl
OjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2Zl
ckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJp
bmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247CisgICAgaWYg
KENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzcwOV8yKSkK
KyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yOworICAgIGlm
IChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl82MDFfNCkp
CisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFfNDsKKyAgICBp
ZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8x
OTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRFXzI0ME1fMTk5
NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9E
Q0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9EQ0lf
UDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1AzOworICAgIGlm
IChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSgpICYm
IENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSkpCisgICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYgKGNhbkxvYWRf
Q29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgpICYmIENGRXF1
YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjApKQorICAgICAg
ICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICByZXR1cm4gVHJh
bnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENvbG9yIHsKKyAg
ICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0IHI7CisgICAg
ICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAgICAgIH0gcmdi
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAgICAgICAgICAg
R0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0geWNiY3I7Cisg
ICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBHTGZsb2F0IGcs
IEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7CisgICAgfQorCisg
ICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBHTGZsb2F0IHNj
YWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8gc2NhbGUgfQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVl
OworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29u
c3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCisg
ICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCisg
ICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwor
ICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIg
R0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
TGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdM
ZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xm
bG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBHTGZs
b2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9h
dENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JNYXRyaXggewor
ICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhl
bFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7CisK
KyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVy
YXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4cHIgWUNiQ3JN
YXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVu
dCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAgICAvLyBUaGUg
Y29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Cisg
ICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0gKEIgLSBZKSAv
ICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKKyAg
ICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNp
ZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQorICAgIC8v
CisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJp
dmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCisg
ICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkgLSAoMiAqICgx
IC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBD
cgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwg
WSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYg
Q3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQu
IFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwg
aGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KKwor
ICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmlj
aWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6
RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3Rv
ciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOworCisg
ICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0gPSAwOworICAg
IHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
OworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9y
OworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZm
aWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAgcm93c1sxXVsy
XSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29l
ZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsKKworICAgIHJv
d3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdG
YWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJdID0gMDsKKyAg
ICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJvd3NbM11bMV0g
PSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOworCisgICAgLy8g
Q29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFu
ZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFu
Z2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJvd051bWJlciA9
IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8mIHJvdyA9IHJv
d3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAgICAgYXV0byYg
eSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAgYXV0byYgdyA9
IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7CisgICAgICAgIGlm
IChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0geCAqIDE2IC8g
MjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3Bl
cmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdM
ZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsx
XSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwK
KyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJn
Yi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAgICAgICAgcm93
c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sy
XVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0YXRpYyBjb25z
dCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBp
eGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQorewor
ICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0
cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsK
KyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8vIE1hdHJpY2Vz
IGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBz
cGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAx
CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhl
bFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlD
YkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5
OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0
LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAx
LjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4g
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYp
LCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2
NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4s
ICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5m
KSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAg
c3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIx
LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAx
LjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9y
Iik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGlu
IHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0
dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHByIHN0YXRpYyBZ
Q2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAw
LjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4
IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRl
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3
aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlk
ZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2
LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxv
dywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5
ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcw
OSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1
LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3
aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5m
KSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAx
NDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAg
MS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBh
cmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3Bl
Y2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAK
KyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4
ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHByIHN0YXRpYyBZ
Q2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAw
LjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9h
dENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0
MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAx
LjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVm
IC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cg
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEy
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAx
LjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1
NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUs
ICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2
NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4s
ICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Y3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29t
cG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAgICAvLyBodHRw
Oi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNvbnN0ZXhwciBz
dGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRl
bywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0
ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwg
IDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJs
YWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAy
NDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
cmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1
NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENv
bG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3Io
MTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1G
dWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRF
IDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgs
IDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwg
ICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNl
IHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
c21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwg
MjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEs
IDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
bWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRpc3BhdGNoX29u
Y2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXko
UGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYw
MVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4
ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVs
bE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFu
Z2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01h
dHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6
OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgp
OworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRl
bywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsK
KyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwg
VHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOworICAg
ICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJh
bnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgp
OworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxs
LCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0
cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5k
bGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KKyAgICBBU1NF
UlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdlID09IFBpeGVs
UmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKKworICAg
IGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRyYW5zZmVyRnVu
Y3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5jdGlvbnMgYXJl
IHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQoKSkKKyAgICAg
ICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rp
b25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1hdHJpY2Vz
LmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRleHQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBpZiAoIW1fY29u
dGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9kaXNwbGF5LCBt
X2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJm1f
eXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZyYW1l
YnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOwor
fQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYShH
cmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3duZXIpCit7Cisg
ICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0ZSB3aXRoIG93
bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5lc3Mgb3IgV2Vi
R0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJpYnV0ZXNbXSA9
IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAgIG93bmVyLm1f
aXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdMX0JBQ0tXQVJE
U19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAgIEVHTF9DT05U
RVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAg
ICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlVTSwKKyAgICAg
ICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdMRGlzcGxheSBk
aXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmlnIGNvbmZpZyA9
IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gRUdMX0Ny
ZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmosIGNvbnRleHRB
dHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkKKyAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KGRpc3BsYXks
IGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rp
c3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1
cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVzdHJveUNvbnRl
eHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29sIHVzZVRleHR1
cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBHTF9URVhUVVJF
XzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKKyAgICBp
ZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJH
TF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgaWYgKGds
OjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNoYWRlcihHTF9W
RVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpDcmVhdGVTaGFk
ZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9IGdsOjpDcmVh
dGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3Zl
cnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAgICAgZ2w6OkRl
bGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hhZGVyKGZyYWdt
ZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3JhbSk7CisgICAg
fSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJlIGNvbXBpbGUt
dGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hh
ZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
Lmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFn
bWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9
IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195dXZWZXJ0ZXhT
aGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCA6IHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRlclNvdXJjZSh2
ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7CisgICAgZ2w6
OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAm
ZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgZ2w6
OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hTaGFkZXIoeXV2
UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0s
IGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3JhbSk7CisgICAg
Ly8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0aWNhbCBwYXJh
bGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRleEJ1ZmZlciA9
IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7CisgICAgYXV0byB5
dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4QnVmZmVyXSB7
CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOworICAgIH0p
OworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwgMSwgMSwgMSwg
LTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgeXV2
VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIHNpemVv
Zih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBHTHVpbnQgZnJh
bWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsK
KyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2ZyYW1lYnVmZmVy
XSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKKyAg
ICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dyYW1pdlJvYnVz
dEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAmc3RhdHVzKTsK
KyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7CisgICAgICAg
IGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09NUElMRV9TVEFU
VVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3RhdHVzID0gMDsK
KyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFkZXIsIEdMX0NP
TVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFpbGVkIHRvIGxp
bms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0dXMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICB5
dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZlckNsZWFudXAu
cmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250ZXh0ID0gY29u
dGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1ZmZlciA9IHl1
dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgbV95
VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3Jh
bSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpH
ZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7CisgICAgbV9jb2xv
ck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3Jh
bSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uID0gZ2w6
OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAgIG1feVRleHR1
cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFt
LCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24g
PSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZVNpemUiKTsK
KyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0cmliTG9jYXRp
b24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlzIGRlbGV0ZWQg
YnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGluIHVzZS4KKyAg
ICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmli
QXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6VmVydGV4QXR0
cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBm
YWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
RmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9ubHkgc3VwcG9y
dHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUgc3VwcG9ydGlu
ZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0gQ1ZQaXhlbEJ1
ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9ybWF0ICE9IGtD
VlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8vIE5PTElOVAor
ICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJp
UGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JN
QVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9B
R1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhlbEZvcm1hdCAh
PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQorI2Vu
ZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENW
Q29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBj
b3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBp
eGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElP
U3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsK
KyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xh
c3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVk
CisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRl
eHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBh
bmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBs
YXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMQ29j
b2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKGltYWdlKTsK
KyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFnZSk7CisKKyAg
ICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBUaGUgb3V0cHV0
VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBlYXJseS1vdXRz
LiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVycm9yIGlzIG5v
dCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFrZVNjb3BlRXhp
dChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGVdIHsK
KyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwor
ICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3Jt
YXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGdsOjpCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0ZSBtZW1vcnkg
Zm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBn
bDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xB
TVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RF
WFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0
LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1
cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBm
cmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAg
ICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8gc291cmNlLgor
ICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUoc3VyZmFjZSwg
MCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1
cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBs
YW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3VyZmFjZUdldEhl
aWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0
ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAgR0x1aW50IHV2
VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUpOworICAgIGF1
dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0geworICAgICAg
ICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7CisgICAgZ2w6OkFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2aWRlb1RleHR1
cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBh
cmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJ
TkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhU
VVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZh
Y2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNF
X1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR0xf
VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChb
ZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29yZTo6ZGVzdHJv
eVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOworICAgIH0pOwor
CisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJnlUZXh0
dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3lUZXh0dXJl
XSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOworICAgIH0pOwor
ICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6QmluZFRleHR1cmUo
dmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZlckFuZEF0dGFj
aElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJnZXQsIEVHTF9J
T1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWln
aHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhhbmRsZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBtYWtlU2NvcGVF
eGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRlc3Ryb3lQYnVm
ZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0pOworCisgICAg
Ly8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVuaWZvcm0xaSht
X3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2RmxpcFlVbmlm
b3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAgZ2w6OlVuaWZv
cm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgsIHlQbGFuZUhl
aWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24s
IHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdlID0gcGl4ZWxS
YW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFuc2ZlckZ1bmN0
aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0PENGU3RyaW5n
UmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRy
aXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JHQk1hdHJpeEZv
clJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbik7CisgICAg
Z2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiwgMSwgR0xf
RkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJhd2luZy4KKyAg
ICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9sYXN0U3VyZmFj
ZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNlU2VlZDsKKyAg
ICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50ZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAgICBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0ZTM5NjBiNmQ3
MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3
dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGlj
c0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9u
IGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRo
ZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENvY29hLgorY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYSgpIGZp
bmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJl
ZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSkg
ZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKEdyYXBoaWNz
Q29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2VlZChHQ0dMdWlu
dCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVTZWVkLmdldCh0
ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBtX293bmVyOwor
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7IG51bGxwdHIg
fTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51bGxwdHIgfTsK
KyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsgbnVsbHB0ciB9
OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9OworICAgIFBsYXRm
b3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGludCBtX3lUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0dXJlVW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3JtTG9jYXRpb24g
eyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07
CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAtMSB9OworICAg
IEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OworICAgIEdDR0xp
bnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAgIEZsaXBZIG1f
bGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1cmZhY2VSZWY+
IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQgeyAwIH07CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVuc2lnbmVkLCBJ
bnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dM
dWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3Bw
CmluZGV4IDkzYzAyMTRmMzlhODE5MjQyODBmMzczYzlhYzc5Mzg2YmQyMzI0NjAuLmU3YzI5ZGQ1
Y2JmZmYxNDRiZDFiODU1MTkxNmJmOGRiNjc0YWYwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcApAQCAtMTc3LDcgKzE3Nyw3IEBAIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxh
dGZvcm1Db25maWcoKSBjCiAgICAgcmV0dXJuIG1fY29uZmlnOwogfQogCi1HQ0dMQU5HTEVMYXll
cjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCitHQ0dM
QU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSYgY29udGV4
dCkKICAgICA6IEdDR0xMYXllcihjb250ZXh0KQogICAgICwgbV9hbmdsZUNvbnRleHQoQU5HTEVD
b250ZXh0OjpjcmVhdGVDb250ZXh0KCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFH
Q0dMQU5HTEVMYXllci5oCmluZGV4IDcwNTc5ZDI4YjgwYmI5NDMwZTg4MzU5NDUzMGIwMjUwZjc4
NDUzMjUuLjc4NzM3ODJjM2ZkMjJjNTBhNTc1MDA1YWFkZTBmNGYwMDBmMmIxYWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFHQ0dMQU5HTEVMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCkBAIC03Niw3ICs3Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgRUdMU3VyZmFjZSBtX3N1cmZhY2UgeyBudWxscHRyIH07CiAgICAg
fTsKIAotICAgIEdDR0xBTkdMRUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Jik7CisgICAgR0NHTEFOR0xFTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRSYp
OwogICAgIHZpcnR1YWwgfkdDR0xBTkdMRUxheWVyKCk7CiAKICAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNw
cAppbmRleCAwMzU3OTQ1OTJkMTZmYmNkZGIxMWQxNTcxYzYzZmNkM2M4YzY0YWE1Li5iN2M3OWUx
Zjg5ZDA2ZWQ4MDczODNlZmVhYTU0NTEwMDBmZThmZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhR0NHTExheWVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgTmljb3NpYSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1HQ0dMTGF5ZXI6OkdDR0xMYXllcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKK0dDR0xMYXllcjo6R0NHTExheWVyKEdyYXBo
aWNzQ29udGV4dEdMVHlwZSYgY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAg
ICwgbV9jb250ZW50TGF5ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4
bWFwL05pY29zaWFHQ0dMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5ZXIuaAppbmRleCA0MzI5OTA0NjA5ODY3NWI3
YmVhYjk3OWYyMTY1Mzc3NWJlMzVlMGEyLi4zYzBhMDIzNGE0ZTZmZmM5Y2Q1MThhYzM2YTY2NDI1
NmU4MThlN2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oCkBAIC0zMCwx
MCArMzAsMTUgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKE5JQ09TSUEpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAj
aW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCiAjaW5jbHVk
ZSA8bWVtb3J5PgogCisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
QU5HTEUuaCIKKyNlbHNlCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHTENvbnRleHQ7CiB9CkBAIC00Myw3
ICs0OCwxMiBAQCBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBHQ0dMTGF5ZXIgOiBwdWJsaWMg
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgR0NHTExheWVyKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJik7CisjaWYgVVNFKEFOR0xFKQorICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEdMVHlwZSA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxz
ZQorICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dEdMVHlwZSA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOworI2VuZGlmCisgICAgZXhwbGljaXQgR0NHTExheWVyKEdyYXBoaWNzQ29u
dGV4dEdMVHlwZSYpOwogCiAgICAgdmlydHVhbCB+R0NHTExheWVyKCk7CiAKQEAgLTU0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRl
eHQ7CisgICAgR3JhcGhpY3NDb250ZXh0R0xUeXBlJiBtX2NvbnRleHQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7CiAKICAgICBSZWY8Q29udGVu
dExheWVyPiBtX2NvbnRlbnRMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCmluZGV4IGI4MzJhMTg2YTQyYzhiZTMyMmE0YzcwODFmNzVkY2Q0OTBjMjdmODguLjJjMGQ5
OTdjZjM4MDE4MTExZGM0NzNhMWVkZmM4NWIzZGY3OGQ4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwyMiAr
MjMsMzA5NSBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkK
KyNpZiBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25z
R0wuaCIKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdMQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAi
VGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5j
bHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVT
LmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNp
ZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5H
TF9FUykKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBV
U0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhR0NHTExheWVyLmgiCisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gq
PiYgZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVI
YXNoKj4qIHNoYXJlZE5hbWVIYXNoOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7
CisgICAgICAgIHNoYXJlZE5hbWVIYXNoID0gbmV3IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVI
YXNoKj47CisgICAgfSk7CisKKyAgICByZXR1cm4gKnNoYXJlZE5hbWVIYXNoOworfQorCitzdGF0
aWMgdm9pZCBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoU2hhZGVyTmFtZUhhc2gqIHNo
YWRlck5hbWVIYXNoKQoreworICAgICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKSA9
IHNoYWRlck5hbWVIYXNoOworfQorCisvLyBIYXNoIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEFOR0xF
IHRyYW5zbGF0b3IvY29tcGlsZXIgdG8gZG8KKy8vIHN5bWJvbCBuYW1lIG1hbmdsaW5nLiBTaW5j
ZSB0aGlzIGlzIGEgc3RhdGljIG1ldGhvZCwgYmVmb3JlCisvLyBjYWxsaW5nIGNvbXBpbGVTaGFk
ZXIgd2Ugc2V0IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcgorLy8gdG8gcG9pbnQgdG8gdGhl
IG1hcCBrZXB0IGJ5IHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLgorCitzdGF0aWMgdWludDY0X3QgbmFtZUhhc2hGb3JTaGFkZXIoY29uc3QgY2hhciogbmFt
ZSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBDU3RyaW5nIG5hbWVBc0NTdHJpbmcgPSBDU3RyaW5nKG5hbWUpOworCisgICAgLy8g
TG9vayB1cCBuYW1lIGluIG91ciBsb2NhbCBtYXAuCisgICAgU2hhZGVyTmFtZUhhc2gqJiBjdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIgPSAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVy
KCk7CisgICAgU2hhZGVyTmFtZUhhc2g6Oml0ZXJhdG9yIGZpbmRSZXN1bHQgPSBjdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXItPmZpbmQobmFtZUFzQ1N0cmluZyk7CisgICAgaWYgKGZpbmRSZXN1
bHQgIT0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGZpbmRSZXN1bHQtPnZhbHVlOworCisgICAgdW5zaWduZWQgaGFzaFZhbHVlID0gbmFtZUFzQ1N0
cmluZy5oYXNoKCk7CisKKyAgICAvLyBDb252ZXJ0IHRoZSAzMi1iaXQgaGFzaCBmcm9tIENTdHJp
bmc6Omhhc2ggaW50byBhIDY0LWJpdCByZXN1bHQKKyAgICAvLyBieSBzaGlmdGluZyB0aGVuIGFk
ZGluZyB0aGUgc2l6ZSBvZiBvdXIgdGFibGUuIE92ZXJmbG93IHdvdWxkCisgICAgLy8gb25seSBi
ZSBhIHByb2JsZW0gaWYgd2UncmUgYWxyZWFkeSBoYXNoaW5nIHRvIHRoZSBzYW1lIHZhbHVlIChh
bmQKKyAgICAvLyB3ZSdyZSBob3BpbmcgdGhhdCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY29u
dGV4dCB3ZQorICAgIC8vIGRvbid0IGhhdmUgdGhhdCBtYW55IHN5bWJvbHMpLgorCisgICAgdWlu
dDY0X3QgcmVzdWx0ID0gaGFzaFZhbHVlOworICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgMzIpICsg
KGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2l6ZSgpICsgMSk7CisKKyAgICBjdXJyZW50
TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNldChuYW1lQXNDU3RyaW5nLCByZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6
IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAg
bV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xMYXllcj4oKnRoaXMpOwor
I2Vsc2UKKyAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXI+KCp0aGlzKTsKKyNlbmRpZgorCisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKwor
ICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmli
dXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAg
ICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgIDo6Z2xHZW5UZXh0dXJl
cygxLCAmbV90ZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOworCisgICAgLy8gQ3JlYXRlIGFuIEZCTy4KKyAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEs
ICZtX2Zibyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8p
OworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIDo6Z2xHZW5UZXh0dXJlcygx
LCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgIDo6Z2xHZW5UZXh0
dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisjZW5kaWYKKworICAgIC8vIENyZWF0
ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0g
bV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewor
ICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBt
X211bHRpc2FtcGxlRkJPOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRE
cmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VT
KQorICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVy
YnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5j
aWwpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7
CisjZW5kaWYKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRl
cHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgfQorCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgOjpnbEVuYWJsZShHTF9W
RVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKKworICAgIGlmIChHTENvbnRleHQ6OmN1cnJlbnQo
KS0+dmVyc2lvbigpID49IDMyMCkgeworICAgICAgICBtX3VzaW5nQ29yZVByb2ZpbGUgPSB0cnVl
OworCisgICAgICAgIC8vIEZyb20gdmVyc2lvbiAzLjIgb24gd2UgdXNlIHRoZSBPcGVuR0wgQ29y
ZSBwcm9maWxlLCBzbyByZXF1ZXN0IHRoYXQgb3VwdXQgdG8gdGhlIHNoYWRlciBjb21waWxlci4K
KyAgICAgICAgLy8gT3BlbkdMIHZlcnNpb24gMy4yIHVzZXMgR0xTTCB2ZXJzaW9uIDEuNTAuCisg
ICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNMXzE1MF9DT1JFX09V
VFBVVCk7CisKKyAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5H
TCBDb3JlIHByb2ZpbGUsIGFuZCB3ZSBuZWVkIGEgVkFPIGZvciByZW5kZXJpbmcuCisgICAgICAg
IC8vIEEgVkFPIGNvdWxkIGJlIGNyZWF0ZWQgYW5kIGJvdW5kIGJ5IGVhY2ggY29tcG9uZW50IHVz
aW5nIEdMIHJlbmRlcmluZyAoVGV4dHVyZU1hcHBlciwgV2ViR0wsIGV0YykuIFRoaXMgaXMKKyAg
ICAgICAgLy8gYSBzaW1wbGVyIHNvbHV0aW9uOiB0aGUgZmlyc3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgY3JlYXRlZCBvbiBhIEdMQ29udGV4dCB3aWxsIGNyZWF0ZSBhbmQgYmluZCBhIFZBTyBm
b3IgdGhhdCBjb250ZXh0LgorICAgICAgICBHQ0dMaW50IGN1cnJlbnRWQU8gPSBnZXRJbnRlZ2Vy
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpWRVJURVhfQVJSQVlfQklORElORyk7CisgICAgICAg
IGlmICghY3VycmVudFZBTykgeworICAgICAgICAgICAgbV92YW8gPSBjcmVhdGVWZXJ0ZXhBcnJh
eSgpOworICAgICAgICAgICAgYmluZFZlcnRleEFycmF5KG1fdmFvKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBsb3dlciB2ZXJzaW9ucyByZXF1ZXN0IHRoZSBjb21w
YXRpYmlsaXR5IG91dHB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgorICAgICAgICBtX2NvbXBp
bGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF9DT01QQVRJQklMSVRZX09VVFBVVCk7CisK
KyAgICAgICAgLy8gR0xfUE9JTlRfU1BSSVRFIGlzIG5lZWRlZCBpbiBsb3dlciB2ZXJzaW9ucy4K
KyAgICAgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworICAgIH0KKyNlbHNlCisgICAg
Ly8gQWRqdXN0IHRoZSBzaGFkZXIgc3BlY2lmaWNhdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciBH
TEVTMyAoaS5lLiBXZWJHTDIgc3VwcG9ydCkgd2FzIHJlcXVlc3RlZC4KKyNpZiBFTkFCTEUoV0VC
R0wyKQorICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCwg
KGF0dHJpYnV0ZXMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9u
OjpXZWJHTDIpID8gU0hfV0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKKyNlbHNlCisgICAg
bV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBTSF9XRUJHTF9T
UEVDKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAg
ICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgc2g6OkluaXRCdWlsdElu
UmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhBdHRyaWJzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9
IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyA9IGdldEludGVn
ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMpOworICAgIEFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdlcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAg
ICBBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdl
cihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMpOworICAgIEFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdl
cihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAg
IEFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKTsKKwor
ICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzID0gMTsKKworICAgIEdDR0xpbnQgcmFuZ2VbMl0geyB9OworICAgIEdD
R0xpbnQgcHJlY2lzaW9uID0gMDsKKyAgICBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkZSQUdNRU5UX1NIQURFUiwgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKKyAgICBBTkdMRVJlc291cmNlcy5G
cmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0gfHwgcHJlY2lzaW9u
KTsKKworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKworICAg
IDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworfQorCitHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOworICAgIGJv
b2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgYXV0byBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewor
ICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgaWYgKG1fZGVw
dGhCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhC
dWZmZXIpOworCisgICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAg
aWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgOjpnbERlbGV0ZUZy
YW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisjZW5kaWYK
KworI2lmIFVTRShDQUlSTykKKyAgICBpZiAobV92YW8pCisgICAgICAgIGRlbGV0ZVZlcnRleEFy
cmF5KG1fdmFvKTsKKyNlbmRpZgorfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YWtlQ29udGV4dEN1cnJlbnQoKQoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25p
Y29zaWFMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjZWxzZQorICAgIHJldHVybiBtX3Rl
eG1hcExheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCit7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworI2lmIFVTRShP
UEVOR0xfRVMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCisjaWYgUExBVEZPUk0oR1RLKQorRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4
dGVuc2lvbnMpIHsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAvLyBnbEdldFN0cmluZ2kg
aXMgbm90IGF2YWlsYWJsZSBvbiBHTEVTMi4KKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVu
aXF1ZTxFeHRlbnNpb25zR0xPcGVuR0xFUz4odGhpcywgIGZhbHNlKTsKKyNlbHNlCisgICAgICAg
IC8vIEZyb20gT3BlbkdMIDMuMiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJl
IHdlIG11c3QgdXNlIGdsR2V0U3RyaW5naS4KKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVu
aXF1ZTxFeHRlbnNpb25zR0xPcGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJz
aW9uKCkgPj0gMzIwKTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsK
K30KKyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11
bGF0ZUV2ZW50Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCit7Cisg
ICAgaWYgKGV2ZW50ID09IFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVy
ZSkKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQoreworfQorCitzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0
ZWRSZXN1bHRzKCkKK3sKKyAgICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3Qg
Y2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQoreworICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOworCisgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBleHRl
bnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAg
ICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikp
IHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb24pOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0
cnVlLgorICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgc2V0Q29udGV4dEF0dHJp
YnV0ZXMoYXR0cnMpOworICAgIH0KKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmICFtX2lzRm9y
V2ViR0wyKSB7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUiKSkgeworICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0g
ZmFsc2U7CisgICAgICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisKKyNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIFRl
bXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZB
TFNFKTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIs
IEdMX0ZBTFNFKTsKKyNlbmRpZgorCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFs
aWFzKQorICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21w
b3NpdG9yVGV4dHVyZSk7CisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7
CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAg
IGdsRmx1c2goKTsKKworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRl
LmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGVsc2UKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICByZXR1cm47CisjZW5kaWYKKworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsK
KyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zdGF0ZS5ib3VuZFRhcmdldChH
TF9URVhUVVJFMCkgPT0gR0xfVEVYVFVSRV8yRCA/IG1fc3RhdGUuYm91bmRUZXh0dXJlKEdMX1RF
WFRVUkUwKSA6IDApOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVy
ZVVuaXQpOworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIDo6Z2xGbHVzaCgpOworfQorCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHMoKQoreworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAoY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeSgpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9
IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJP
ID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICAgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3
RkJPICE9IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAg
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBp
eGVsc0ZvclBhaW50UmVzdWx0cygpOworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAg
ICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdo
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49
IDApOworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bWFya0NvbnRleHRDaGFuZ2VkKCk7CisKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAg
IG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwor
CisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVT
VCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdM
X0RJVEhFUiwgR0xfRkFMU0UpOworICAgIAorICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNo
YXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKworICAgIC8vIEluaXRpYWxpemUgcmVu
ZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0geyAwLCAwLCAwLCAw
IH0sIGNsZWFyRGVwdGggPSAwOworICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7CisgICAgR0xi
b29sZWFuIGNvbG9yTWFza1tdID0geyBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
IH0sIGRlcHRoTWFzayA9IEdMX1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZm
ZmZmZiwgc3RlbmNpbE1hc2tCYWNrID0gMHhmZmZmZmZmZjsKKyAgICBHTGJpdGZpZWxkIGNsZWFy
TWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9D
TEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
CisgICAgOjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAg
ICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOworCisg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuZGVw
dGgpIHsKKyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFy
RGVwdGgpOworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsK
KyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7
CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBH
TF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNp
bCk7CisgICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2ls
TWFzaykpOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFT
SywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKKyAgICAgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICA6
OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xl
YXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisKKyAgICA6OmdsQ2xlYXIo
Y2xlYXJNYXNrKTsKKworICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29s
b3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIDo6Z2xDb2xvck1hc2so
Y29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsK
KyAgICBpZiAoYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNr
KTsKKyAgICB9CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbENsZWFyU3Rl
bmNpbChjbGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9G
Uk9OVCwgc3RlbmNpbE1hc2spOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9C
QUNLLCBzdGVuY2lsTWFza0JhY2spOworICAgIH0KKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKworICAgIGF1dG8gZXJyb3IgPSA6OmdsR2V0
RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0coV2ViR0wsICJGYXRhbDogT3BlbkdMIGVycm9yIGR1cmluZyBHcmFwaGljc0NvbnRleHRH
TCBidWZmZXIgaW5pdGlhbGl6YXRpb24gKCVkKS4iLCBlcnJvcik7CisgICAgICAgIGZvcmNlQ29u
dGV4dExvc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIDo6Z2xGbHVzaCgpOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQ
bGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNo
YWRlcikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVy
dGV4U2hhZGVyKSk7CisgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdt
ZW50U2hhZGVyKSk7CisgICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50
RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisK
KyAgICBIYXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdz
OworICAgIGZvciAoY29uc3QgYXV0byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWlu
Z01hcCkgeworICAgICAgICBjb25zdCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wu
a2V5OworICAgICAgICAvLyBUaGUgdmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBl
YWNoIGluZGV4IG9mIGFuIGFycmF5IHZhcmlhYmxlLgorICAgICAgICAvLyBXZSBvbmx5IHdhbnQg
YSBzaW5nbGUgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBhcnJheS4KKyAgICAgICAgaWYgKHN5
bWJvbE5hbWUuZW5kc1dpdGgoIl0iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIERvbid0IGNvdW50IGJ1aWx0IGluIHZhcnlpbmdzLgorICAgICAgICBpZiAoc3ltYm9sTmFt
ZSA9PSAiZ2xfRnJhZ0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwg
c3ltYm9sTmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWlu
Z01hcC5maW5kKHN5bWJvbE5hbWUpOworICAgICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJh
Z21lbnRFbnRyeS52YXJ5aW5nTWFwLmVuZCgpKQorICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5n
cy5hZGQoc3ltYm9sTmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZhbHVlKTsKKyAgICB9CisKKyAgICBz
aXplX3QgbnVtVmFyeWluZ3MgPSBjb21iaW5lZFZhcnlpbmdzLnNpemUoKTsKKyAgICBpZiAoIW51
bVZhcnlpbmdzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN0ZDo6dmVjdG9yPHNoOjpT
aGFkZXJWYXJpYWJsZT4gdmFyaWFibGVzOworICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVk
VmFyeWluZ3Muc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBj
b21iaW5lZFZhcnlpbmdzLnZhbHVlcygpKQorICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZh
cnlpbmdTeW1ib2wpOworCisgICAgR0NHTGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7CisjaWYg
VVNFKE9QRU5HTF9FUykKKyAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywg
Jm1heFZhcnlpbmdWZWN0b3JzKTsKKyNlbHNlCisgICAgaWYgKG1faXNGb3JXZWJHTDIpCisgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1Zl
Y3RvcnMpOworICAgIGVsc2UgeworICAgICAgICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMgPSAw
OworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFy
eWluZ0Zsb2F0cyk7CisgICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0
cyAvIDQ7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0
IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Cisg
ICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Cisg
ICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRl
eFNoYWRlciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisKKyAgICBIYXNoTWFwPFN0
cmluZywgc2g6OkdMZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOworCisgICAgZm9yIChj
b25zdCBhdXRvJiBlbnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKKyAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OworICAgICAgICB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1l
LmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNp
b24pOworICAgIH0KKworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5
LnVuaWZvcm1NYXApIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBl
bnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOworICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhT
eW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5j
X3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSk7CisgICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wg
IT0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUg
IT0gZW50cnkudmFsdWUuZ2V0KCkucHJlY2lzaW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCA9IHRleHR1cmU7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChw
cm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Cisg
ICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICA6Omds
QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJpbmRCdWZmZXIodGFy
Z2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHTHVp
bnQgZmJvOworICAgIGlmIChidWZmZXIpCisgICAgICAgIGZibyA9IGJ1ZmZlcjsKKyAgICBlbHNl
CisgICAgICAgIGZibyA9IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlz
YW1wbGVGQk8gOiBtX2Zibyk7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUik7
CisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKKyAgICBpZiAoZmJvICE9IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gZmJvOworICAgIH0KK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRh
cmdldCwgcmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0
dXJlLCB0YXJnZXQpOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVk
LCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJs
ZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9y
LCBHQ0dMZW51bSBkZmFjdG9yKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9
ICAgICAgIAorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0
ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdD
R0xlbnVtIGRzdEFscGhhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwg
c3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1
c2FnZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEsIHVzYWdlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnRwdHIgb2Zmc2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQnVmZmVy
U3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOworfQorCitH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
Q0dMZW51bSB0YXJnZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCisgICAgcmV0dXJuIDo6Z2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYg
YiwgR0NHTGNsYW1wZiBhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
Q2xlYXIobWFzayk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ2xlYXJTdGVuY2ls
KHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJv
b2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xl
YW4gYWxwaGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBp
bmcuIER1ZSB0byB0aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKKyAgICAvLyBw
b2ludCBhIGdsb2JhbCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0Lgor
ICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVz
b3VyY2VzKCk7CisgICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFO
R0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rp
b24gPSBuYW1lSGFzaEZvclNoYWRlcjsKKworICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJz
KQorICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVI
YXNoPigpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZv
clNoYWRlcnMuZ2V0KCkpOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKKworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25z
LT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKKworICAgIEFOR0xFUmVz
b3VyY2VzLkhhc2hGdW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOworICAgIG1fY29tcGls
ZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Uu
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0
ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7CisgICAgY29u
c3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRh
dGEoKTsKKyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJD
U3RyaW5nLmxlbmd0aCgpOworCisgICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNo
YWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxu
IiwgZ2V0U2hhZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKFdlYkdM
LCAiLS0tIGJlZ2luIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRy
YW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKKworICAg
IDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5z
bGF0ZWRTaGFkZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7
CisgICAgCisgICAgaW50IGNvbXBpbGVTdGF0dXM7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2
KHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKKworICAgIFNoYWRlclNv
dXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICAv
LyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpn
bEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAg
IGlmIChsZW5ndGgpIHsKKyAgICAgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICAgICAgVmVjdG9y
PEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgICAgICBQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgICAgICBlbnRyeS5sb2cgPSBnZXRV
bm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwor
ICAgIH0KKworICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKKyAgICAgICAgZW50
cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRy
YW5zbGF0b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUu
Iik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hh
ZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEhhc2hNYXA8UGxhdGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFk
ZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgY29uc3QgQ1N0cmlu
ZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7CisgICAgY29uc3Qg
Y2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7CisgICAg
aW50IHNoYWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7CisK
KyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xu
LS0tIGVuZCBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7CisK
KyAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRl
clNvdXJjZUxlbmd0aCk7CisKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgICAg
aW50IGNvbXBpbGVTdGF0dXM7CisKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxF
X1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xf
VFJVRSkgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgTE9HKFdlYkdM
LCAiRGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBzdWNjZWVkZWQuIik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJF
cnJvcjogZGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7CisgICAgfQorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVCht
X3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0
dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJP
KSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Cisg
ICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ3VsbEZh
Y2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhH
Q0dMZW51bSBmdW5jKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xEZXB0aE1h
c2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRl
cihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQorewor
ICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbERldGFjaFNoYWRlcihwcm9n
cmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxl
KEdDR0xlbnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsRGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwg
R0NHTHNpemVpIGNvdW50KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cisg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludHB0ciBvZmZzZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSkpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWlu
dCBpbmRleCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGaW5pc2goKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGbHVzaCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CisgICAgOjpnbEdl
dFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhB
dHRyaWJ1dGVTaXplKTsKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUp
OyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5h
dGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOwor
ICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGlu
ZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRh
dGEoKSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBT
SEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5n
dGgpKTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUu
ZGF0YSgpLCBuYW1lTGVuZ3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBp
bmcgYWN0aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4
LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7
CisjZW5kaWYKKworICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKKyAgICBpbmZvLnR5cGUg
PSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdD
R0xpbnQgc3ltYm9sQ291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5
bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywg
JnN5bWJvbENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hhZGVyU3ltYm9s
Q291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDR0x1aW50IHJhd0lu
ZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcFtpbmRleF0gOiAtMTsKKworICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dy
YW0sIHJhd0luZGV4LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dy
YW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNp
emUpOworCisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FD
VElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBH
THNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdMZW51bSB0
eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5p
Zm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBp
ZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcg
b3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xf
VFlQRV9VTklGT1JNLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKKyAgICAKKyNp
Zm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVu
Z3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZv
cm0gJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRm
OCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgCisg
ICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAg
aW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdDR0xpbnQgc3ltYm9s
Q291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5m
aW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHBy
b2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7
CisgICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJv
Z3JhbSk7CisgICAgfQorICAgIAorICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9s
Q291bnRzID0gcmVzdWx0LT52YWx1ZTsKKyAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8
IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBz
eW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsK
KyAgICAKKyAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgs
IGluZm8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNo
YWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xz
aXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9n
cmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKK30KKworc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG5hbWU7CisgICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFt
ZS51dGY4KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygi
d2ViZ2xfIiwgaGV4KG51bWJlciwgTG93ZXJjYXNlKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VN
YXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xU
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1h
cC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8m
IHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGF1
dG8gc3ltYm9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoc3ltYm9sRW50
cnkgPT0gc3ltYm9sTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgYXV0byYgbWFwcGVkTmFtZSA9IHN5bWJvbEVudHJ5LT52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OworICAgIHJldHVybiBTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0
aCgpKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xO
YW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJv
bFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwor
ICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIGZvciAoR0NHTHNpemVp
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBw
ZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsK
KyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52
YWx1ZSgpOworICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRl
ZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgorICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRT
aGFkZXJNYXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVy
TWFwLmVuZCgpKSB7CisgICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7
CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFw
KGxpbmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFw
cGVkTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgICAg
IG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJz
LnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoc3lt
Ym9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkg
YmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCisgICAg
ICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIg
cHJvZ3JhbS4KKyAgICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCisgICAgICAgICAg
ICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwor
ICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFk
ZXJzLmdldCgpKTsKKworICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hl
ZE5hbWUobmFtZSk7CisKKyAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51
bGxwdHIpOworCisgICAgICAgIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVy
YXRlZE5hbWUsIG5hbWUpOworCisgICAgICAgIHJldHVybiBnZW5lcmF0ZWROYW1lOworICAgIH0K
KworICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9
IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGZvciAoY29uc3QgYXV0
byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9s
RW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQorICAgICAgICAgICAgcmV0dXJu
IHN5bWJvbEVudHJ5LmtleTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7CisgICAgCisgICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNo
YWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYg
KG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsK
KyAgICB9CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNo
YWRlcnMgYWZ0ZXIgbGlua2luZy4KKyAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFw
LmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQo
KSkgeworICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOworICAgICAg
ICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlu
a2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5h
bE5hbWUpCisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgICAg
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hh
ZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1l
KQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgIH0KKworICAg
IGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0
aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxl
ZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55
IHNoYWRlciBwcm9ncmFtLgorCisgICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2li
bHlVbnVzZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGNhY2hlZCAhPSBt
X3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZC0+dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK1N0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAo
c2l6ZV90IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4o
U0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTaGFkZXJTb3Vy
Y2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tp
XSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25z
dCBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0
YXRpY19jYXN0PGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7CisgICAg
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZS5jX3N0cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuYW1lOworfQorCitp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkK
KyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJv
bE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAg
TE9HKFdlYkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJu
IDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkp
OworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGly
ZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICByZXR1cm4gOjpnbEdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIFNldCBhbiBhcmJpdHJh
cnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCisgICAgLy8g
YSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIg
dGhlIGVycm9yLgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdl
IGdvdCBOT19FUlJPUi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsK
KyAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJv
ciA9PSBOT19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOworICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBtb3ZlZEFuRXJyb3I7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRFcnJvcigpCit7CisgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUg
c3ludGhldGljIGVycm9yIGxpc3QgaW4gY2FzZQorICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFs
cmVhZHkgdGhlcmUsIHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCisgICAgICAg
IC8vIGdsR2V0RXJyb3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3Ig
Y29kZSBvbmNlLgorICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAg
ICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOworICAgIH0KKworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKKworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBy
ZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmco
bmFtZSkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKwor
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KworICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVi
dWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30K
KworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30KKwor
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVy
RVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRl
cikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1NoYWRl
cihzaGFkZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRl
eHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7
CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworCisgICAgR0NHTHNpemVpIGNvdW50ID0gMDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICBpZiAoY291bnQgPT0gMikKKyAgICAgICAg
bV9saW5rZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0s
IHNoYWRlcnNbMV0pKTsKKworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQgcGFyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3Rvciwg
R0NHTGZsb2F0IHVuaXRzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBm
IHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBp
bnZlcnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKworICAgIFNoYWRlclNvdXJjZUVudHJ5
IGVudHJ5OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9zaGFkZXJTb3Vy
Y2VNYXAuc2V0KHNoYWRlciwgV1RGTW92ZShlbnRyeSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NH
THVpbnQgbWFzaykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3Rl
bmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVu
Y2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NH
TGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2ls
T3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRl
cmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUs
IGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZv
cm0yZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZihs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBh
cnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2Z2
KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGludCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24s
IGFycmF5LmJ1ZlNpemUsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2
MSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbnQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0z
aShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
YXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNp
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9y
bTRpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJh
eSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJy
YXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAx
NikpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRy
YW5zcG9zZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVc2VQcm9ncmFtKHBy
b2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0LCAxPiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRh
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NH
THVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRy
aWIyZihpbmRleCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBp
bmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVy
dGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdCwgMz4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXku
ZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYy
LCBHQ0dMZmxvYXQgdjMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2
Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkg
c3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRl
eCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWln
aHQpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVWZXJ0ZXhBcnJheSgpCit7CisgICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0
ZXhBcnJheU9FUygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVW
ZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQoreworICAgIGdldEV4dGVuc2lvbnMo
KS5kZWxldGVWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit7
CisgICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3Jt
R0xPYmplY3QgYXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmJpbmRWZXJ0ZXhBcnJheU9F
UyhhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEJv
b2xlYW52KHBuYW1lLCB2YWx1ZS5kYXRhKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lKQoreworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dM
U3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmRhdGEp
OworfQorCitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChH
Q0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0NHTGludDY0IHZh
bHVlID0gMDsKKyAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11
c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0
aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAgIC8vIDo6
Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitH
Q0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0g
cG5hbWUsIEdDR0x1aW50IGluZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAg
VU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7CisgICAgLy8gRklYTUUg
MTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRv
IHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRl
eHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KKyAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1l
LCBpbmRleCwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQoreworICAg
IEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVCkKKyAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5D
SUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwor
ICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBH
Q0dMaW50IHZhbHVlID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAm
dmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChBQ1RJ
VkVfQVRUUklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAh
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICAqdmFsdWUg
PSByZXN1bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0
aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkpOworICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYg
c3ltYm9sQ291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFt
KS0+dmFsdWU7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxk
IGEgZmlsdGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcgb2YKKyAgICAvLyBvdXIgaW50ZXJuYWwg
YXR0cmlidXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUg
T3BlbkdMLgorICAgIEdDR0xpbnQgYXR0cmlidXRlQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7CisgICAg
Zm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICBB
Y3RpdmVJbmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwg
aW5mbyk7CisgICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0
dHJpYnV0ZUluZGV4TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gRG8gdGhlIHNh
bWUgZm9yIHVuaWZvcm1zLgorICAgIEdDR0xpbnQgdW5pZm9ybUNvdW50ID0gMDsKKyAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Cisg
ICAgZm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICAgICAg
QWN0aXZlSW5mbyBpbmZvOworICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBp
LCBpbmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVk
VG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAqdmFs
dWUgPSBzeW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBM
T0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEo
KSk7CisKKyAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAx
MjM0NTY3ODlhYmNkZWZBQkNERUZdKyIpOworCisgICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRM
b2c7CisgICAgCisgICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8g
dGhlIHNoYWRlciBzb3VyY2UgdGhhdAorICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBj
b21waWxlcnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKKyAgICAvLyB0aGlzIHdhcm5pbmcg
dG8gdGhlIHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAorICAgIC8v
IGlzIGNhdXNpbmcgaXQuCisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
YW5nbGVXYXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRl
cjUnIGlzIG5vdCBzdXBwb3J0ZWRcbiJfcyB9OworICAgIGludCBzdGFydEZyb20gPSBsb2cuc3Rh
cnRzV2l0aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsK
KyAgICBpbnQgbWF0Y2hlZExlbmd0aCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGludCBzdGFy
dCA9IHJlZ0V4cC5tYXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOworICAgICAg
ICBpZiAoc3RhcnQgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwcm9jZXNz
ZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkp
OworICAgICAgICBzdGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7CisKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hl
ZExlbmd0aCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3lt
Ym9sTmFtZShzaGFkZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7CisgICAgICAgIExPRyhXZWJH
TCwgIkRlbWFuZ2xpbmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBt
YXBwZWRTeW1ib2wudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQo
bWFwcGVkU3ltYm9sKTsKKyAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+
KGxvZy5sZW5ndGgoKSkpOworCisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5n
KHN0YXJ0RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2ViR0ws
ICJVbm1hbmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBH
TGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5m
byhsZW5ndGgpOworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZz
aXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBHQ0dMc2l6ZWkgY291bnQ7CisgICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAm
Y291bnQsIHNoYWRlcnMpOworCisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVy
cywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQorCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xH
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAg
IHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
QVNTRVJUKHNoYWRlcik7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisKKyAgICBjb25zdCBhdXRv
JiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgCisgICAgc3dp
dGNoIChwbmFtZSkgeworICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKKyAgICBjYXNlIFNIQURFUl9U
WVBFOgorICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgJnZhbHVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIElORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIp
Lmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RI
OgorICAgICAgICB2YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX0VOVU0pOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgY29u
c3QgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBpZiAoIWVu
dHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBHTGludCBsZW5n
dGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwg
Jmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisK
KyAgICBHTHNpemVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsK
KyAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0
YSgpKTsKKworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07
CisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8u
ZGF0YSgpLCBzaXplKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFk
ZXIpOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3Vy
Y2U7Cit9CisKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1l
dGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEdDR0xmbG9hdCB2
YWx1ZSA9IDAuZjsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7
CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldFVuaWZvcm1p
dihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5p
Zm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVk
U3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7Cisg
ICAgTE9HKFdlYkdMLCAiOjpnZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1
cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCitHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHZvaWQq
IHBvaW50ZXIgPSAwOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5h
bWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBwaXhlbHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgaWYgKHR5cGUgPT0gSEFMRl9G
TE9BVF9PRVMpCisgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgorCisg
ICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUg
Zm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2lu
ZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVlZAorICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBh
cyB3ZSBkbyBpbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgorICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEFMUEhBOgorICAgICAgICAgICAgLy8g
V2UgYXJlIHVzaW5nIEdMX1JFRCB0byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdl
bGwuCisgICAgICAgICAgICBmb3JtYXQgPSBSRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xf
UkcgdG8gYmFjayBHTF9MVU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAg
ICAgICAgICAgIGZvcm1hdCA9IFJHOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1F
OiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGlu
ZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4K
KyAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvbXByZXNzZWRUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKworUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdWludCBv
ID0gMDsKKyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAg
IHJldHVybiBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVy
KCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwor
ICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVNoYWRl
cigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVS
VEVYX1NIQURFUik7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuVGV4dHVyZXMo
MSwgJm8pOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7CisgICAgcmV0dXJu
IG87Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3Jt
R0xPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8pIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3Qg
Z29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2luZworICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVy
IGl0IGdldHMgZGVsZXRlZC4KKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAw
KTsKKyAgICB9CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3Zl
KHByb2dyYW0pOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
cmVuZGVyYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0
byYga2V5VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRl
eHR1cmU7CisgICAgfSk7CisgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3Ip
Cit7CisgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhl
dGljIGVycm9yIGxpc3QgdG8KKyAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBz
byBhIGNhbGxlciB0byBnZXRFcnJvciB3aWxsIGdldAorICAgIC8vIGFueSBlcnJvcnMgZnJvbSBn
bEVycm9yIGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemluZy4KKyAgICBtb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJy
b3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0
KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQor
ICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQoKQoreworICAgIGZvciAoYXV0byogY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRl
eHQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0
Q2hhbmdlZE5vdGlmaWNhdGlvbigpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9W
ZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1v
ZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkK
K3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZp
cnN0LCBjb3VudCwgcHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKKyAg
ICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQorewor
ICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlz
b3IpOworfQorCisjaWYgSEFWRShPUEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRl
eCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4KGluZGV4KTsKK30KKyNlbmRpZgorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29u
c3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgbGVuZ3RoKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKKyAgICBVTlVTRURfUEFSQU0odXNhZ2UpOworICAgIFVOVVNFRF9QQVJBTShzcmNP
ZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBk
c3RCeXRlT2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdD
R0x1aW50IGxlbmd0aCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oZHN0Qnl0ZU9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY0RhdGEpOworICAgIFVO
VVNFRF9QQVJBTShzcmNPZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCisj
aWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xl
bnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVP
ZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFy
Z2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOworfQorI2Vs
c2UKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xl
bnVtLCBHQ0dMZW51bSwgR0NHTGludHB0ciwgR0NHTGludHB0ciwgR0NHTHNpemVpcHRyKQorewor
fQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+
IGRhdGEpCit7CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgR0NHTHZvaWQq
IHB0ciA9IDo6Z2xNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBH
cmFwaGljc0NvbnRleHRHTDo6TUFQX1JFQURfQklUKTsKKyAgICBpZiAoIXB0cikKKyAgICAgICAg
cmV0dXJuOworICAgIG1lbWNweShkYXRhLmRhdGEsIHB0ciwgZGF0YS5idWZTaXplKTsKKyAgICBp
ZiAoITo6Z2xVbm1hcEJ1ZmZlcih0YXJnZXQpKQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oZGF0YSk7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50
IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dM
aW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmls
dGVyKQoreworICAgIFVOVVNFRF9QQVJBTShzcmNYMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kw
KTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWDEpOworICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGRzdFgwKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTApOworICAgIFVO
VVNFRF9QQVJBTShkc3RYMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAgICBVTlVTRURf
UEFSQU0obWFzayk7CisgICAgVU5VU0VEX1BBUkFNKGZpbHRlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IGxheWVyKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAg
IFVOVVNFRF9QQVJBTShhdHRhY2htZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dHVyZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMpCit7CisgICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQor
eworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50
cyk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVT
RURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3JjKTsKK30KKworI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdM
X0VTXzMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKQoreworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldElu
dGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5V
U0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAg
IFVOVVNFRF9QQVJBTShidWZTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKKyNlbmRp
ZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZCht
X3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisjZWxzZQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSwgR0NHTGVudW0sIEdD
R0xlbnVtLCBHQ0dMU3BhbjxHQ0dMaW50PikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9m
ZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2
ZWwpOworICAgIFVOVVNFRF9QQVJBTSh4b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeW9mZnNl
dCk7CisgICAgVU5VU0VEX1BBUkFNKHpvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAg
ICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURf
UEFSQU0oaGVpZ2h0KTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKG5h
bWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCit7CisgICAgVU5VU0VE
X1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odjApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50
IHYwLCBHQ0dMdWludCB2MSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2
MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7CisgICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAgICBVTlVTRURfUEFSQU0odjEpOworICAgIFVO
VVNFRF9QQVJBTSh2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWlu
dCB2MiwgR0NHTHVpbnQgdjMpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBV
TlVTRURfUEFSQU0odjApOworICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5VU0VEX1BBUkFN
KHYyKTsKKyAgICBVTlVTRURfUEFSQU0odjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShs
b2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRh
dGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBV
TlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
ZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0
cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAg
IFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwor
ICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50
IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VE
X1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh6KTsKKyAgICBVTlVTRURfUEFSQU0odyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVT
RURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBH
Q0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQoreworICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJB
TSh5KTsKKyAgICBVTlVTRURfUEFSQU0oeik7CisgICAgVU5VU0VEX1BBUkFNKHcpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwg
R0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRy
IG9mZnNldCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShz
aXplKTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0cmlkZSk7
CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBH
Q0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAgIFVOVVNFRF9QQVJBTShzdGFy
dCk7CisgICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAg
ICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdD
R0xlbnVtPiBidWZzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xp
bnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQoreworICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBV
TlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xT
cGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7
CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xl
bnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0o
ZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50
IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQoreworICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBV
TlVTRURfUEFSQU0oZGVwdGgpOworICAgIFVOVVNFRF9QQVJBTShzdGVuY2lsKTsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorewor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVR
dWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQoreworICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7
Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRm
b3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVy
eShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQoreworICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQorewor
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisKKyAg
ICByZXR1cm4gMDsKK30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1
ZXJ5T2JqZWN0dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIHJl
dHVybiAwOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTYW1wbGVyKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBV
TlVTRURfUEFSQU0oc2FtcGxlcik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odW5pdCk7CisgICAgVU5VU0VE
X1BBUkFNKHNhbXBsZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1w
bGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURf
UEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2Ft
cGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0o
cGFyYW0pOworfQorCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBs
ZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Cisg
ICAgcmV0dXJuIDAuZjsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFt
ZSkKKworeworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5h
bWUpOworICAgIHJldHVybiAwOworfQorCitHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQorewor
ICAgIFVOVVNFRF9QQVJBTShjb25kaXRpb24pOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisK
KyAgICByZXR1cm4gMDsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzU3luYyhHQ0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
U3luYyhHQ0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKK30KKworR0NH
TGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5
bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIFVOVVNF
RF9QQVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJB
TSh0aW1lb3V0KTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xp
bnQ2NCB0aW1lb3V0KQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFS
QU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsKK30KKworR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5h
bWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
CisgICAgcmV0dXJuIDA7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxh
dGZvcm1HTE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaWQpOworfQorCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9y
bUdMT2JqZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTShpZCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVk
YmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgaWQpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRp
dmVNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShwcmltaXRpdmVNb2RlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQoreworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBH
Q0dMZW51bSBidWZmZXJNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBV
TlVTRURfUEFSQU0odmFyeWluZ3MpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXJNb2RlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
KQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRi
YWNrKCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNm
b3JtRmVlZGJhY2soKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
QnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWlu
dCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dM
c2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJB
TShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShzaXplKTsKK30KKworVmVjdG9yPEdDR0x1aW50
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQoreworICAg
IFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybU5hbWVzKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25z
dCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVmVjdG9yPEdDR0xpbnQ+IHJlc3VsdCh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOworI2lm
IEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCisgICAgQVNTRVJUKHByb2dyYW0p
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5z
aXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHJlc3VsdC5kYXRhKCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
KyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0dDR0x1aW50IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJv
Z3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja05hbWUpOworICAgIHJldHVybiAw
OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1C
bG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJ
bmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVu
aWZvcm1CbG9ja0luZGV4KTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tCaW5kaW5nKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURf
UEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tC
aW5kaW5nKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMo
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJB
TSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGZv
cm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxv
Y2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
cHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICBVTlVT
RURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSAs
IEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtLCBH
Q0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVt
LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
aW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NH
TGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51
bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQorewor
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
Tik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0lu
c3RhbmNlZEFOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48
Y29uc3QgR0NHTHNpemVpPiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQor
eworICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1l
bnRzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTHNpemVpKQoreworICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NH
TGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQoreworICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNh
ZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKK3sK
KyAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIg
fHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOworICAgIFVu
aXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CisgICAgdW5zaWduZWQgc2l6ZSA9IDA7Cisg
ICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CisgICAgICAgIFBpeGVsU3RvcmVQYXJh
bXMgcGFyYW1zOworICAgICAgICBwYXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50Owor
ICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7
CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVk
IGNoYXI+KHNpemUpOworICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwg
c2l6ZSk7CisgICAgfQorICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4oemVy
by5nZXQoKSwgc2l6ZSkpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTEwMyw2
ICszMTc3LDYgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW4KICAgICByZXR1cm4gcmVhZENvbXBv
c2l0ZWRSZXN1bHRzKCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30KIAotI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDZjODFlYTdhODg5NTQwZDUz
ZTA2NWQ0NTM0YjQ2OTU2ZjIwY2ZhMWYuLmJhOWQ1YWY5MGQ3NDg1YTc2NDM1NjkyZGI1NjBhYmJl
OWQ4MTUwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC0yNSw1MyAr
MjUsMTcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoV0VCR0wpCisjaWYgRU5BQkxF
KFdFQkdMKSAmJiAhVVNFKEFOR0xFKQogCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIK
KyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKICNpbmNs
dWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCIKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIK
LSNlbmRpZgotCi0jaWYgVVNFKENBKQotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgotI2Vu
ZGlmCi0KLSNpZiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiQU5HTEVVdGlsaXRpZXMuaCIKLSNlbHNl
Ci0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xP
cGVuR0xDb21tb24uaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIlNj
b3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QuaCIKLSNlbmRpZgotCi0vLyBGSVhNRTogRmlu
ZCBhIGJldHRlciB3YXkgdG8gYXZvaWQgdGhlIG5hbWUgY29uZmxpY3Rpb24gZm9yIE5PX0VSUk9S
LgotI2lmIFBMQVRGT1JNKFdJTikKLSN1bmRlZiBOT19FUlJPUgotI2VsaWYgUExBVEZPUk0oR1RL
KQotLy8gVGhpcyBkZWZpbmUgaXMgZnJvbSB0aGUgWDExIGhlYWRlcnMsIGJ1dCBpdCdzIHVzZWQg
YmVsb3csIHNvIHdlIG11c3QgdW5kZWZpbmUgaXQuCi0jdW5kZWYgVkVSU0lPTgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShDT0NPQSkKLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLU9CSkNfQ0xBU1MgV2Vi
R0xMYXllcjsKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQogI2lmIFVTRShOSUNPU0lBKQog
bmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgR0NHTExheWVyOwpAQCAtODAsOSArNDQsNyBAQCBj
bGFzcyBHQ0dMTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV4dGVuc2lvbnNH
TDsKLSNpZiBVU0UoQU5HTEUpCi1jbGFzcyBFeHRlbnNpb25zR0xBTkdMRTsKLSNlbGlmIFVTRShP
UEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVT
OwogI2VsaWYgVVNFKE9QRU5HTCkKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTDsKQEAgLTk3LDI4
ICs1OSwxMSBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAKIHR5cGVk
ZWYgSGFzaE1hcDxDU3RyaW5nLCB1aW50NjRfdD4gU2hhZGVyTmFtZUhhc2g7CiAKKy8vIEJhc2Ug
Y2xhc3MgZm9yIEdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIE9wZW5HTCBvciBP
cGVuR0wgRVMuCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCA6
IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTAogewogcHVibGljOgogICAgIHZpcnR1YWwgfkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKCk7Ci0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0IG92ZXJyaWRlOwotI2lmIFVTRShBTkdMRSkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdDsKLSAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Q7Ci0gICAgR0NHTGVudW0g
ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICBzdGF0aWMgR0NHTGVudW0gZHJhd2lu
Z0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2lu
Z1RhcmdldCk7Ci0gICAgc3RhdGljIEdDR0xpbnQgRUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOwotICAgIGVudW0gY2xh
c3MgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgewotICAgICAgICAvLyBSZWxlYXNlcyBj
dXJyZW50IGNvbnRleHQgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgY2FsbHMgZG9uZSBp
biB0aGUgdGhyZWFkLgotICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCi0gICAgICAgIC8v
IFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMIGNhbGxzIGRvbmUgaW4gdGhlIHRocmVhZC4KLSAgICAgICAgUmVsZWFzZVRocmVhZFJlc291
cmNlcywKLSAgICAgICAgLy8gUmVsZWFzZXMgYWxsIGdsb2JhbCBzdGF0ZS4gU2hvdWxkIGJlIHVz
ZWQgb25seSBhZnRlciBhbGwgZGVwZW5kaW5nIG9iamVjdHMgaGF2ZQotICAgICAgICAvLyBiZWVu
IHJlbGVhc2VkLgotICAgICAgICBUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzCi0g
ICAgfTsKLSAgICBzdGF0aWMgYm9vbCByZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJl
YWRSZXNvdXJjZUJlaGF2aW9yKTsKLSNlbmRpZgogCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5n
IG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBw
cmVwYXJlVGV4dHVyZSgpOwpAQCAtMTMyLDE1ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBFcXVp
dmFsZW50IHRvIDo6Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBwaXhlbHM9PTAgd2l0aCBubyBhbGxv
Y2F0aW9uLgogICAgIHZvaWQgdGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CiAKLSNpZiAhVVNFKEFOR0xFKQotICAgIC8vIEhlbHBl
ciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXpl
ZCB0byAwLgotICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVk
LgotICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQg
c2V0dGluZy4KICAgICBib29sIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMaW50IGFsaWdubWVudCA9IDQpOwotI2VuZGlmCiAKICAgICBib29sIGlz
R0xFUzJDb21wbGlhbnQoKSBjb25zdCBmaW5hbDsKLQogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg
IC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCiAgICAgLy8KQEAgLTIwNiw5ICsxNDUsNyBAQCBw
dWJsaWM6CiAgICAgR0NHTGludDY0IGdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CiAgICAgR0NHTGludDY0IGdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGlu
ZGV4KSBmaW5hbDsKICAgICBHQ0dMaW50IGdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwotI2lmICFVU0UoQU5HTEUpCiAgICAgdm9pZCBn
ZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAg
ICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwogICAg
IFN0cmluZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3RbMl0sIEdDR0xzaXpl
aSwgY29uc3QgU3RyaW5nJik7CiAgICAgR0NHTGludCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwpAQCAtMjg2LDEwICsyMjMs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCkgZmlu
YWw7CiAgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7Ci0j
aWYgIVVTRShBTkdMRSkKICAgICBib29sIGNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xP
YmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25z
dDsKICAgICBib29sIHByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRl
ciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7Ci0jZW5kaWYKIAogICAg
IHZvaWQgdmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4KSBmaW5hbDsK
ICAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0LCAxPiB2YWx1ZXMpIGZpbmFsOwpAQCAtMzE3LDEwICsyNTIsOCBAQCBwdWJsaWM6
CiAKICAgICAvLyA9PT09PT09PT09IFdlYkdMMiBlbnRyeSBwb2ludHMuCiAKLSNpZiAhVVNFKEFO
R0xFKQogICAgIHZvaWQgYnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNvbnN0IHZvaWQqIGRh
dGEsIEdDR0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxlbmd0aCk7
CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RC
eXRlT2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1
aW50IGxlbmd0aCk7Ci0jZW5kaWYKICAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVt
IHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQs
IEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKSBmaW5hbDsKIAogICAg
IHZvaWQgZ2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0
LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CkBAIC00NDUsOSArMzc4LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIm
KSBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENvbXBvc2l0ZWRSZXN1
bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImKSBmaW5hbDsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQotICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFT
YW1wbGUoKSBmaW5hbDsKLSNlbmRpZgogCiAgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwogICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CkBAIC00NTYsOSAr
Mzg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgcHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50
KTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBkaXNwbGF5V2FzUmVj
b25maWd1cmVkKCk7Ci0jZW5kaWYKIAogICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9v
bCkgZmluYWw7CiAKQEAgLTQ4NCwxMiArNDExLDggQEAgcHVibGljOgogICAgIC8vIGFsbCBtZXRo
b2RzIGl0IGNvbnRhaW5zIG1heSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0ZWQgb24gdGhlCiAgICAg
Ly8gY3VycmVudCBoYXJkd2FyZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnNHTDo6c3VwcG9ydHMoKSB0
bwogICAgIC8vIGRldGVybWluZSB0aGlzLgotI2lmICFVU0UoQU5HTEUpCiAgICAgLy8gVXNlIGNv
dmFyaWFudCByZXR1cm4gdHlwZSBmb3IgT1BFTkdML09QRU5HTF9FUwogICAgIEV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbiYgZ2V0RXh0ZW5zaW9ucygpIGZpbmFsOwotI2Vsc2UKLSAgICBFeHRlbnNp
b25zR0wmIGdldEV4dGVuc2lvbnMoKSBmaW5hbDsKLSNlbmRpZgogCiAgICAgdm9pZCBzaW11bGF0
ZUV2ZW50Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcpIG92ZXJyaWRlOwogCkBA
IC00OTcsMzEgKzQyMCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5
KCkgb3ZlcnJpZGU7CiAKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0g
ICAgR3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBzdGF0
aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYs
IFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4
dCYpOwotCi0jaWYgVVNFKEFOR0xFKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlz
cGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQTEFZOwotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgbG93
UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5cGUsIC0xKTsKLSAgICBj
b25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQZXJmb3JtYW5jZURpc3Bs
YXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwotI2VuZGlmCi0jZW5kaWYK
LQogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgR3JhcGhpY3NDb250ZXh0
R0xJT1N1cmZhY2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47Ci0gICAgRUdMRGlzcGxheSBtX2Rpc3Bs
YXlPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRl
eHRPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBt
X2NvbmZpZ09iaiB7IG51bGxwdHIgfTsKLSNlbmRpZgorCiAgICAgR0NHTHVpbnQgbV90ZXh0dXJl
IHsgMCB9OwogCi1wcml2YXRlOgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGlj
IGVudHJ5IHBvaW50cyB0aGF0IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgLy8gQ2FsbGVk
IG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIG9mIEV4dGVuc2lvbnNHTCB0aGF0
IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBX
QVJOX1VOVVNFRF9SRVRVUk47CkBAIC01NDcsMjQgKzQ1MCw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmID0gSW50UmVj
dCgpKTsKICAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1
aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwog
Ci0jaWYgVVNFKEFOR0xFKQotICAgIGJvb2wgcmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCk7
Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7Ci0gICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7Ci0gICAg
c3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXks
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEU7Ci0jZW5kaWYKLSNpZiBVU0UoQU5HTEUpCi0gICAgLy8gUmV0dXJucyBm
YWxzZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgotICAgIGJvb2wg
d2FpdEFuZFVwZGF0ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgLy8g
UGxhdGZvcm0gc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKLSAgICBz
dGF0aWMgdm9pZCBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKLSNlbmRpZgogCi0j
aWYgIVVTRShBTkdMRSkKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBVbmlxdWVSZWY8c2g6
OlNoYWRlclZhcmlhYmxlPj4gU2hhZGVyU3ltYm9sTWFwOwogCiAgICAgc3RydWN0IFNoYWRlclNv
dXJjZUVudHJ5IHsKQEAgLTYzMSwxMiArNTE3LDggQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRlck5hbWVIYXNoPiBuYW1lSGFzaE1hcEZvclNoYWRl
cnM7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKIAotI2lmIFVTRShBTkdMRSkKLSAgICBmcmllbmQg
Y2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnNH
TEFOR0xFPiBtX2V4dGVuc2lvbnM7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVO
R0xfRVMpCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVTOwogICAgIGZyaWVu
ZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xDb21tb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4
dGVuc2lvbnNHTE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CkBAIC02NDgsOSArNTMwLDcgQEAgcHJp
dmF0ZToKIAogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+PiBtX3ZlcnRleEFycmF5OwogCi0jaWYg
IVVTRShBTkdMRSkKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOwotI2VuZGlmCiAK
ICAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CkBAIC02NTgsNTQgKzUzOCwxNCBAQCBwcml2YXRlOgogICAgIEdDR0x1aW50IG1faW50ZXJtZWRp
YXRlVGV4dHVyZSB7IDAgfTsKICNlbmRpZgogCi0jaWYgIVVTRShBTkdMRSkgJiYgVVNFKE9QRU5H
TF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogICAgIEdDR0x1aW50IG1fZGVwdGhCdWZmZXIgeyAw
IH07CiAgICAgR0NHTHVpbnQgbV9zdGVuY2lsQnVmZmVyIHsgMCB9OwogI2VuZGlmCiAgICAgR0NH
THVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CiAKICAgICBHQ0dMdWludCBtX2ludGVy
bmFsQ29sb3JGb3JtYXQgeyAwIH07Ci0jaWYgVVNFKEFOR0xFKQotICAgIEdDR0x1aW50IG1faW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgeyAwIH07Ci0jZW5kaWYKLSAgICBzdHJ1Y3QgR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZSB7Ci0gICAgICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsK
LSAgICAgICAgR0NHTHVpbnQgYm91bmREcmF3RkJPIHsgMCB9OwotICAgICAgICBHQ0dMZW51bSBh
Y3RpdmVUZXh0dXJlVW5pdCB7IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCB9OwotCi0gICAg
ICAgIHVzaW5nIEJvdW5kVGV4dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCi0gICAgICAgICAg
ICBzdGQ6OnBhaXI8R0NHTHVpbnQsIEdDR0xlbnVtPiwKLSAgICAgICAgICAgIEludEhhc2g8R0NH
TGVudW0+LAotICAgICAgICAgICAgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxH
Q0dMdWludD4sCi0gICAgICAgICAgICBQYWlySGFzaFRyYWl0czxXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+Ci0gICAgICAgID47Ci0gICAgICAgIEJvdW5kVGV4dHVyZU1hcCBib3Vu
ZFRleHR1cmVNYXA7Ci0gICAgICAgIEdDR0x1aW50IGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25z
dCB7IHJldHVybiBib3VuZFRleHR1cmUoYWN0aXZlVGV4dHVyZVVuaXQpOyB9Ci0gICAgICAgIEdD
R0x1aW50IGJvdW5kVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1
cmVVbml0KTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5k
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgR0NHTHVpbnQgY3VycmVudEJv
dW5kVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQp
OyB9Ci0gICAgICAgIEdDR0xlbnVtIGJvdW5kVGFyZ2V0KEdDR0xlbnVtIHRleHR1cmVVbml0KSBj
b25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJl
TWFwLmZpbmQodGV4dHVyZVVuaXQpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5k
VGV4dHVyZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVl
LnNlY29uZDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CiAKLSAgICAgICAgdm9p
ZCBzZXRCb3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQsIEdDR0x1aW50IHRleHR1cmUs
IEdDR0xlbnVtIHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgYm91bmRUZXh0dXJlTWFw
LnNldCh0ZXh0dXJlVW5pdCwgc3RkOjptYWtlX3BhaXIodGV4dHVyZSwgdGFyZ2V0KSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8
R0NHTHVpbnQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgICAgIFRleHR1cmVTZWVkQ291bnQgdGV4dHVyZVNlZWRD
b3VudDsKLSAgICB9OwogCiAgICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBtX3N0YXRlOwogCkBA
IC03MTQsMTYgKzU1NCw2IEBAIHByaXZhdGU6CiAgICAgR0NHTHVpbnQgbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKICAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIgeyAwIH07CiAKLSNpZiBVU0UoQU5HTEUpCi0gICAgLy8gRm9yIHByZXNlcnZlRHJhd2lu
Z0J1ZmZlcjp0cnVlIHdpdGhvdXQgbXVsdGlzYW1wbGluZy4KLSAgICBHQ0dMdWludCBtX3ByZXNl
cnZlRHJhd2luZ0J1ZmZlclRleHR1cmUgeyAwIH07Ci0gICAgLy8gQXR0YWNoZXMgbV90ZXh0dXJl
IHdoZW4gbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIGlzIG5vbi16ZXJvLgotICAgIEdD
R0x1aW50IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPIHsgMCB9OwotICAgIC8vIFF1ZXJpZWQg
YXQgZGlzcGxheSBzdGFydHVwLgotICAgIEVHTGludCBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFy
Z2V0IHsgLTEgfTsKLQotI2VuZGlmCi0KICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNp
emVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0NHTGVudW0+IG1fc3ludGhldGljRXJyb3Jz
OwogCkBAIC03NDQsMjkgKzU3NCw4IEBAIHByaXZhdGU6CiAjaWYgVVNFKENBSVJPKQogICAgIFBs
YXRmb3JtR0xPYmplY3QgbV92YW8geyAwIH07CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIC8vIEJhY2tpbmcgc3RvcmUgZm9yIHRoZSB0aGUgYnVmZmVyIHdoaWNoIGlzIGV2ZW50
dWFsbHkgdXNlZCBmb3IgZGlzcGxheS4KLSAgICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZl
ciA9PSBmYWxzZSwgdGhpcyBpcyB0aGUgZHJhd2luZyBidWZmZXIgYmFja2luZyBzdG9yZS4KLSAg
ICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9PSB0cnVlLCB0aGlzIGlzIGJsaXR0ZWQg
dG8gZHVyaW5nIGRpc3BsYXkgcHJlcGFyZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNl
PiBtX2Rpc3BsYXlCdWZmZXJCYWNraW5nOwotICAgIHZvaWQqIG1fZGlzcGxheUJ1ZmZlclBidWZm
ZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgYm9vbCBtX3N3
aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uIHsgZmFsc2UgfTsKLSAgICBTY29wZWRI
aWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0IG1faGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdDsKLSNl
bmRpZgotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFPiBtX2N2OwotI2VuZGlmCi0jaWYgVVNF
KEFOR0xFKQotICAgIGJvb2wgbV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxpbWl0ID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4UGVuZGluZ0ZyYW1lcyA9IDM7Ci0g
ICAgc2l6ZV90IG1fb2xkZXN0RnJhbWVDb21wbGV0aW9uRmVuY2UgeyAwIH07Ci0gICAgU2NvcGVk
R0xGZW5jZSBtX2ZyYW1lQ29tcGxldGlvbkZlbmNlc1ttYXhQZW5kaW5nRnJhbWVzXTsKLSNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3MzBkNmQzNjdmMWY5NTQ0NWIwYTc5YzE3NGRhODhhM2VlNTFjYjljLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyODg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCi0KLSNpZiBFTkFC
TEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCi0KLSNpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCi0jZWxzZQotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9w
ZW5HTC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
Zy5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0j
aW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpZiBVU0UoTElCRVBP
WFkpCi0jaW5jbHVkZSAiRXBveHlTaGltcy5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNs
dWRlICJPcGVuR0xFU1NoaW1zLmgiCi0jZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlcigpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VG
bGFnOwotICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWRO
YW1lSGFzaDsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10gewotICAgICAgICBzaGFy
ZWROYW1lSGFzaCA9IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OwotICAgIH0p
OwotCi0gICAgcmV0dXJuICpzaGFyZWROYW1lSGFzaDsKLX0KLQotc3RhdGljIHZvaWQgc2V0Q3Vy
cmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkK
LXsKLSAgICAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFz
aDsKLX0KLQotLy8gSGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2Nv
bXBpbGVyIHRvIGRvCi0vLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0
YXRpYyBtZXRob2QsIGJlZm9yZQotLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIKLS8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0
aGUgY3VycmVudCBpbnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KLQotc3RhdGlj
IHVpbnQ2NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5n
dGgpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ1N0cmlu
ZyBuYW1lQXNDU3RyaW5nID0gQ1N0cmluZyhuYW1lKTsKLQotICAgIC8vIExvb2sgdXAgbmFtZSBp
biBvdXIgbG9jYWwgbWFwLgotICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFw
Rm9yU2hhZGVyID0gKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOwotICAgIFNoYWRl
ck5hbWVIYXNoOjppdGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyLT5maW5kKG5hbWVBc0NTdHJpbmcpOwotICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlci0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52
YWx1ZTsKLQotICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOwot
Ci0gICAgLy8gQ29udmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8g
YSA2NC1iaXQgcmVzdWx0Ci0gICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUg
b2Ygb3VyIHRhYmxlLiBPdmVyZmxvdyB3b3VsZAotICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlm
IHdlJ3JlIGFscmVhZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCi0gICAgLy8gd2Un
cmUgaG9waW5nIHRoYXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKLSAgICAv
LyBkb24ndCBoYXZlIHRoYXQgbWFueSBzeW1ib2xzKS4KLQotICAgIHVpbnQ2NF90IHJlc3VsdCA9
IGhhc2hWYWx1ZTsKLSAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhh
c2hNYXBGb3JTaGFkZXItPnNpemUoKSArIDEpOwotCi0gICAgY3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyLT5zZXQobmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChj
b25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCi17Ci0gICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24m
IGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsK
LSAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKSkgewotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRo
U3RlbmNpbEV4dGVuc2lvbik7Ci0gICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2ls
IGlzIHRydWUuCi0gICAgICAgICAgICBhdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgICAgICBzZXRDb250ZXh0
QXR0cmlidXRlcyhhdHRycyk7Ci0gICAgfQotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1f
aXNGb3JXZWJHTDIpIHsKLSAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7Ci0gICAgICAgICAgICBhdHRycy5hbnRpYWxp
YXMgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJDb21w
b3NpdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLQotI2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwg
R0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJ
VEhFUiwgR0xfRkFMU0UpOwotI2VuZGlmCi0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5h
bnRpYWxpYXMpCi0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVk
aWF0ZVRleHR1cmUpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7
Ci0gICAgZ2xGbHVzaCgpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9m
Ym8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgZWxzZQotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8p
OwotICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3N0YXRlLmJvdW5kVGFy
Z2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUo
R0xfVEVYVFVSRTApIDogMCk7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCi0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVy
aW5nUmVzdWx0cygpCi17Ci0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlm
IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewotICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG11c3RSZXN0b3Jl
RkJPID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJl
YWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgICAgICBpZiAobV9zdGF0ZS5ib3Vu
ZERyYXdGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
LSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXV0byByZXN1bHQgPSBy
ZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQot
ewotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50
SGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWln
aHQgPj0gMCk7Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7
Ci0gICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVz
KCk7Ci0KLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NP
Ul9URVNULCBHTF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRo
ZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Ci0gICAgCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9
IHJlc2hhcGVGQk9zKEludFNpemUod2lkdGgsIGhlaWdodCkpOwotCi0gICAgLy8gSW5pdGlhbGl6
ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7MCwgMCwg
MCwgMH0sIGNsZWFyRGVwdGggPSAwOwotICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7Ci0gICAg
R0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RS
VUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFOwotICAgIEdMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZm
ZmZmZmYsIHN0ZW5jaWxNYXNrQmFjayA9IDB4ZmZmZmZmZmY7Ci0gICAgR0xiaXRmaWVsZCBjbGVh
ck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOwotICAgIDo6Z2xHZXRGbG9hdHYoR0xfQ09MT1Jf
Q0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOwotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDAp
OwotICAgIDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Ci0g
ICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKLQot
ICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJzLmRl
cHRoKSB7Ci0gICAgICAgIDo6Z2xHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVh
ckRlcHRoKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7
Ci0gICAgICAgIDo6Z2xHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2sp
OwotICAgICAgICA6OmdsRGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVhck1hc2sgfD0g
R0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAg
ICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5j
aWwpOwotICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKDApOwotICAgICAgICA6OmdsR2V0SW50ZWdl
cnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNp
bE1hc2spKTsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1B
U0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7Ci0gICAgICAg
IDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKLSAgICAgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgMHhmZmZmZmZmZik7Ci0gICAgICAgIGNs
ZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgfQotCi0gICAgOjpnbENsZWFy
KGNsZWFyTWFzayk7Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNv
bG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKLSAgICA6OmdsQ29sb3JNYXNr
KGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7
Ci0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFz
ayk7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xDbGVhclN0
ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
RlJPTlQsIHN0ZW5jaWxNYXNrKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
QkFDSywgc3RlbmNpbE1hc2tCYWNrKTsKLSAgICB9Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8p
Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0KLSAgICBhdXRvIGVycm9yID0gOjpnbEdl
dEVycm9yKCk7Ci0gICAgaWYgKGVycm9yICE9IEdMX05PX0VSUk9SKSB7Ci0gICAgICAgIFJFTEVB
U0VfTE9HKFdlYkdMLCAiRmF0YWw6IE9wZW5HTCBlcnJvciBkdXJpbmcgR3JhcGhpY3NDb250ZXh0
R0wgYnVmZmVyIGluaXRpYWxpemF0aW9uICglZCkuIiwgZXJyb3IpOwotICAgICAgICBmb3JjZUNv
bnRleHRMb3N0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICA6OmdsRmx1c2goKTsK
LX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmco
UGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRT
aGFkZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZl
cnRleFNoYWRlcikpOwotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFn
bWVudFNoYWRlcikpOwotICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVu
dEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwot
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIHNoOjpTaGFkZXJWYXJpYWJsZT4gY29tYmluZWRWYXJ5aW5n
czsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA6IHZlcnRleEVudHJ5LnZhcnlp
bmdNYXApIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBzeW1ib2xOYW1lID0gdmVydGV4U3ltYm9s
LmtleTsKLSAgICAgICAgLy8gVGhlIHZhcnlpbmcgbWFwIGluY2x1ZGVzIHZhcmlhYmxlcyBmb3Ig
ZWFjaCBpbmRleCBvZiBhbiBhcnJheSB2YXJpYWJsZS4KLSAgICAgICAgLy8gV2Ugb25seSB3YW50
IGEgc2luZ2xlIHZhcmlhYmxlIHRvIHJlcHJlc2VudCB0aGUgYXJyYXkuCi0gICAgICAgIGlmIChz
eW1ib2xOYW1lLmVuZHNXaXRoKCJdIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAvLyBEb24ndCBjb3VudCBidWlsdCBpbiB2YXJ5aW5ncy4KLSAgICAgICAgaWYgKHN5bWJvbE5h
bWUgPT0gImdsX0ZyYWdDb29yZCIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciIHx8
IHN5bWJvbE5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgY29uc3QgYXV0byYgZnJhZ21lbnRTeW1ib2wgPSBmcmFnbWVudEVudHJ5LnZhcnlp
bmdNYXAuZmluZChzeW1ib2xOYW1lKTsKLSAgICAgICAgaWYgKGZyYWdtZW50U3ltYm9sICE9IGZy
YWdtZW50RW50cnkudmFyeWluZ01hcC5lbmQoKSkKLSAgICAgICAgICAgIGNvbWJpbmVkVmFyeWlu
Z3MuYWRkKHN5bWJvbE5hbWUsIGZyYWdtZW50U3ltYm9sLT52YWx1ZSk7Ci0gICAgfQotCi0gICAg
c2l6ZV90IG51bVZhcnlpbmdzID0gY29tYmluZWRWYXJ5aW5ncy5zaXplKCk7Ci0gICAgaWYgKCFu
dW1WYXJ5aW5ncykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzdGQ6OnZlY3RvcjxzaDo6
U2hhZGVyVmFyaWFibGU+IHZhcmlhYmxlczsKLSAgICB2YXJpYWJsZXMucmVzZXJ2ZShjb21iaW5l
ZFZhcnlpbmdzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2YXJ5aW5nU3ltYm9sIDog
Y29tYmluZWRWYXJ5aW5ncy52YWx1ZXMoKSkKLSAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2
YXJ5aW5nU3ltYm9sKTsKLQotICAgIEdDR0xpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSAwOwotI2lm
IFVTRShPUEVOR0xfRVMpCi0gICAgOjpnbEdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMs
ICZtYXhWYXJ5aW5nVmVjdG9ycyk7Ci0jZWxzZQotICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdW
ZWN0b3JzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgR0NHTGludCBtYXhWYXJ5aW5nRmxvYXRzID0g
MDsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgJm1heFZh
cnlpbmdGbG9hdHMpOwotICAgICAgICBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1heFZhcnlpbmdGbG9h
dHMgLyA0OwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBzaDo6Q2hlY2tWYXJpYWJsZXNXaXRo
aW5QYWNraW5nTGltaXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJpYWJsZXMpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVj
dCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOwot
ICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOwot
ICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0
ZXhTaGFkZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwotCi0gICAgSGFzaE1hcDxT
dHJpbmcsIHNoOjpHTGVudW0+IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcDsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgZW50cnkgOiB2ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKSB7Ci0gICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZTsKLSAgICAgICAgdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmFkZChTdHJpbmcobWFwcGVkTmFt
ZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSwgZW50cnkudmFsdWUuZ2V0KCkucHJlY2lz
aW9uKTsKLSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRy
eS51bmlmb3JtTWFwKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0g
ZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKLSAgICAgICAgY29uc3QgYXV0byYgdmVydGV4
U3ltYm9sID0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmZpbmQoU3RyaW5nKG1hcHBlZE5hbWUu
Y19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSkpOwotICAgICAgICBpZiAodmVydGV4U3ltYm9s
ICE9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVl
ICE9IGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuYWN0aXZl
VGV4dHVyZVVuaXQgPSB0ZXh0dXJlOwotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQo
cHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAucmVtb3ZlKHByb2dyYW0pOwotICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRT
eW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwot
ICAgIExPRyhXZWJHTCwgIjo6YmluZEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgOjpn
bEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbWFwcGVkTmFtZS51dGY4KCkuZGF0
YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCaW5kQnVmZmVyKHRh
cmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZy
YW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0x1
aW50IGZibzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSBidWZmZXI7Ci0gICAgZWxz
ZQotICAgICAgICBmYm8gPSAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRp
c2FtcGxlRkJPIDogbV9mYm8pOwotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIp
OwotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZC
Tyk7Ci0gICAgaWYgKGZibyAhPSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERy
YXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IGZibzsKLSAgICB9Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0
YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4
dHVyZSwgdGFyZ2V0KTsKLSAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJl
ZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xC
bGVuZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhh
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwot
fSAgICAgICAKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0Is
IHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0g
dXNhZ2UpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMU3Bhbjxjb25zdCB2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVyRGF0
YSh0YXJnZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJ1ZmZl
clN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhKTsKLX0KLQot
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R0NHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLQotICAgIHJldHVybiA6OmdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjbGVhckNvbG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBm
IGIsIEdDR0xjbGFtcGYgYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bENsZWFyKG1hc2spOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyU3RlbmNpbChHQ0dMaW50IHMpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENsZWFyU3RlbmNp
bChzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xi
b29sZWFuIHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29s
ZWFuIGFscGhhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFR1cm4gb24gbmFtZSBtYXBw
aW5nLiBEdWUgdG8gdGhlIHdheSBBTkdMRSBuYW1lIGhhc2hpbmcgd29ya3MsIHdlCi0gICAgLy8g
cG9pbnQgYSBnbG9iYWwgaGFzaG1hcCB0byB0aGUgbWFwIG93bmVkIGJ5IHRoaXMgY29udGV4dC4K
LSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBtX2NvbXBpbGVyLmdldFJl
c291cmNlcygpOwotICAgIFNoSGFzaEZ1bmN0aW9uNjQgcHJldmlvdXNIYXNoRnVuY3Rpb24gPSBB
TkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb247Ci0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0
aW9uID0gbmFtZUhhc2hGb3JTaGFkZXI7Ci0KLSAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVy
cykKLSAgICAgICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1l
SGFzaD4oKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBG
b3JTaGFkZXJzLmdldCgpKTsKLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291
cmNlcyk7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9u
cy0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7Ci0KLSAgICBBTkdMRVJl
c291cmNlcy5IYXNoRnVuY3Rpb24gPSBwcmV2aW91c0hhc2hGdW5jdGlvbjsKLSAgICBtX2NvbXBp
bGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyKG51bGxwdHIpOwotCi0gICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNl
Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xh
dGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwotICAgIGNv
bnN0IGNoYXIqIHRyYW5zbGF0ZWRTaGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5k
YXRhKCk7Ci0gICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVy
Q1N0cmluZy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBvcmlnaW5hbCBz
aGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1c
biIsIGdldFNoYWRlclNvdXJjZShzaGFkZXIpLnV0ZjgoKS5kYXRhKCkpOwotICAgIExPRyhXZWJH
TCwgIi0tLSBiZWdpbiB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCB0
cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tIiwgdHJhbnNsYXRlZFNoYWRlclB0cik7Ci0KLSAg
ICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFu
c2xhdGVkU2hhZGVyTGVuZ3RoKTsKLSAgICAKLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIp
OwotICAgIAotICAgIGludCBjb21waWxlU3RhdHVzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJp
dihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAgICBTaGFkZXJT
b3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAg
Ly8gUG9wdWxhdGUgdGhlIHNoYWRlciBsb2cKLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6
Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAg
ICBpZiAobGVuZ3RoKSB7Ci0gICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgICAgIFZlY3Rv
cjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKLSAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hh
ZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICAgICAgUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICAgICAgZW50cnkubG9nID0gZ2V0
VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsK
LSAgICB9Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyAhPSBHTF9UUlVFKSB7Ci0gICAgICAgIGVu
dHJ5LmlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IHNoYWRlciB0
cmFuc2xhdG9yIHByb2R1Y2VkIGEgc2hhZGVyIHRoYXQgT3BlbkdMIHdvdWxkIG5vdCBjb21waWxl
LiIpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVy
KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBIYXNoTWFwPFBsYXRmb3JtR0xPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotCi0gICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2hh
ZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKLQotICAgIGNvbnN0IENTdHJp
bmcmIHNoYWRlclNvdXJjZUNTdHJpbmcgPSBlbnRyeS5zb3VyY2UudXRmOCgpOwotICAgIGNvbnN0
IGNoYXIqIHNoYWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOwotICAg
IGludCBzaGFkZXJTb3VyY2VMZW5ndGggPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmxlbmd0aCgpOwot
Ci0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuJXNc
bi0tLSBlbmQgZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4iLCBzaGFkZXJTb3VyY2VQdHIpOwot
Ci0gICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZzaGFk
ZXJTb3VyY2VMZW5ndGgpOwotCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLQotICAg
IGludCBjb21waWxlU3RhdHVzOwotCi0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElM
RV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKLQotICAgIGlmIChjb21waWxlU3RhdHVzID09IEdM
X1RSVUUpIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkRpcmVjdCBjb21waWxhdGlvbiBvZiBzaGFkZXIgc3VjY2VlZGVkLiIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVudHJ5LmlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAi
RXJyb3I6IGRpcmVjdCBjb21waWxhdGlvbiBvZiBzaGFkZXIgZmFpbGVkLiIpOwotICAgIH0KLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBU1NFUlQo
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChh
dHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGJvcmRlcik7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBU1NFUlQobV9zdGF0
ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewot
ICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEN1bGxG
YWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMo
R0NHTGVudW0gZnVuYykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRGVwdGhN
YXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsK
LSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFt
U3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwotICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJv
Z3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJs
ZShHQ0dMZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbERpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3Qs
IEdDR0xzaXplaSBjb3VudCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwot
ICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5
cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNl
dCkpKTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xFbmFibGUoY2FwKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVp
bnQgaW5kZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRmluaXNoKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRmx1c2goKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRnJhbWVi
dWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUs
IGxldmVsKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJv
bnRGYWNlKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwotICAgIDo6Z2xH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4
QXR0cmlidXRlU2l6ZSk7Ci0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXpl
KTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWlu
YXRpb24uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsK
LSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBp
bmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5k
YXRhKCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwg
U0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVu
Z3RoKSk7Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1l
LmRhdGEoKSwgbmFtZUxlbmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBw
aW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRl
eCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkp
OwotI2VuZGlmCi0KLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Ci0gICAgaW5mby50eXBl
ID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBH
Q0dMaW50IHN5bWJvbENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVT
eW1ib2xDb3VudChwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX0FUVFJJQlVURVMs
ICZzeW1ib2xDb3VudCk7Ci0gICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgfQotICAgIAotICAgIEFjdGl2ZVNoYWRlclN5bWJv
bENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAgICBHQ0dMdWludCByYXdJ
bmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5k
ZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5k
ZXhNYXBbaW5kZXhdIDogLTE7Ci0KLSAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9n
cmFtLCByYXdJbmRleCwgaW5mbyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOwotICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1T
aXplKTsKLQotICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4VW5pZm9ybVNpemUpOyAvLyBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCi0gICAg
R0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0g
dHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVu
aWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAg
aWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3RyaW5n
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9M
X1RZUEVfVU5JRk9STSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7Ci0gICAgCi0j
aWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxl
bmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSB1bmlm
b3JtICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0
ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotICAgIAot
ICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAg
IGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBHQ0dMaW50IHN5bWJv
bENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAu
ZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChw
cm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291bnQp
OwotICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHBy
b2dyYW0pOwotICAgIH0KLSAgICAKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJv
bENvdW50cyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXgg
PCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCkpID8g
c3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhdIDogLTE7
Ci0gICAgCi0gICAgcmV0dXJuIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJhd0luZGV4
LCBpbmZvKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHNpemVpIG1heENvdW50LCBHQ0dM
c2l6ZWkqIGNvdW50LCBQbGF0Zm9ybUdMT2JqZWN0KiBzaGFkZXJzKQotewotICAgIGlmICghcHJv
Z3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50
LCBjb3VudCwgc2hhZGVycyk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIYXNoZWROYW1l
KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBuYW1lOwotICAgIHVpbnQ2NF90IG51bWJlciA9IG5hbWVIYXNoRm9yU2hhZGVyKG5h
bWUudXRmOCgpLmRhdGEoKSwgbmFtZS5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
IndlYmdsXyIsIGhleChudW1iZXIsIExvd2VyY2FzZSkpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFN0
cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNl
TWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9s
VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRv
JiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBh
dXRvIHN5bWJvbEVudHJ5ID0gc3ltYm9sTWFwLmZpbmQobmFtZSk7Ci0gICAgaWYgKHN5bWJvbEVu
dHJ5ID09IHN5bWJvbE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgIGF1dG8mIG1hcHBlZE5hbWUgPSBzeW1ib2xFbnRyeS0+dmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZTsKLSAgICByZXR1cm4gU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5n
dGgoKSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
TmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1i
b2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0NHTHNpemVpIGNvdW50ID0gMDsK
LSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07Ci0gICAgZ2V0QXR0YWNoZWRT
aGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICBmb3IgKEdDR0xzaXpl
aSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7
Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUu
dmFsdWUoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0
ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KLSAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2Vk
U2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRl
ck1hcC5lbmQoKSkgewotICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVl
OwotICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1h
cHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAgICAg
ICBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVy
cy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHN5
bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5
IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAotICAg
ICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVy
IHByb2dyYW0uCi0gICAgICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICAg
ICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsK
LSAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hh
ZGVycy5nZXQoKSk7Ci0KLSAgICAgICAgYXV0byBnZW5lcmF0ZWROYW1lID0gZ2VuZXJhdGVIYXNo
ZWROYW1lKG5hbWUpOwotCi0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihu
dWxscHRyKTsKLQotICAgICAgICBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLnNldChnZW5l
cmF0ZWROYW1lLCBuYW1lKTsKLQotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkTmFtZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAg
PSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAgICAgIGlmIChuYW1lID09IHN5bWJv
bEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWUuY19zdHIoKSkKLSAgICAgICAgICAgIHJldHVy
biBzeW1ib2xFbnRyeS5rZXk7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0K
LVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBHQ0dMc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdOwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAm
Y291bnQsIHNoYWRlcnMpOwotICAgIAotICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5T
aGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlm
IChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7
Ci0gICAgfQotCi0gICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBz
aGFkZXJzIGFmdGVyIGxpbmtpbmcuCi0gICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1h
cC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5k
KCkpIHsKLSAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKLSAgICAg
ICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxp
bmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2lu
YWxOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgICAg
ICBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNo
YWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1l
LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTog
dGhleSBtYXkgYmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGls
ZWQsCi0gICAgICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFu
eSBzaGFkZXIgcHJvZ3JhbS4KLQotICAgICAgICBjb25zdCBhdXRvJiBjYWNoZWQgPSBtX3Bvc3Np
Ymx5VW51c2VkQXR0cmlidXRlTWFwLmZpbmQobmFtZSk7Ci0gICAgICAgIGlmIChjYWNoZWQgIT0g
bV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBj
YWNoZWQtPnZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdLCBzaXplX3QgY291bnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBmb3Ig
KHNpemVfdCBzeW1ib2xUeXBlID0gMDsgc3ltYm9sVHlwZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+
KFNIQURFUl9TWU1CT0xfVFlQRV9WQVJZSU5HKTsgKytzeW1ib2xUeXBlKSB7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgU2hhZGVyU291
cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcnNb
aV0pOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29u
c3QgU2hhZGVyU3ltYm9sTWFwJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChz
dGF0aWNfY2FzdDxlbnVtIEFOR0xFU2hhZGVyU3ltYm9sVHlwZT4oc3ltYm9sVHlwZSkpOwotICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewotICAg
ICAgICAgICAgICAgIGlmIChuYW1lID09IHN5bWJvbEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5h
bWUuY19zdHIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQot
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0p
Ci0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybiAtMTsKLQotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1i
b2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwotICAg
IExPRyhXZWJHTCwgIjo6Z2xHZXRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgp
KTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRp
cmVjdChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAtMTsKLQotCi0gICAgcmV0dXJuIDo6Z2xHZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7Ci0KLSAgICAvLyBTZXQgYW4gYXJiaXRy
YXJ5IGxpbWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgotICAgIC8v
IGEgcHJvYmxlbSBkcml2ZXIgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIG5ldmVyIGNsZWFy
IHRoZSBlcnJvci4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdvdWxkIGp1c3QgbG9vcCB1bnRpbCB3
ZSBnb3QgTk9fRVJST1IuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7
Ci0gICAgICAgIEdDR0xlbnVtIGVycm9yID0gZ2xHZXRFcnJvcigpOwotICAgICAgICBpZiAoZXJy
b3IgPT0gTk9fRVJST1IpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9zeW50aGV0aWNF
cnJvcnMuYWRkKGVycm9yKTsKLSAgICAgICAgbW92ZWRBbkVycm9yID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbW92ZWRBbkVycm9yOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RXJyb3IoKQotewotICAgIGlmICghbV9zeW50aGV0aWNFcnJvcnMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhl
IHN5bnRoZXRpYyBlcnJvciBsaXN0IGluIGNhc2UKLSAgICAgICAgLy8gdGhhdCBlcnJvciBpcyBh
bHJlYWR5IHRoZXJlLCBzaW5jZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgYm90aAotICAgICAg
ICAvLyBnbEdldEVycm9yIGFuZCBnZXRFcnJvciBpcyB0byBvbmx5IHJlcG9ydCBlYWNoIGVycm9y
IGNvZGUgb25jZS4KLSAgICAgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0g
ICAgICAgIHJldHVybiBtX3N5bnRoZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9P
UEVSQVRJT047Ci0KLSAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
cmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5n
KG5hbWUpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZmZXIpOwotfQotCi1HQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7
Ci0KLSAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1l
YnVmZmVyKQotewotICAgIGlmICghZnJhbWVidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNGcmFtZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Ci19
Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZl
ckVYVChyZW5kZXJidWZmZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFzaGFk
ZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNTaGFk
ZXIoc2hhZGVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
VGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQot
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0
ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdD
R0xmbG9hdCB3aWR0aCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQot
ewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLQotICAgIEdDR0xzaXplaSBjb3VudCA9IDA7Ci0gICAgUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyB9OwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9n
cmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAgaWYgKGNvdW50ID09IDIpCi0gICAgICAg
IG1fbGlua2VkU2hhZGVyTWFwLnNldChwcm9ncmFtLCBzdGQ6Om1ha2VfcGFpcihzaGFkZXJzWzBd
LCBzaGFkZXJzWzFdKSk7Ci0KLSAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50IHBhcmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3Is
IEdDR0xmbG9hdCB1bml0cykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1w
ZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwg
aW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBTaGFkZXJTb3VyY2VFbnRy
eSBlbnRyeTsKLQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291
cmNlTWFwLnNldChzaGFkZXIsIFdURk1vdmUoZW50cnkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdD
R0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0g
ZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0
ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3Rl
bmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNp
bE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6
cGFzcykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNp
bE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0
ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXpl
LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xV
bmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlm
b3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2Yo
bG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
YXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZs
b2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xV
bmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQg
djEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikp
OwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3Jt
M2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0z
aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xp
bnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdDR0xpbnQgdjMpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm00
aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bnQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZv
cm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJy
YXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA5KSk7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVu
aWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA5LCB0cmFuc3Bvc2UsIGFy
cmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUg
MTYpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVXNlUHJvZ3JhbShw
cm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9n
cmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0K
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdCwgMT4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkuZGF0
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdD
R0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0
cmliMmYoaW5kZXgsIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
LCAyPiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQg
aW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZl
cnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDM+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5
LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2
MiwgR0NHTGZsb2F0IHYzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2Miwg
djMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gYXJyYXkpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5k
ZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkoKQotewotICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuY3JlYXRlVmVy
dGV4QXJyYXlPRVMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
VmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICBnZXRFeHRlbnNpb25z
KCkuZGVsZXRlVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQot
ewotICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuaXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9y
bUdMT2JqZWN0IGFycmF5KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5iaW5kVmVydGV4QXJyYXlP
RVMoYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCb29sZWFu
dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+IHZhbHVlKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRC
b29sZWFudihwbmFtZSwgdmFsdWUuZGF0YSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSkKLXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICA6OmdsR2V0QnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZS5kYXRh
KTsKLX0KLQotR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjQo
R0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdDR0xpbnQ2NCB2
YWx1ZSA9IDA7Ci0gICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBt
dXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5p
dGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KLSAgICAvLyA6
OmdsR2V0SW50ZWdlcjY0dihwbmFtZSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQot
R0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwotICAgIC8vIEZJWE1F
IDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0
byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250
ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCi0gICAgLy8gOjpnbEdldEludGVnZXI2NGlfdihwbmFt
ZSwgaW5kZXgsIHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAg
ICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQpCi0gICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVO
Q0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsK
LSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
R0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwg
JnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoQUNU
SVZFX0FUVFJJQlVURVMgPT0gcG5hbWUgfHwgQUNUSVZFX1VOSUZPUk1TID09IHBuYW1lKTsKLSAg
ICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3No
YWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQg
IT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgKnZhbHVl
ID0gcmVzdWx0LT52YWx1ZS5jb3VudEZvclR5cGUocG5hbWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuc2V0KHByb2dyYW0sIEFj
dGl2ZVNoYWRlclN5bWJvbENvdW50cygpKTsKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMm
IHN5bWJvbENvdW50cyA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3Jh
bSktPnZhbHVlOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIGFjdGl2ZSBhdHRyaWJ1dGVzLCBidWls
ZCBhIGZpbHRlcmVkIGNvdW50LCBhbmQgYSBtYXBwaW5nIG9mCi0gICAgLy8gb3VyIGludGVybmFs
IGF0dHJpYnV0ZXMgaW5kZXhlcyB0byB0aGUgcmVhbCB1bmZpbHRlcmVkIGluZGV4ZXMgaW5zaWRl
IE9wZW5HTC4KLSAgICBHQ0dMaW50IGF0dHJpYnV0ZUNvdW50ID0gMDsKLSAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEFDVElWRV9BVFRSSUJVVEVTLCAmYXR0cmlidXRlQ291bnQpOwotICAg
IGZvciAoR0NHTGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKLSAgICAgICAg
QWN0aXZlSW5mbyBpbmZvOwotICAgICAgICBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGks
IGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxB
dHRyaWJ1dGVJbmRleE1hcC5hcHBlbmQoaSk7Ci0gICAgfQotICAgIAotICAgIC8vIERvIHRoZSBz
YW1lIGZvciB1bmlmb3Jtcy4KLSAgICBHQ0dMaW50IHVuaWZvcm1Db3VudCA9IDA7Ci0gICAgOjpn
bEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfVU5JRk9STVMsICZ1bmlmb3JtQ291bnQpOwot
ICAgIGZvciAoR0NHTGludCBpID0gMDsgaSA8IHVuaWZvcm1Db3VudDsgKytpKSB7Ci0gICAgICAg
IEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwg
aSwgaW5mbyk7Ci0gICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJl
ZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLmFwcGVuZChpKTsKLSAgICB9Ci0gICAgCi0gICAgKnZh
bHVlID0gc3ltYm9sQ291bnRzLmNvdW50Rm9yVHlwZShwbmFtZSk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcnNbMl0sIEdDR0xzaXplaSBjb3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCi17Ci0gICAg
TE9HKFdlYkdMLCAiT3JpZ2luYWwgU2hhZGVySW5mb0xvZzpcbiVzIiwgbG9nLnV0ZjgoKS5kYXRh
KCkpOwotCi0gICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiByZWdFeHAoIndlYmdsX1sw
MTIzNDU2Nzg5YWJjZGVmQUJDREVGXSsiKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgcHJvY2Vzc2Vk
TG9nOwotICAgIAotICAgIC8vIEFOR0xFIGluc2VydHMgYSAiI2V4dGVuc2lvbiIgbGluZSBpbnRv
IHRoZSBzaGFkZXIgc291cmNlIHRoYXQKLSAgICAvLyBjYXVzZXMgYSB3YXJuaW5nIGluIHNvbWUg
Y29tcGlsZXJzLiBUaGVyZSBpcyBubyBwb2ludCBzaG93aW5nCi0gICAgLy8gdGhpcyB3YXJuaW5n
IHRvIHRoZSB1c2VyIHNpbmNlIHRoZXkgZGlkbid0IHdyaXRlIHRoZSBjb2RlIHRoYXQKLSAgICAv
LyBpcyBjYXVzaW5nIGl0LgotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGFuZ2xlV2FybmluZyB7ICJXQVJOSU5HOiAwOjE6IGV4dGVuc2lvbiAnR0xfQVJCX2dwdV9zaGFk
ZXI1JyBpcyBub3Qgc3VwcG9ydGVkXG4iX3MgfTsKLSAgICBpbnQgc3RhcnRGcm9tID0gbG9nLnN0
YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IGFuZ2xlV2FybmluZy5nZXQoKS5sZW5ndGgoKSA6IDA7
Ci0gICAgaW50IG1hdGNoZWRMZW5ndGggPSAwOwotCi0gICAgZG8gewotICAgICAgICBpbnQgc3Rh
cnQgPSByZWdFeHAubWF0Y2gobG9nLCBzdGFydEZyb20sICZtYXRjaGVkTGVuZ3RoKTsKLSAgICAg
ICAgaWYgKHN0YXJ0ID09IC0xKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcHJvY2Vz
c2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgc3RhcnQgLSBzdGFydEZyb20p
KTsKLSAgICAgICAgc3RhcnRGcm9tID0gc3RhcnQgKyBtYXRjaGVkTGVuZ3RoOwotCi0gICAgICAg
IGNvbnN0IFN0cmluZyYgbWFuZ2xlZFN5bWJvbCA9IGxvZy5zdWJzdHJpbmcoc3RhcnQsIG1hdGNo
ZWRMZW5ndGgpOwotICAgICAgICBjb25zdCBTdHJpbmcmIG1hcHBlZFN5bWJvbCA9IG1hcHBlZFN5
bWJvbE5hbWUoc2hhZGVycywgY291bnQsIG1hbmdsZWRTeW1ib2wpOwotICAgICAgICBMT0coV2Vi
R0wsICJEZW1hbmdsaW5nOiAlcyB0byAlcyIsIG1hbmdsZWRTeW1ib2wudXRmOCgpLmRhdGEoKSwg
bWFwcGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5k
KG1hcHBlZFN5bWJvbCk7Ci0gICAgfSB3aGlsZSAoc3RhcnRGcm9tIDwgc3RhdGljX2Nhc3Q8aW50
Pihsb2cubGVuZ3RoKCkpKTsKLQotICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmlu
ZyhzdGFydEZyb20sIGxvZy5sZW5ndGgoKSAtIHN0YXJ0RnJvbSkpOwotCi0gICAgTE9HKFdlYkdM
LCAiVW5tYW5nbGVkIFNoYWRlckluZm9Mb2c6XG4lcyIsIHByb2Nlc3NlZExvZy50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKTsKLX0K
LQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
R0xpbnQgbGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9f
TE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotICAgIFZlY3RvcjxHTGNoYXI+IGlu
Zm8obGVuZ3RoKTsKLSAgICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAm
c2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgR0NHTHNpemVpIGNvdW50OwotICAgIFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyc1syXTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwg
JmNvdW50LCBzaGFkZXJzKTsKLQotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRl
cnMsIGNvdW50LCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6Omds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAg
ICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlcmkoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQotewotICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotCi0gICAgY29uc3QgYXV0
byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIAotICAgIHN3
aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIERFTEVURV9TVEFUVVM6Ci0gICAgY2FzZSBTSEFERVJf
VFlQRToKLSAgICAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsICZ2YWx1ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgIGlmIChyZXN1
bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRp
Y19jYXN0PGludD4ocmVzdWx0LT52YWx1ZS5pc1ZhbGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJTkZPX0xPR19MRU5HVEg6Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZW5kKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVy
KS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdU
SDoKLSAgICAgICAgdmFsdWUgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5W
QUxJRF9FTlVNKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIGNv
bnN0IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgaWYgKCFl
bnRyeS5pc1ZhbGlkKQotICAgICAgICByZXR1cm4gZW50cnkubG9nOwotCi0gICAgR0xpbnQgbGVu
Z3RoID0gMDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgs
ICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAot
Ci0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7
Ci0gICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRh
dGEoKSk7Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9
OwotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZv
LmRhdGEoKSwgc2l6ZSkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291
cmNlOwotfQotCi1HQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMZmxvYXQg
dmFsdWUgPSAwLmY7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIHZhbHVlOwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCAmdmFs
dWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQot
ewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldFVuaWZv
cm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRVbmlmb3Jt
aXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTHVpbnQ+IHZhbHVlKQotewotICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBl
ZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOwot
ICAgIExPRyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0
dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0
YSgpKTsKLX0KLQotR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x2b2lk
KiBwb2ludGVyID0gMDsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBu
YW1lLCAmcG9pbnRlcik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xzaXplaXB0cj4ocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGludCB4b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4gcGl4ZWxzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmICFVU0UoT1BFTkdMX0VTKQotICAgIGlmICh0eXBlID09IEhBTEZf
RkxPQVRfT0VTKQotICAgICAgICB0eXBlID0gR0xfSEFMRl9GTE9BVF9BUkI7Ci0jZW5kaWYKLQot
ICAgIGlmIChtX3VzaW5nQ29yZVByb2ZpbGUpICB7Ci0gICAgICAgIC8vIFRoZXJlIGFyZSBzb21l
IGZvcm1hdCB2YWx1ZXMgdXNlZCBpbiBXZWJHTCB0aGF0IGFyZSBkZXByZWNhdGVkIHdoZW4gdXNp
bmcgYSBjb3JlIHByb2ZpbGUsIHNvIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gYWRhcHQgdGhlbSwg
YXMgd2UgZG8gaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoKS4KLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBBTFBIQToKLSAgICAgICAgICAgIC8v
IFdlIGFyZSB1c2luZyBHTF9SRUQgdG8gYmFjayBHTF9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3
ZWxsLgotICAgICAgICAgICAgZm9ybWF0ID0gUkVEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdM
X1JHIHRvIGJhY2sgR0xfTFVNSU5BTkNFX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCi0g
ICAgICAgICAgICBmb3JtYXQgPSBSRzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhN
RTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxp
bmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUu
Ci0gICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDb21wcmVzc2VkVGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBpbWFnZVNpemUsIGRhdGEuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29tcHJlc3NlZFRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLVBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQg
byA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIo
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsK
LSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2xDcmVhdGVTaGFk
ZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZF
UlRFWF9TSEFERVIpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlblRleHR1cmVz
KDEsICZvKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwotICAgIHJldHVy
biBvOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBt
X3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91
bmREcmF3RkJPKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90
IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRl
ciBpdCBnZXRzIGRlbGV0ZWQuCi0gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwg
MCk7Ci0gICAgfQotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92
ZShwcm9ncmFtKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZl
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1
dG8mIGtleVZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0
ZXh0dXJlOwotICAgIH0pOwotICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4dHVyZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9y
KQotewotICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRo
ZXRpYyBlcnJvciBsaXN0IHRvCi0gICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywg
c28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKLSAgICAvLyBhbnkgZXJyb3JzIGZyb20g
Z2xFcnJvciBiZWZvcmUgdGhlIGVycm9yIHdlIGFyZSBzeW50aGVzaXppbmcuCi0gICAgbW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVy
cm9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9z
dCgpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkK
LSAgICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlY3ljbGVDb250ZXh0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRv
VmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBt
b2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQp
Ci17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVt
IG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQs
IEdDR0xzaXplaSBwcmltY291bnQpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50
c0luc3RhbmNlZEFOR0xFKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7Ci0g
ICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKLXsK
LSAgICBnZXRFeHRlbnNpb25zKCkudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZp
c29yKTsKLX0KLQotI2lmIEhBVkUoT1BFTkdMXzQpICYmIEVOQUJMRShXRUJHTDIpCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQgaW5k
ZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFByaW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNv
bnN0IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1
aW50IGxlbmd0aCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzYWdlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Jj
T2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
ZHN0Qnl0ZU9mZnNldCwgY29uc3Qgdm9pZCogc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBH
Q0dMdWludCBsZW5ndGgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGRzdEJ5dGVPZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShzcmNEYXRhKTsKLSAgICBV
TlVTRURfUEFSQU0oc3JjT2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLX0KLQot
I2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dM
ZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRl
T2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKLX0KLSNl
bHNlCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dM
ZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIsIEdDR0xpbnRwdHIsIEdDR0xzaXplaXB0cikKLXsK
LX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJE
YXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lk
PiBkYXRhKQotewotI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdDR0x2b2lk
KiBwdHIgPSA6OmdsTWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwg
R3JhcGhpY3NDb250ZXh0R0w6Ok1BUF9SRUFEX0JJVCk7Ci0gICAgaWYgKCFwdHIpCi0gICAgICAg
IHJldHVybjsKLSAgICBtZW1jcHkoZGF0YS5kYXRhLCBwdHIsIGRhdGEuYnVmU2l6ZSk7Ci0gICAg
aWYgKCE6OmdsVW5tYXBCdWZmZXIodGFyZ2V0KSkKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRhdGEpOwotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTik7Ci0jZW5kaWYKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc3JjWDApOwotICAgIFVOVVNFRF9QQVJBTShzcmNZ
MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gxKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTEpOwot
ICAgIFVOVVNFRF9QQVJBTShkc3RYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFkwKTsKLSAgICBV
TlVTRURfUEFSQU0oZHN0WDEpOwotICAgIFVOVVNFRF9QQVJBTShkc3RZMSk7Ci0gICAgVU5VU0VE
X1BBUkFNKG1hc2spOwotICAgIFVOVVNFRF9QQVJBTShmaWx0ZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCBsYXllcikKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAg
ICBVTlVTRURfUEFSQU0oYXR0YWNobWVudCk7Ci0gICAgVU5VU0VEX1BBUkFNKHRleHR1cmUpOwot
ICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxheWVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQotewotICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZl
cihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
LXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVu
dHMpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNyYyk7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5H
TF9FU18zKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKLXsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRJ
bnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBkYXRhLmJ1ZlNp
emUsIGRhdGEuZGF0YSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVO
VVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAg
ICBVTlVTRURfUEFSQU0oYnVmU2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0
b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotI2Vsc2UKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0sIEdDR0xlbnVtLCBH
Q0dMZW51bSwgR0NHTFNwYW48R0NHTGludD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKLXsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpv
ZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxl
dmVsKTsKLSAgICBVTlVTRURfUEFSQU0oeG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHlvZmZz
ZXQpOwotICAgIFVOVVNFRF9QQVJBTSh6b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGhlaWdodCk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShu
YW1lKTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwKQotewotICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWlu
dCB2MCwgR0NHTHVpbnQgdjEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0odjApOwotICAgIFVOVVNFRF9QQVJBTSh2MSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQg
djAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHYxKTsKLSAgICBV
TlVTRURfUEFSQU0odjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIsIEdDR0x1aW50IHYzKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFSQU0odjEpOwotICAgIFVOVVNFRF9QQVJB
TSh2Mik7Ci0gICAgVU5VU0VEX1BBUkFNKHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NH
THVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURf
UEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewot
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
bG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9j
YXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShk
YXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4
MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
dHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwot
ICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJB
TShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWlu
dCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQotewot
ICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNF
RF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0oeik7Ci0gICAgVU5VU0VEX1BBUkFNKHcpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1
aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50LCA0PiB2YWx1ZXMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwg
R0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKLXsKLSAgICBV
TlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFS
QU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHopOwotICAgIFVOVVNFRF9QQVJBTSh3KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgs
IEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0
ciBvZmZzZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0o
c2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShzdHJpZGUp
OwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwg
R0NHTHVpbnQgZW5kLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
cnQpOwotICAgIFVOVVNFRF9QQVJBTShlbmQpOwotICAgIFVOVVNFRF9QQVJBTShjb3VudCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBH
Q0dMZW51bT4gYnVmcykKLXsKLSAgICBVTlVTRURfUEFSQU0oYnVmcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dM
aW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHZhbHVlcykKLXsKLSAgICBV
TlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAg
VU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIp
OwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFN
KGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGlu
dCBkcmF3YnVmZmVyLCBHQ0dMZmxvYXQgZGVwdGgsIEdDR0xpbnQgc3RlbmNpbCkKLXsKLSAgICBV
TlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAg
VU5VU0VEX1BBUkFNKGRlcHRoKTsKLSAgICBVTlVTRURfUEFSQU0oc3RlbmNpbCk7Ci19Ci0KLVBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkp
OwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0
Zm9ybUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVl
cnkoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsK
LSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRR
dWVyeU9iamVjdHVpKFBsYXRmb3JtR0xPYmplY3QgcXVlcnksIEdDR0xlbnVtIHBuYW1lKQotewot
ICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlU2FtcGxlcigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewot
ICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kU2FtcGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVuaXQpOwotICAgIFVOVVNF
RF9QQVJBTShzYW1wbGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Ft
cGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCBwYXJhbSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW0pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgcGFyYW0pCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHBhcmFtKTsKLX0KLQotR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1w
bGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQot
ewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwot
ICAgIHJldHVybiAwLmY7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5h
bWUpCi0KLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHBu
YW1lKTsKLSAgICByZXR1cm4gMDsKLX0KLQotR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZlbmNlU3luYyhHQ0dMZW51bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKLXsK
LSAgICBVTlVTRURfUEFSQU0oY29uZGl0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1N5bmMoR0NHTHN5bmMgc3luYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMoR0NHTHN5bmMgc3luYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci19Ci0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGllbnRXYWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0x1aW50NjQgdGltZW91dCkKLXsKLSAgICBVTlVT
RURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKLSAgICBVTlVTRURfUEFS
QU0odGltZW91dCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dM
aW50NjQgdGltZW91dCkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BB
UkFNKGZsYWdzKTsKLSAgICBVTlVTRURfUEFSQU0odGltZW91dCk7Ci19Ci0KLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBu
YW1lKQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUp
OwotICAgIHJldHVybiAwOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBs
YXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGlkKTsKLX0KLQotR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZv
cm1HTE9iamVjdCBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVl
ZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpZCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0
aXZlTW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJpbWl0aXZlTW9kZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKLXsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywg
R0NHTGVudW0gYnVmZmVyTW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHZhcnlpbmdzKTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyTW9kZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZv
JikKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVk
YmFjaygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5z
Zm9ybUZlZWRiYWNrKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVp
bnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NH
THNpemVpcHRyIHNpemUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci19Ci0KLVZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHVuaWZvcm1OYW1lcykKLXsKLSAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1OYW1lcyk7
Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8R0NHTGludD4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lKQotewot
ICAgIFZlY3RvcjxHQ0dMaW50PiByZXN1bHQodW5pZm9ybUluZGljZXMuc2l6ZSgpLCAwKTsKLSNp
ZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQotICAgIEFTU0VSVChwcm9ncmFt
KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMu
c2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCByZXN1bHQuZGF0YSgpKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1HQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBy
b2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tOYW1lKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3Jt
QmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2Nr
SW5kZXgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1
bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrQmluZGluZykKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2Nr
QmluZGluZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxz
KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFS
QU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIFVOVVNFRF9QQVJBTShm
b3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBwYXJhbXMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0g
LCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhT
dWJJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSwg
R0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
bXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikK
LXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51
bSwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NH
TGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQs
IEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwg
R0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVu
dW0sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWks
IEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48
Y29uc3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsK
LSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkK
LXsKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVS
QVRJT04pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVt
ZW50c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xzaXplaSkKLXsKLSAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdD
R0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29u
c3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsKLSAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04p
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VT
YWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCB1bnBhY2tBbGlnbm1lbnQpCi17
Ci0gICAgQVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAy
IHx8IHVucGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKLSAgICBV
bmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOwotICAgIHVuc2lnbmVkIHNpemUgPSAwOwot
ICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgewotICAgICAgICBQaXhlbFN0b3JlUGFy
YW1zIHBhcmFtczsKLSAgICAgICAgcGFyYW1zLmFsaWdubWVudCA9IHVucGFja0FsaWdubWVudDsK
LSAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQs
IHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsIHBhcmFtcywgJnNpemUsIG51bGxwdHIsIG51bGxwdHIp
OwotICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgemVybyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25l
ZCBjaGFyPihzaXplKTsKLSAgICAgICAgaWYgKCF6ZXJvKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAs
IHNpemUpOwotICAgIH0KLSAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHpl
cm8uZ2V0KCksIHNpemUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcAppbmRleCBlNjZlMDBhZGIyODc1YWRmNjlhMTk3ZmNjNjky
MzE2ZGE2Zjk2ZTZlLi4yZjc3NDUyYTEzNjQyODgyM2Y2OTliYzI0MTM5YTVkMTgyZDZjMmEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcApAQCAt
MjgsOSArMjgsMTMgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKIAorI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCisjZWxzZQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgiCisjZW5kaWYKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJl
ZE1hbmFnZXIoKQpAQCAtNTYsNyArNjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlcjo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6YWRk
Q29udGV4dChHcmFwaGljc0NvbnRleHRHTFR5cGUqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwogICAgIGlmICghY29udGV4dCkKQEAgLTY2LDcgKzcwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQKICAgICBtX2NvbnRleHRzLmFwcGVuZChjb250ZXh0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
cjo6cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTFR5cGUqIGNvbnRleHQpCiB7CiAgICAg
aWYgKCFtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKQogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKaW5kZXggMGVmODZkYzZk
ZTdmMjFkNWU4ZTkxMjBlOWEzMmIwYThiMWYxZjczMS4uZmI1YzI4Yzk4ZDE4ZDg5OTUzOGQ3OTZl
YmMyMTg4YTdmNGM1OTQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TE1hbmFnZXIuaApAQCAtMzYsMTUgKzM2LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29u
c3QgdW5zaWduZWQgTWF4Q29udGV4dHMgPSAxNjsKIAorI2lmIFVTRShBTkdMRSkKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxzZQogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w7CisjZW5kaWYKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKICAg
ICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsK
IHB1YmxpYzoKKyNpZiBVU0UoQU5HTEUpCisgICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUeXBl
ID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCisgICAgdXNpbmcgR3JhcGhpY3NDb250
ZXh0R0xUeXBlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYKKwogICAgIHN0YXRp
YyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXImIHNoYXJlZE1hbmFnZXIoKTsKICAgICAK
LSAgICB2b2lkIGFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKLSAgICB2b2lk
IHJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lkIGFkZENv
bnRleHQoR3JhcGhpY3NDb250ZXh0R0xUeXBlKik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KEdy
YXBoaWNzQ29udGV4dEdMVHlwZSopOwogICAgIAogICAgIHZvaWQgcmVjeWNsZUNvbnRleHRJZk5l
Y2Vzc2FyeSgpOwogICAgIGJvb2wgaGFzVG9vTWFueUNvbnRleHRzKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0cy5zaXplKCkgPj0gTWF4Q29udGV4dHM7IH0KQEAgLTU5LDcgKzY5LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIoKSA9IGRl
ZmF1bHQ7CiAKLSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqPiBtX2NvbnRleHRz
OworICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRHTFR5cGUqPiBtX2NvbnRleHRzOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAppbmRl
eCAwNTc1NDQ0OGI5MDNlMTQ5OTNlZDMxYjBjYmQ2MWU4Njk0YTllZTk5Li45NzZlM2FiZTViYjNh
YzQwYWY4ZjIwYzllZTRlZThhMjU1M2IwYTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtODcsMTIgKzg3LDEwIEBAIFJlZlB0cjxHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
cjo6Y3JlYXRlKEdyCiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6On5HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIoKSA9IGRlZmF1bHQ7CiAKIEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyQmFzZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCi0vLyBGSVhNRTogQmVsb3cgZnVu
Y3Rpb25hbGl0eSBzaG91bGQgYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgotCiBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
R0w+IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZWQgPSBmYWxzZTsKQEAgLTEyNSwzMTQgKzEyMyw3IEBAIFJlZlB0cjxHcmFwaGljc0NvbnRleHRH
TD4gY3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4
CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQot
ewotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0ZXMud2Vi
R0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7Ci0jZW5k
aWYKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBMYXllciA9
IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7Ci0jZW5k
aWYKLSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0g
ICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hh
bmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJl
bmRlciBpbnRvLgotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1l
dGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0g
ICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
Z2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOwotCi0gICAgLy8gQ3JlYXRlIGFuIEZC
Ty4KLSAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0g
ICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fY29tcG9zaXRvclRleHR1cmUpOwot
ICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKLQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0
dXJlKTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdl
dCwgMCk7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KLSAgICBB
U1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAg
IGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmREcmF3
RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICBn
bDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAg
ICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KLSAgICAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9mYm87Ci0gICAgICAg
IGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAg
IGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQot
Ci0gICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0jZWxzZQotR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcykK
LXsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTExheWVyPigqdGhpcyk7Ci0jZWxzZQotICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtl
VW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOwotI2VuZGlmCi0K
LSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAg
YXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdl
ZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVy
IGludG8uCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6
OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gRkJPLgot
ICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOwotCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUp
OwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1
cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIEFTU0VS
VChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYg
KGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8g
PSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIDo6Z2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBp
ZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICA6
OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9
IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgotICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0KLSNpZiAhVVNFKE9QRU5H
TF9FUykKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwotCi0g
ICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7Ci0gICAgICAg
IG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMu
MiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBvdXB1
dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgotICAgICAgICAvLyBPcGVuR0wgdmVyc2lvbiAzLjIg
dXNlcyBHTFNMIHZlcnNpb24gMS41MC4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0
QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKLQotICAgICAgICAvLyBGcm9tIHZlcnNp
b24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQgYSBW
QU8gZm9yIHJlbmRlcmluZy4KLSAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRlZCBhbmQg
Ym91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJlTWFwcGVy
LCBXZWJHTCwgZXRjKS4gVGhpcyBpcwotICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRpb246IHRo
ZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdp
bGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCi0gICAgICAgIEdDR0xp
bnQgY3VycmVudFZBTyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlZFUlRF
WF9BUlJBWV9CSU5ESU5HKTsKLSAgICAgICAgaWYgKCFjdXJyZW50VkFPKSB7Ci0gICAgICAgICAg
ICBtX3ZhbyA9IGNyZWF0ZVZlcnRleEFycmF5KCk7Ci0gICAgICAgICAgICBiaW5kVmVydGV4QXJy
YXkobV92YW8pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRm9yIGxvd2Vy
IHZlcnNpb25zIHJlcXVlc3QgdGhlIGNvbXBhdGliaWxpdHkgb3V0cHV0IHRvIHRoZSBzaGFkZXIg
Y29tcGlsZXIuCi0gICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNM
X0NPTVBBVElCSUxJVFlfT1VUUFVUKTsKLQotICAgICAgICAvLyBHTF9QT0lOVF9TUFJJVEUgaXMg
bmVlZGVkIGluIGxvd2VyIHZlcnNpb25zLgotICAgICAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQ
UklURSk7Ci0gICAgfQotI2Vsc2UKLSAgICAvLyBBZGp1c3QgdGhlIHNoYWRlciBzcGVjaWZpY2F0
aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIEdMRVMzIChpLmUuIFdlYkdMMiBzdXBwb3J0KSB3YXMg
cmVxdWVzdGVkLgotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9jb21waWxlciA9IEFOR0xFV2Vi
S2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCAoYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3Jh
cGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMikgPyBTSF9XRUJHTDJfU1BFQyA6IFNI
X1dFQkdMX1NQRUMpOwotI2Vsc2UKLSAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2Uo
U0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMX1NQRUMpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIC8v
IEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291
cmNlczsKLSAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLQot
ICAgIEFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX0FUVFJJQlMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1h
eFZhcnlpbmdWZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFY
X1ZBUllJTkdfVkVDVE9SUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMpOwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVu
R0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0gICAgR0NH
TGludCByYW5nZVsyXSB7IH07Ci0gICAgR0NHTGludCBwcmVjaXNpb24gPSAwOwotICAgIGdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01FTlRfU0hB
REVSLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNp
b24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVsw
XSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwotCi0gICAgbV9jb21waWxlci5zZXRSZXNvdXJj
ZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19
Ci0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0woKQotewotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKLSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmICht
X2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29t
cG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0
QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAg
IGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwot
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAg
ICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7Ci0gICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVGQk8pOwotICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpIHsKLSNpZiAhVVNFKEFOR0xFKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgICAgICBp
ZiAobV9kZXB0aEJ1ZmZlcikKLSAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
bV9kZXB0aEJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKG1fc3RlbmNpbEJ1ZmZlcikKLSAgICAgICAg
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgot
ICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbDo6RGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLSAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsK
LSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotICAgIGlmIChtX3ZhbykKLSAgICAgICAgZGVsZXRl
VmVydGV4QXJyYXkobV92YW8pOwotI2VuZGlmCi19Ci0jZWxzZQotR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAg
ICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxl
dGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxldGVUZXh0dXJl
cygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0cmlidXRl
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMp
IHsKLSAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkgewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmICht
X2RlcHRoQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoQnVmZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIDo6Z2xEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotI2Vu
ZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxldGVWZXJ0
ZXhBcnJheShtX3Zhbyk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0jaWYgVVNF
KE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3Rh
dHVzKCkKLXsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBs
aWFudCgpIGNvbnN0Ci17Ci0jaWYgVVNFKEFOR0xFKQotICAgIHJldHVybiBtX2lzRm9yV2ViR0wy
OwotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAjaWYgVVNFKE5J
Q09TSUEpCiAgICAgcmV0dXJuICZtX25pY29zaWFMYXllci0+Y29udGVudExheWVyKCk7CkBAIC00
NDEsMzggKzEzMiw4IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiAh
VVNFKEFOR0xFKQotRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpIHsKLSNpZiBV
U0UoT1BFTkdMX0VTKQotICAgICAgICAvLyBnbEdldFN0cmluZ2kgaXMgbm90IGF2YWlsYWJsZSBv
biBHTEVTMi4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xP
cGVuR0xFUz4odGhpcywgIGZhbHNlKTsKLSNlbHNlCi0gICAgICAgIC8vIEZyb20gT3BlbkdMIDMu
MiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJlIHdlIG11c3QgdXNlIGdsR2V0
U3RyaW5naS4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xP
cGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKTsKLSNl
bmRpZgotICAgIH0KLSAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKLX0KLSNlbmRpZgotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGlu
ZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50ID09IFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVyZSkKLSAgICAgICAgbV9mYWls
TmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZUZvckRpc3BsYXkoKQotewotfQotCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBs
ZSgpCiB7CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpZiAoYXV0byBwaXhlbEJ1ZmZlciA9IHJl
YWRDb21wb3NpdGVkUmVzdWx0cygpKQpAQCAtNDgyLDExICsxNDMsNiBAQCBSZWZQdHI8TWVkaWFT
YW1wbGU+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9N
ZWRpYVNhbXBsZQogfQogI2VuZGlmCiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQotewotICAgIHJldHVy
biByZWFkUmVuZGVyaW5nUmVzdWx0cygpOwotfQotCiAjaWYgRU5BQkxFKFZJREVPKQogYm9vbCBH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlh
UGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0NHTGVudW0g
b3V0cHV0VGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgK
aW5kZXggZTQ2NjJiNjgzZWE0NWI2ZjE5NjZiMzE5NzMzOTMzMDNhYWY4NjA5NS4uZDFhYzBlYjdj
MGFkYTJmZjg4ZjE3OWRiOWNkNGVjMGEwNWU3NmNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaApAQCAtMjcsMTggKzI3LDM0IEBACiAKICNpZiBFTkFC
TEUoV0VCR0wpCiAKKyNpZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5oIgorI2Vsc2UKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
IHsKKyNpZiBVU0UoQU5HTEUpCit1c2luZyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJC
YXNlID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCit1c2luZyBHcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXJCYXNlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYK
KworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDog
cHVibGljIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2UgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyPiBjcmVhdGUoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIH5HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIoKTsKIAorICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlckJhc2Ugb3ZlcnJpZGVzLgorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCBmaW5hbDsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVyZUZyb21N
ZWRpYShNZWRpYVBsYXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGZp
bmFsOwogI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFT
YW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5k
aWYKKwogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcihXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlckFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKaW5kZXggMDg1Mzlh
N2Q5Mjk4MTE0NWRjMDYwMDFiNTc0Y2E4YzlhNzFmODk1NS4uMTQ3ODdiNWI3MDhjZTc5MjU5MDNk
YTViN2JjYTM5NmY4ZjIzZTY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAKICNpbmNsdWRl
ICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgorI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyLmgiCiAKICNpZiBVU0UoTklDT1NJQSkKICNpbmNsdWRlICJOaWNvc2lhR0NHTEFOR0xF
TGF5ZXIuaCIKQEAgLTQwLDcgKzQyLDEwNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybURpc3BsYXkoKSBjb25zdAorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAg
ICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCit7CisjaWYgRU5BQkxFKFdFQkdMMikK
KyAgICBtX2lzRm9yV2ViR0wyID0gYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3JhcGhpY3ND
b250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsKKyNlbmRpZgorI2lmIFVTRShOSUNPU0lBKQor
ICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcj4o
KnRoaXMpOworI2Vsc2UKKyAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFw
cGVyR0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlzKTsKKyNlbmRpZgorICAgIGJvb2wgc3VjY2VzcyA9
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vz
cyk7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKyAgICBhdHRyaWJ1dGVzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9u
LgorCisgICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpOworICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAgZ2w6Okdl
blRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFy
Z2V0LCBtX3RleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVy
ZVRhcmdldCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgIGdsOjpHZW5GcmFtZWJ1
ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBtX2Zibyk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgZ2w6OkdlblRl
eHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4
dHVyZVRhcmdldCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYo
dGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGds
OjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVy
ZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgZ2w6
OkdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGdsOjpCaW5kVGV4
dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsK
KworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCAwKTsKKyNlbmRpZgorCisgICAg
Ly8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFs
aWFzKSB7CisgICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVu
Y2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgorICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9z
dGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyAgICBnbDo6Q2xlYXJDb2xvcigw
LCAwLCAwLCAwKTsKK30KKworR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQoreworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAg
ICBpZiAobV90ZXh0dXJlKQorICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBvc2l0b3JU
ZXh0dXJlKQorICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1
cmUpOworI2VuZGlmCisKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygp
OworCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIGdsOjpEZWxldGVS
ZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAo
YXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6
RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwor
ICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsK
KyAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgZ2w6OkRlbGV0
ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgZ2w6
OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKyAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7
CisjZW5kaWYKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJ
QSkKICAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtRGlzcGxheSgpOwpAQCAtNDks
NyArMTQ5LDcgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnMKICNlbmRpZgogfQogCi1QbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9y
bUNvbmZpZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJ
QSkKICAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtQ29uZmlnKCk7CkBAIC01OCw3
ICsxNTgsMjggQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGxhdGZvcm1Db25maWcoKSBjb25zdAogI2VuZGlmCiB9CiAKLWJvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCitib29s
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisjaWYgVVNF
KE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgp
OworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hlY2tHUFVTdGF0
dXMoKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNldENvbnRleHRWaXNp
YmlsaXR5KGJvb2wpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFy
ZUZvckRpc3BsYXkoKQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc2hh
cGVEaXNwbGF5QnVmZmVyQmFja2luZygpCiB7CiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRy
aWJ1dGVzKCk7CiAgICAgY29uc3QgYXV0byBzaXplID0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKTsKQEAgLTgyLDcgKzIwMyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291
cmNlcygpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1M
YXllci5jcHAKaW5kZXggZjQ0YzdhMDkzNGFhMGIyZTMyNGFiMzgzOGI4ODhkYmQxMDdiMGFjNy4u
MTdmMjk0NDYyYzExNzE1YzNhY2M4YmJjNmJhZmViNjg0NDc5ZjU0MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6
OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYg
Y29udGV4dCkKK1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6VGV4dHVyZU1hcHBlckdD
R0xQbGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUmIGNvbnRleHQpCiAgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKIHsKICAgICBhdXRvIHNoYXJpbmdDb250ZXh0ID0gUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCkt
PnBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZv
cm1MYXllci5oCmluZGV4IGM3NGU3NTU0MjFlMGMxNGQ2NzE3YmRmOWIwNjNhNDdkODg2NGYyY2Qu
LmUzZWVkNmJiOWUzNjY2MjY5MzczNWMyY2NkMTBjZTFiN2U2ZDZlM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmgKQEAgLTIxLDcgKzIxLDcgQEAKIAog
I2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEp
CiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKKyAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5
ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSYpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJH
Q0dMUGxhdGZvcm1MYXllcigpOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAg
LTUwLDcgKzUwLDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmIG1fY29udGV4dDsKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xFJiBt
X2NvbnRleHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gbV9nbENvbnRleHQ7
CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xE
aXJlY3QyRC5jcHAKaW5kZXggMTIxNTBiMWQ1MGU1YmM4OTM3NGVhYTgxMWUyMzJiM2NjNTBmMzE1
MS4uM2I0Yjc1ODAyN2Y2OTY0ZTAwOWViMmU1NzIwZDRhM2MxYmNjZWRiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGly
ZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRHTERpcmVjdDJELmNwcApAQCAtNDgsNyArNDgsNyBAQCBib29sIEdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wgaQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBj
b25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xHTDo6cGFpbnRUb0Nh
bnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiB7CiAgICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVNpemUuaXNFbXB0eSgpIHx8IGNh
bnZhc1NpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KaW5kZXggOTU0NGI1MWMyNzhkZjU2
OWVhNGFiMGJmZWY3ZWY3NDRhYzUyYzczNS4uNmQ3NzA3ZDQwYzMyZjI4NDI5YzNkMzI0NTE1YTVj
YzY5Nzc2MWJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9X
ZWJDb3JlVGhyZWFkLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2Vi
Q29yZVRocmVhZC5tbQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW1wb3J0ICJDb21tb25WTS5oIgog
I2ltcG9ydCAiRmxvYXRpbmdQb2ludEVudmlyb25tZW50LmgiCi0jaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgogI2lt
cG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAj
aW1wb3J0ICJUaHJlYWRHbG9iYWxEYXRhLmgiCkBAIC03NywxMyArNzcsMTMgQEAgdm9pZCBSZWxl
YXNlV2ViVGhyZWFkR2xvYmFsU3RhdGUoKQogICAgIC8vIEluIHNpbmdsZS10aHJlYWRlZCBlbnZp
cm9ubWVudHMgd2UgZG8gbm90IG5lZWQgdG8gdW5zZXQgdGhlIGNvbnRleHQsIGFzIHRoZXJlIHNo
b3VsZCBub3QgYmUgYWNjZXNzIGZyb20KICAgICAvLyBtdWx0aXBsZSB0aHJlYWRzLgogICAgIEFT
U0VSVChXZWJUaHJlYWRJc0VuYWJsZWQoKSk7Ci0gICAgdXNpbmcgUmVsZWFzZVRocmVhZFJlc291
cmNlQmVoYXZpb3IgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UmVsZWFzZVRo
cmVhZFJlc291cmNlQmVoYXZpb3I7CisgICAgdXNpbmcgUmVsZWFzZVRocmVhZFJlc291cmNlQmVo
YXZpb3IgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpSZWxlYXNlVGhyZWFkUmVz
b3VyY2VCZWhhdmlvcjsKICAgICAvLyBGb3Igd2ViIHRocmVhZCwganVzdCByZWxlYXNlIHRoZSBj
b250ZXh0IGFzIHdlIGtub3cgd2Ugd2lsbCBzZWUgY2FsbHMgdG8gaXQgYWdhaW4uCiAgICAgLy8g
Rm9yIG5vbi13ZWIgdGhyZWFkcywgZS5nLiB0aGlyZC1wYXJ0eSBjbGllbnQgdGhyZWFkcywgd2Ug
ZG9uJ3Qga25vdyBpZiB3ZSBldmVyIHNlZSBhbm90aGVyIGNhbGwgZnJvbSB0aGUKICAgICAvLyB0
aHJlYWQsIHNvIHdlIGFsc28gcmVsZWFzZSB0aGUgdGhyZWFkIHJlc291cmNlcy4KICAgICBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNlQmVoYXZpb3IgPQogICAgICAgICBXZWJU
aHJlYWRJc0N1cnJlbnQoKSA/IFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpSZWxlYXNl
Q3VycmVudENvbnRleHQgOiBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6UmVsZWFzZVRo
cmVhZFJlc291cmNlczsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVs
ZWFzZVRocmVhZFJlc291cmNlcyhyZWxlYXNlQmVoYXZpb3IpOworICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMocmVsZWFzZUJlaGF2aW9y
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKaW5kZXggYWM5NTk1MjBhMmUzZGZh
ZDlmY2Q4MmIzOTJmMTBhOWE1YTYwNDg0MC4uODRiMmU2ODQ1ZDA3NDljZGFhMWU3OGI4NTMwZDhm
OGVhNWEwZTA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC0yMzYsNyArMjM2LDcg
QEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VC
dWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3IKICAgICAgICAgICAgIC8vIEhlcmUgd2UgZG8gbm90
IHRyeSB0byBwbGF5IGJhY2sgcGVuZGluZyBjb21tYW5kcyBmb3IgaW1hZ2VCdWZmZXIuIEN1cnJl
bnRseSB0aGlzIGNhbGwgaXMgb25seSBtYWRlIGZvciBlbXB0eQogICAgICAgICAgICAgLy8gaW1h
Z2UgYnVmZmVycyBhbmQgdGhlcmUncyBubyBnb29kIHdheSB0byBhZGQgZGlzcGxheSBsaXN0cy4K
ICAgICAgICAgICAgIGlmIChwaXhlbEJ1ZmZlcikKLSAgICAgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb250ZXh0QXR0cmlidXRlcywgV1RGTW92ZSgq
cGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50VG9DYW52
YXMoY29udGV4dEF0dHJpYnV0ZXMsIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXIt
PmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuY2xlYXJSZWN0KHsgSW50
UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkgfSk7CiAgICAgICAgICAgICAvLyBV
bmZvcnR1bmF0ZWx5ICJmbHVzaCIgaW1wbGVtZW50YXRpb24gaW4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCBvdmVybG9hZHMgb3JkZXJpbmcgYW5kIGVmZmVjdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNS
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJH
TFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCmluZGV4IDVhNmNlNjVlNzQ0N2QyNGUxZTc3
MzYwZjJkOGNmZTY0ZWE4OGIzMmEuLjBkYTdiOTVkMTRlOWFkZmNkZDM2NjkzOTkzM2Q4MDBmMDBi
ZjhmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29w
ZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Qu
Y3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRH
TC5oIgogI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYv
U2Vjb25kcy5oPgogCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgU2NvcGVkV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXMoKQogICAgIGlmIChz
X3JlcXVlc3RzKQogICAgICAgICByZXR1cm47CiAgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xT
dHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbXSB7Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6VGVybWluYXRl
QW5kUmVsZWFzZVRocmVhZFJlc291cmNlcyk7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6OlRlcm1pbmF0ZUFuZFJl
bGVhc2VUaHJlYWRSZXNvdXJjZXMpOwogICAgIH0pOwogfQogCg==
</data>
<flag name="commit-queue"
          id="470554"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445393</attachid>
            <date>2021-11-30 01:04:57 -0800</date>
            <delta_ts>2021-11-30 02:19:57 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211130110455.patch</filename>
            <type>text/plain</type>
            <size>577814</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5iZjg5NTYxODJiZmMyMjEzZTU0YmFjMzMwNDk0NWUzYjZi
MjI0ZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEzMTMsNiArMTMxMyw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMU3RhdGUu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJGYWN0b3J5LmgKQEAgLTE0MDUsNiArMTQwNiw3IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0FOR0xF
SGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGlsaXRpZXMuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4MDExODYuLjE1
ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N2
L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggN2I2ZDU2MTQ2
OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVjMmQ1MzE4YWIz
OTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEzNiw2IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNv
L0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09WVFRD
dWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5h
Z2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTkyOTQ5ODk1MjBj
MjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxp
dGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKLXBsYXRmb3Jt
L2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVyLm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGQ5
ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJlZTAyNmE2YTlk
MTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBACiAJCTdBRjlC
MjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpT
VlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJl
Z2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlEMjU0OTcyMDEw
MEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhDMUFDIC8qIEdy
YXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29j
b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAz
MzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYwOTRERDI3MEM0
NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0
aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFj
ZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNl
U3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQ
VVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1
ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIzMDA4QUMwMjMg
LyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZF
OTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVEMjc1NEZGN0Mw
MDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYwQ0UgLyogR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0NoZWNrc01hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCNjgwQjgy
NUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAyMTAwMzg2NTlF
IC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBHcmFwaGljc0Nv
bnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVG
IC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRU
UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBBMThDRkI1RjMw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8qIEdyYXBoaWNz
Q29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEwMzM5QzI1NDk3
MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFw
aGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlEMjU0OTcyMDEw
MEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNz
Q29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IxNjE5MTAyNzE5
ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4MEM3MCAvKiBH
cmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1Nyw4IEBACiAJ
CTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhDIC8qIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdC
OTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBH
cmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEltYWdl
RXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0QTQ3MjUzNzc2
QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJCTZFMjdGMjQz
MjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJCQkJNkUyN0Yy
NDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJCQkJNkUyN0Yy
NDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwICovLAorCQkJ
CTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8s
CiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0dGluZy5j
cHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0
dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8sCiAJCQkJ
N0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2
ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5
IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyog
R3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBAQAogCQkJCTdC
OEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJCTdCOEVENUVG
MjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEwMzM5RDI1NDk3
MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdCMTAzMzlBMjU0
OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICovLAotCQkJCTdC
MTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCAqLywK
KwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
LmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8qIEltYWdlUm90
YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdGRjkgLyogSW1h
Z2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQg
LyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0MjYyLDE2IEBA
CiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3JhcGhpY3NDb250
ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3MDIzQTk2OTcz
MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCOTVD
RkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIxMDAzODY1OUUg
LyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IxMDMzOUUy
NTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFkZXJzICovLAot
CQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGlj
c0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4MjUzNzc2Q0Ew
MDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8qIEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0
MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0Eu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5MTVmYTVmNzRk
YzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2MzQ1NTlmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0
cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwg
Y29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wg
ZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCBzb3VyY2VJ
bWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxp
Z25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNh
bnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGludCBtX2N1cnJl
bnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xT
dGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNiNGQ3ZTljZWUx
ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50
ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJh
aXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNzQ29udGV4dEdM
U3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBHQ0dMdWludCBi
b3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4dHVyZU1hcCA9
IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwgR0NHTGVudW0+
LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJhaXRzPFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5kVGV4dHVyZU1h
cCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0KKyAgICBHQ0dM
dWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOwor
ICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gYm91
bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91bmRUYXJnZXQo
R0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9y
ID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0
b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
LT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQgc2V0
Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0dXJlLCBHQ0dM
ZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0KHRleHR1cmVV
bml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisKKyAgICB1c2lu
ZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIEludEhhc2g8R0NH
THVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Cisg
ICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVu
c2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYwZmI1ZWUxYWMz
OTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2NDBmZDRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNp
b25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNpbmNsdWRlICJF
eHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dMQU5HTEU6OkV4
dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0KQorRXh0ZW5z
aW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIGNv
bnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKICAg
ICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5kZXggMGE2MWVm
YzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRiOWY2MTVjM2Iz
YTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0zMiwxMyArMzIs
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4dGVuc2lvbnNH
TEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRp
YXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMuCi0gICAgZXhw
bGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICAv
LyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVuc2lvbnNHTEFO
R0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRlbnNpb25zR0xB
TkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4ICs2NCw4IEBA
IHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRlbnNpb25zOwog
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAgLy8gV2VhayBw
b2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFjayB0byBHcmFw
aGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIG1fY29udGV4
dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0aW5nLXBvaW50
IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAgICBib29sIG1f
d2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0
R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBkZmEyYjdhNTA5
Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCiAK
ICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIu
aD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElP
TikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBkZWZpbml0aW9u
IHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAgLTc2LDggKzcx
LDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdDR0xlbnVtIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCitHQ0dM
ZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgp
CiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEpCiAgICAgICAg
IEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3JtQ29uZmlnKCks
IEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQorR0NHTGVudW0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZv
ckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBzd2l0Y2ggKGRy
YXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyArOTksNyBAQCBH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRGb3JEcmF3
aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChH
Q0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1RhcmdldCkgewog
ICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZvckRyYXdpbmdU
YXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHJl
bGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVsZWFzZVRocmVh
ZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNlQmVoYXZpb3Ip
CiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAgLTE2MSw3ICsx
NTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xfUmVsZWFzZVRo
cmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRz
KCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRy
eUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpAQCAtMTg3LDE0
ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBwaXhlbEJ1ZmZl
cjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1dGVz
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKIHsK
ICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygpLmFscGhhID8g
R0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwocGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgYXV0byBh
dHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53
aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11c3RSZXN0b3Jl
RkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0
ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YXR0YWNo
RGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRycyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50
ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZFNjaXNzb3Io
R0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNj
b3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAgZ2w6OlJlbmRl
cmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDR0xlbnVtIHBu
YW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBn
bDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwgbnVsbHB0ciwg
dmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0NHTGVu
dW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48R0NHTGludCwg
Mj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRl
clR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUs
IHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAgICAgICAgIGlu
dGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihnZXRFeHRlbnNp
b25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwg
Zm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
ZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3Vu
ZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFr
ZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQpLCAwKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0wK
ICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2Uy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5
b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewog
ICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBi
b3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRh
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBtYWtl
R0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xz
aXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2
b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xhbXBm
IHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRo
UmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGdsOjpEZXB0aFJh
bmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oekZhcikp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFt
cGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVwdGgoR0NHTGNs
YW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVwdGhmKHN0YXRp
Y19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lvbnMpCiAgICAg
ICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+KHRoaXMpOwog
ICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkblBpeGVs
cyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRh
KQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0YS5kYXRhLCBm
YWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxzKEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJbXBsKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBsZW5ndGgsIEdD
R0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0YSwgYm9vbCBy
ZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMsIEdDR0xzaXpl
aSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZmZXJPYmplY3Qp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxz
SW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYKIH0KIAotLy8g
VGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZvbGxvdywgcG9y
dGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0
ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCiB7
CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwogICAgIC8v
IEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZvcm1zIGFyZSBu
b3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1MTYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBj
aGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpw
cmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQogICAgICAgICBy
ZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFTU0VSVCghbV9s
YXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1zdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVSZWFkRnJhbWVi
dWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5ib3VuZFJlYWRG
Qk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpAQCAtNTg3LDcg
KzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc2hh
cGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRX
aWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1cm47CkBAIC02
NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4Miw3
ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJlKEdD
R0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRl
cik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0
YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KICAgICBnbDo6
QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGlu
ZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpi
aW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03
MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBy
ZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0CiB9CiAK
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVy
ZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGdsOjpCaW5kVGV4
dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBm
IGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1
ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NH
TGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2Rl
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51
bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2Rl
QWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5k
RXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9CiAKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdD
R0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyhH
Q0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVu
dW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBz
cmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFs
cGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dM
ZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVt
IGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQgogICAgIGds
OjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBz
aXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBH
Q0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xT
cGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJT
dWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZmZXJTdWJEYXRh
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lkPiBk
YXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51
bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0
LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwg
R0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3
cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdl
dCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3Jp
dGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGlu
dD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJuYWxmb3JtYXRp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0aXZSb2J1c3RB
TkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXplLCBudWxscHRy
LCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxl
cywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODQ4LDcgKzg0
Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBtX3N0YXRlLnRl
eHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2
ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZl
bHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZv
aWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UzRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxz
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAgZ2w6OlRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6ZSwgcGl4ZWxz
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVs
LCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQp
LCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50
IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50
IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmYKICAg
ICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdWJJbWFn
ZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQs
IGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNl
dCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bh
bihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51
bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4OTQsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlM0RSb2J1
c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xz
aXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dM
aW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXpl
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNldCks
IDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xT
cGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhv
ZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5MDcsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1YkltYWdlM0RS
b2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6ZSwgZGF0YS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xp
bnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5
b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0QodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZv
cm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNv
bnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKK1Zl
Y3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtcyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1J
bmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVu
aWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpAQCAtOTI5LDcg
KzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwpAQCAt
OTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6OkNoZWNrRnJh
bWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBH
Q0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQ29sb3IoR0NH
TGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk0NSw3
ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdDR0xj
bGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFyQ29sb3Iociwg
ZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xi
aXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhcihHQ0dMYml0
ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NjIsNyArOTU2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NH
TGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dM
Ym9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwgR0NHTGJvb2xl
YW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGls
ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGls
ZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
IHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVT
aGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNvbXBpbGVTaGFk
ZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2Uy
RERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVy
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEwMTYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEwMzMsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoZnJhbWVi
dWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkN1
bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1
bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhGdW5j
KEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVuYyhmdW5jKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFu
IGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhHQ0dMYm9vbGVh
biBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
cHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxhZyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNo
YWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMTwogICAg
IGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpEaXNh
YmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODksNyArMTA4Myw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51
bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpCiAg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdF
bGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZW5h
YmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2FwKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NH
THVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQog
ICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1c2goKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMzks
NyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKICAgICBn
bDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dM
ZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVy
ZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51
bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTU2
LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE2NCw3ICsx
MTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDR0xlbnVt
IG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3Miw3ICsx
MTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NH
TGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICBpZiAo
IXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBA
IC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJp
YihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwgaW5mbyk7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7
CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURf
VkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
Y3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVu
aWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5m
byYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaW5k
ZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hl
ZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdD
R0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVj
dCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpZiAoIXByb2dy
YW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAgaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0cmliTG9jYXRp
b25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3Qo
KQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJuIG1vdmVkQW5F
cnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkK
K0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsKICAgICBpZiAo
IW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVkIHRvIG1vdmUg
dGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCkBA
IC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMzA3LDcg
KzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dM
ZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMxNSw3
ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2RlKTsKIH0KIAot
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKICAg
ICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xMzM0
LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFi
bGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXApOwogfQogCi1H
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewogICAgIGlm
ICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzNDUsNyArMTMz
OSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVy
KFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJc0ZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQog
ewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTM1Niw3
ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1Byb2dyYW0ocHJv
Z3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRl
cmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVy
YnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZQogICAgIHJl
dHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
KQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2w6
OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
IHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzODks
NyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1
cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNUZXh0dXJlKHRl
eHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0aCh3aWR0aCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogICAgIGds
OjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFj
dG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5p
dHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdD
R0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2FtcGxlQ292
ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAsNyArMTQyNCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFt
cGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVyYWdlKHZhbHVl
LCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xNDUxLDcgKzE0
NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJTb3VyY2Uoc2hh
ZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NH
TGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0
ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NTks
NyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdD
R0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCBy
ZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxG
dW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdD
R0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLAogICAg
IGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3
NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2so
R0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwg
R0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3Nyw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0g
ZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBt
YXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xl
bnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBH
Q0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtCiAg
ICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51
bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZh
aWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWls
LCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQ
YXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsxNTAxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyArMTUxNyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAg
IGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5kYXRhKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5p
Zm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NF
UlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpV
bmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2
Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyArMTU3Niw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9jYXRpb24sIGFy
cmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50
IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlmb3JtMWkobG9j
YXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBh
cnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBH
Q0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGds
OjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NH
TGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGlu
dCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFy
cmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBh
cnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdD
R0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00aShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYz
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAgZ2w6OlVuaWZv
cm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQogewogICAgIEFT
U0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGluCiAgICAgZ2w6
OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJh
CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9z
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAgICAgQVNTRVJU
KCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJy
YXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZT
aXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTY3NSw3ICsx
NjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAg
Z2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjFm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xm
bG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBH
Q0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBnbDo6VmVy
dGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0
cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRl
eEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEs
IEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZgog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
CiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4
LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBnbDo6VmVydGV4
QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4g
YXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cKICAgICBnbDo6
VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkg
c3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51
bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsCiAgICAg
Z2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0
cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zm
c2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJ
UG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dM
c2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwg
R0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc3Myw3
ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBv
aW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVydGV4QXR0cmli
SVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZp
ZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDCiAgICAgZ2w6
OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE3OTQsNyAr
MTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xP
YmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgw
Niw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4
QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0ZVZlcnRleEFy
cmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFy
cmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTE4
MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Zl
cnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRl
eEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4MjgsNyAr
MTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQ
bGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFycmF5T0VTKGFy
cmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NH
TGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xi
b29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+CiAg
ICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNpemUsIG51bGxw
dHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAgR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGZsb2F0
PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xFKHBuYW1lLCB2
YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdDR0xpbnQ2NCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQorR0NH
TGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFt
ZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dM
ZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCiB7CiAg
ICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYsNyBAQCBHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJv
Z3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBH
Q0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg5
MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3Jh
bWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVybiB2YWx1ZTsK
IH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9n
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJp
bmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1hbmdsZWRJbmZv
TG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBT
dHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAgVU5VU0VEX1BB
UkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0s
CiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFtSW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0x
OTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dy
YW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4gZ2V0VW5tYW5n
bGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7CiB9
CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmkoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChzaGFkZXIpOwog
ICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwg
R0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK1N0
cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTczLDEyICsxOTY3
LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhz
aGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCkKK1N0
cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZsb2F0IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFy
YW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9h
dCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTk4Nyw3
ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJh
bWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQog
ewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
TGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
TGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvYwog
ICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6
ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2Nh
dGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3ICsyMDE3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVpdlJvYnVzdEFO
R0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0K
IAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBA
IC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAgIHJldHVybiBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAK
LUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0ciBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0wK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAgIHJldHVybiBv
OwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNy
ZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICByZXR1cm4gbzsK
IH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJv
Z3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVBy
b2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVhdGVQcm9ncmFt
KCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogICAgIHJldHVy
biBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIwODMsNyBAQCBQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIoR0NH
TGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVO
VF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7CiB9CiAK
LVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUo
KQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVUZXh0dXJl
KCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVi
dWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAgICBnbDo6RGVs
ZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6RGVsZXRlUHJv
Z3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5k
ZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogICAgIGds
OjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkRlbGV0ZVNo
YWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2MSw3ICsyMTU1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9y
bUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFs
bCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6
ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5
bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQgdG8gbW92ZSB0
aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCiAgICAgLy8g
cHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2ls
bCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50aGV0aWNFcnJv
cnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VD
b250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExv
c3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykp
CiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250ZXh0KCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWRO
b3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNwYXRjaENvbnRl
eHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5n
ZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkg
Y291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNp
emVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwg
R0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NH
THNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVp
IHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0VsZW1lbnRzSW5z
dGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVt
IG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4
LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMjMsNyArMjIx
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3Io
R0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0ZXhBdHRyaWJE
aXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIyNiw3IEBAIEdD
R0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3JtQmxvY2tJbmRl
eChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1TdHJpbmcg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkKK1N0cmluZyBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7CiAgICAgQVNT
RVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjUyLDcg
KzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBTdHJpbmcoYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9j
a0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAog
CiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0dXJuIG5hbWU7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGdsOjpCZWdpblF1
ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
bmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVu
ZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6OkVuZFF1ZXJ5
KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVy
eU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50IEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lKQogCiAv
LyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAt
MjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9y
bUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRi
YWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAgICAgZ2w6OkRl
bGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwogfQogCi1HQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0
Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9y
bUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJh
bnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNr
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMzM0LDcgKzIz
MjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJh
Y2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJhbnNmb3JtRmVl
ZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhH
Q0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2RlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM1MCw3ICsy
MzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZm
ZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZh
cnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFt
LCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3MuZGF0YSgpLCBi
dWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0gMDsKLSAgICBn
bDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAgZ2w6OkdldFBy
b2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZPUk1fRkVFREJB
Q0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZTaXplKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRC
dWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsCiAgICAg
Z2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dM
aW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBH
Q0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQg
bWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwg
R0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RY
MSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDAz
LDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZm
ZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpCbGl0RnJhbWVi
dWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRz
dFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1l
bnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NHTGludCBsYXll
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVMYXllcih0YXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNw
YW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0YXJnZXQsIGF0
dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFy
Z2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihH
Q0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRCdWZmZXIoR0NH
TGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNyYyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQs
IEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZl
clRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZy
YWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIC0x
OwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMKICAgICByZXR1
cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NH
THVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDc2LDcg
KzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtMnVpKGxv
Y2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkoR0NHTGludCBs
b2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDg0LDcgKzI0
NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtM3VpKGxvY2F0
aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1
aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWlu
dAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWlu
dD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGds
OjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8g
MiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjUxOCw3ICsy
NTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9ybTN1aXYobG9j
YXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1CiAg
ICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyArMjUzMCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDNmdihsb2Nh
dGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkK
IHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwg
dHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NF
UlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
QEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVu
aWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJhbnNwb3NlLCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTcyLDcg
KzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlmb3JtTWF0cml4
M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVmU2l6ZSAlIDEy
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyArMjU3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDNmdihsb2Nh
dGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGluZGV4
LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4Myw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShpbmRleCwgeCwg
eSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
Ykk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyArMjU5MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aXYoaW5kZXgs
IHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVp
bnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0
cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQg
eiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdQog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xl
bnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBH
Q0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcKICAgICBnbDo6
RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+
IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6OkRyYXdCdWZm
ZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZl
ciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdD
R0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIsIGRyYXdidWZm
ZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFu
PGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNs
ZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFs
dWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZl
ciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlcy5kYXRh
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50
IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyZmkoR0NH
TGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGlu
dCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsCiAgICAg
Z2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKICAgICBnbDo6
RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJuIGdsOjpJc1F1
ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVlKTsKIH0KIAot
UGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigp
CitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVNhbXBsZXIo
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAgICBnbDo6RGVs
ZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiAgICAgcmV0
dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5p
dCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcyMyw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIs
IHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBs
ZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdD
R0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2FtcGxlclBhcmFt
ZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNh
bXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6
OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLUdDR0xmbG9h
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NHTGZsb2F0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2Jq
ZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
ciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNh
bXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUp
CiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwKICAgICByZXR1
cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5
bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dMc3luYyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0
ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYQog
ICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQogCi1HQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCitHQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMgc3luYykKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMoc3luYyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3lu
YykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dMc3luYyBzeW5j
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5
bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0KIAotR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMs
IEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVudW0gR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZp
ZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4OSw3ICsyNzgz
LDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdD
R0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNsaWVudFdhaXRT
eW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50
NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5bmMoR0NHTHN5
bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNzk3LDcgKzI3
OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3luYyhzeW5jLCBm
bGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKIHsK
ICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNr
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFu
c2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgy
Myw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgz
MSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlclJh
bmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6QmluZEJ1ZmZl
clJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0KIAotVmVjdG9y
PEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVz
KQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtSW5k
aWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlm
b3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWludD4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJv
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBwYXJhbXMpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1
aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJsb2NraXZSb2J1
c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcy5idWZTaXpl
LCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0FycmF5
c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NH
TFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg1OSw3
ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlz
QU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVsdGlEcmF3QXJy
YXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xT
cGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGlu
c3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkg
ZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTCiAgICAg
Z2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5kYXRhLCBjb3Vu
dHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2Rl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2Rl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yODgwLDcgKzI4
NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0FO
R0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURyYXdFbGVtZW50
c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCksIGRyYXdjb3Vu
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBj
b3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg5
Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxl
bWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6TXVsdGlEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwgcG9pbnRlcnMu
ZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQorYm9vbCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogewogICAgIHNp
emVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVDb21wbGV0aW9u
RmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKQEAg
LTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5k
VXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50
Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JU
ZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3BsYXlXYXNS
ZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChl
dmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1cmUpIHsKKyAg
ICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVuZGVyaW5nUmVz
dWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBwYWlu
dFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1h
Z2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVh
ZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RGTW92ZSgqcGl4
ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0
KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBSZWFk
aW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3
aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVk
QWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byByZXN1bHRzID0g
cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1bHRzICYmICFy
ZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1bHRzLT5mb3Jt
YXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0cy0+Zm9ybWF0
KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAgLy8gRklYTUU6
IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJvd0J5dGVzIGFu
ZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXplID0gcmVzdWx0
cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6ZS53aWR0aCgp
ICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRhdGEoKTsKKyAg
ICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAxKSAqIHJvd1N0
cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChuZXcgdWludDhf
dFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9wICs9IHJvd1N0
cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5KHRlbXAuZ2V0
KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0b20sIHRvcCwg
cm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCksIHJvd1N0cmlk
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3N0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdS
ZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJl
dHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWlu
dGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlYWRDb21w
b3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRlMzBiY2JjNDc3NDViYjhiNDIxNTI3YmZkMzQ5YmFkNjc3YmQwNjcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSU9T
dXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0
LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29zaWEgeworY2xh
c3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBIb3N0V2luZG93
OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNzIFBpeGVsQnVm
ZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQ
bGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBoaWNzQ29udGV4
dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7CisgICAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0OworICAgIEdD
R0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGljIEdDR0xlbnVt
IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVt
IGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdCdWZmZXJUZXh0
dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKKyAgICBl
bnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAgICAgLy8gUmVs
ZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgY2FsbHMg
ZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCisgICAg
ICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlVGhyZWFk
UmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQg
YmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisgICAgICAgIC8v
IGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFz
ZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9u
LCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAgdm9pZCBwcmVw
YXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlvbiB3aXRob3V0
IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAgaW50IGdldEF0
dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2luZyB0aHJvdWdo
IEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0KTsK
KworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09
MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8vIEdyYXBoaWNz
Q29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdCBm
aW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkgZmluYWw7Cisg
ICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZv
cm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgZmluYWw7Cisg
ICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmlu
YWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVuZENvbG9yKEdD
R0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFt
cGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKSBm
aW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBH
Q0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAgdm9pZCBidWZm
ZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEsIEdD
R0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZp
bmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0
KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5hbDsKKyAgICB2
b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFt
cGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVhckRlcHRoKEdD
R0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDR0xpbnQgcykg
ZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFsOworICAgIHZv
aWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlUZXhTdWJJbWFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dM
aW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0gbW9kZSkgZmlu
YWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7CisgICAgdm9pZCBk
ZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdD
R0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9pZCBkZXRhY2hT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0FycmF5cyhHQ0dM
ZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFsOworICAgIHZv
aWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxlKEdDR0xlbnVt
IGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBp
bmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lkIGZsdXNoKCkg
ZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9udEZhY2UoR0NH
TGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJn
ZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBib29sIGdldEFj
dGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7CisgICAgYm9vbCBn
ZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBs
YXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGdl
dEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpIGZp
bmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZpbmFsOworICAg
IHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVl
KSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkgZmlu
YWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGlu
dD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5h
bWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5nIGdldFVubWFu
Z2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25zdCBTdHJpbmcm
KTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJpKFBsYXRmb3Jt
R0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5m
b0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25UeXBlLCBHQ0dM
U3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5hbDsKKyAgICBT
dHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIFN0cmlu
ZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0IGdldFRleFBh
cmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NH
TGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7CisgICAgdm9p
ZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRVbmlmb3JtdWl2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
THVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0
Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdDR0xzaXplaXB0
ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKSBm
aW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKSBmaW5h
bDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAgICBHQ0dMYm9v
bGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIEdDR0xib29s
ZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBp
c1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBp
c1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RleHR1
cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgoR0NHTGZsb2F0
KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFs
OworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5p
dHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCByZWFkblBp
eGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBm
aW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSBm
aW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29s
ZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgc2hh
ZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIHZv
aWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2sp
IGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dM
ZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBz
dGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2Vw
YXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBzdGVu
Y2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKSBmaW5h
bDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZh
aWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAgdm9pZCB0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7
CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXpl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCBjb21wcmVz
c2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQg
Ym9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7Cisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhv
ZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgpIGZpbmFsOwor
ICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCB1
bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdikg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB4LCBH
Q0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6KSBmaW5h
bDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikgZmluYWw7
CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgsIEdDR0xm
bG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0
Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHkp
IGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQg
eikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBmaW5hbDsKKyAg
ICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwg
R0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAgdm9pZCBkcmF3
QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBj
b3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxlbWVudHNJ
bnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKSBmaW5h
bDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmluYWw7CisgICAg
dm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQg
YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgY29weUJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdD
R0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRy
KSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3Jj
WDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQg
ZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIp
IGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZUZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRz
KSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAgdm9p
ZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlcm5hbGZv
cm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVz
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5hbDsKKyAgICB2
b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFn
ZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdD
R0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0
aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGlu
dCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZz
ZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7Cisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBH
Q0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAg
R0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVp
bnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3VpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+KSBmaW5h
bDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHVu
aWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aShH
Q0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3
KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6
LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5hbDsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0
LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0
ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NH
TGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZm
ZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2
b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVF1
ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5
KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkp
IGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KSBm
aW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0dWkoUGxhdGZv
cm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBsYXRmb3JtR0xP
YmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2FtcGxlcihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU2FtcGxlcihQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAgICB2b2lkIHNh
bXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUs
IEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmYoUGxhdGZv
cm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5h
bDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBz
YW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTYW1wbGVyUGFy
YW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsK
KyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQg
ZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykgZmluYWw7Cisg
ICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBjbGllbnRX
YWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQp
IGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywg
R0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2koR0NHTHN5bmMs
IEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVRyYW5z
Zm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQ
bGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RyYW5zZm9ybUZl
ZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmluZFRyYW5zZm9y
bUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkgZmluYWw7Cisg
ICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpIGZp
bmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZpbmFsOworICAg
IHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lkIHBhdXNlVHJh
bnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9ybUZlZWRiYWNr
KCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1
aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAgdm9pZCBiaW5k
QnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZpbmFsOworICAg
IFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsKKyAgICBWZWN0
b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpIGZp
bmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1CbG9ja0Jp
bmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRl
eCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9pZCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJ
bmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykgZmluYWw7Cisg
ICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dM
c2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0FycmF5c0luc3Rh
bmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywg
R0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXpl
aT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworICAgIHZv
aWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
b2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtdWx0aURy
YXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBv
ZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6
ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZUJ1ZmZl
cigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKSBmaW5h
bDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsKKyAgICBQbGF0
Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xP
YmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5h
bDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lk
IGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBzeW50aGVz
aXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdldEV4dGVuc2lv
bnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2
ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsKKyAgICB2b2lk
IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAg
IHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCk7Cisg
ICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOworICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5k
ZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworCisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CisjZW5kaWYKKyAgICB1bnNp
Z25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKTsKKworICAgIGNvbnN0ZXhwciBzdGF0
aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQ
TEFZOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZl
RGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5
cGUsIC0xKTsKKyAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQ
ZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwor
I2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xFKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJs
aWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICAvLyBDYWxs
ZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRo
YXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2Vy
J3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKKyAgICAvLyBpbiBwYXJ0
aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBv
cgorICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMg
b2YgdGhlIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQgdmFsaWRhdGVE
ZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKKyAg
ICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgdm9pZCByZWFkblBpeGVsc0ltcGwo
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpKiBsZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9p
ZCogZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCk7CisKKyAgICAvLyBEaWQg
dGhlIG1vc3QgcmVjZW50IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUgaW4gYW4gYWNj
ZXB0YWJsZSBzdGF0ZT8KKyAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsKKworICAgIGJv
b2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcHJlcGFyZVRleHR1cmVJ
bXBsKCk7CisgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IElu
dFJlY3QmID0gSW50UmVjdCgpKTsKKyAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZl
cklmTmVlZGVkKEdDR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpOworCisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIGFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZm
ZXJCYWNraW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CisgICAgc3RhdGljIGJv
b2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXksIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wpOworI2VuZGlmCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBjb250
ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgorICAgIGJvb2wgd2FpdEFuZFVwZGF0
ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gUGxhdGZvcm0gc3Bl
Y2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICBzdGF0aWMgdm9pZCBw
bGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKKworICAgIEdDR0x1aW50IG1fdGV4dHVy
ZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsQ29sb3JGb3JtYXQg
eyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCB7IDAgfTsK
KyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OworICAgIEdDR0x1aW50IG1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyIHsgMCB9OworICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6
dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCisgICAgR0NHTHVpbnQgbV9wcmVzZXJ2ZURyYXdp
bmdCdWZmZXJUZXh0dXJlIHsgMCB9OworICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVyZSB3aGVuIG1f
cHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KKyAgICBHQ0dMdWludCBt
X3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKKyAgICAvLyBRdWVyaWVkIGF0IGRpc3Bs
YXkgc3RhcnR1cC4KKyAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCB7IC0x
IH07CisgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgorICAgIExp
c3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKyAgICBib29sIG1faXNGb3JX
ZWJHTDIgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3VudCB7IDAgfTsK
KyAgICBib29sIG1fZmFpbE5leHRTdGF0dXNDaGVjayB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Vz
ZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKKyAgICBzaXplX3QgbV9vbGRlc3RGcmFt
ZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKKyAgICBTY29wZWRHTEZlbmNlIG1fZnJhbWVDb21wbGV0
aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOworICAgIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUg
bV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+IG1fZXh0ZW5z
aW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJm
YWNlU3dhcENoYWluIG1fc3dhcENoYWluOworICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsg
bnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsg
bnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWdP
YmogeyBudWxscHRyIH07CisgICAgLy8gQmFja2luZyBzdG9yZSBmb3IgdGhlIHRoZSBidWZmZXIg
d2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5LgorICAgIC8vIFdoZW4gcHJlc2Vy
dmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3aW5nIGJ1ZmZlciBiYWNr
aW5nIHN0b3JlLgorICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IHRydWUsIHRo
aXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7CisgICAgdm9pZCogbV9kaXNw
bGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24geyBmYWxzZSB9
OworICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9oaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0OworI2VuZGlmCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIEdD
R0x1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm1l
ZGlhdGVUZXh0dXJlIHsgMCB9OworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisgICAgc3RkOjp1
bmlxdWVfcHRyPE5pY29zaWE6OkdDR0xMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKKyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFOworI2lmIFVTRShOSUNPU0lBKQorICAgIGZyaWVuZCBjbGFzcyBOaWNv
c2lhOjpHQ0dMTGF5ZXI7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgZnJpZW5kIGNs
YXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyNlbmRpZgorfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXggY2NjYjU3MjRhNGNk
OTJmZjBiZjhlNzM4M2M1ZDlmZTY4OWQ3N2I4Ni4uNGQ1OWNiMTJjNWU0NDc1MzdkZTBhZWUyMTBk
ZTAwMmNiZDc5ZmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKQEAgLTEw
Niw3ICsxMDYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJh
Y3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFBpeGVs
QnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50VG9DYW52YXMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRl
cywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVCghcGl4ZWxCdWZmZXIuc2l6
ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcAppbmRleCBmNzlmMjJlMzEzZWExMTczODljNWY0MDlkZDBmNDk0YWUxNWFlYjkz
Li5hZjRjMTdkNTFmYTU5ZjQ2ODhkZjQzOTY1MzUxOGY1Y2EwZGFhZjIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFn
ZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50
VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0
QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJj
ZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJU
KCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFzU2l6ZS5pc0Vt
cHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRHTENvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKaW5kZXggMjU1NWZmMDgzMjhlMzQ2
OWNkN2E0YTI5N2RiZWY3OTBmNjMwNTI4OC4uZTQwOTVhMmIxOWUyNGQxZGI4MDljMTgyZjY0MzJi
ZGMwY2I3ODZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApAQCAtMjcsMTIgKzI3
LDE4IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbmNsdWRl
ICJJT1N1cmZhY2UuaCIKIAorI2lmIEVOQUJMRShWSURFTykKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMQ29jb2Eg
OiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgeworY2xhc3MgV0VCQ09SRV9FWFBPUlQg
R3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMQ29jb2E+IGNyZWF0
ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAgfkdyYXBoaWNz
Q29udGV4dEdMQ29jb2EoKTsKQEAgLTQ5LDE0ICs1NSwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwogI2VuZGlmCiAK
LSAgICAvLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBvdmVycmlkZXMuCisgICAgLy8gR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0IG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGNvcHlU
ZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBmbGlwWSkgZmluYWw7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pCisgICAgR3JhcGhpY3ND
b250ZXh0R0xDViogYXNDVigpIGZpbmFsOworI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0ZDo6dW5pcXVl
X3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29u
dGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3MmM3N2VjYjIx
OWUzOS4uMDI5Y2MzZmFlNDdmODcwMjNjNWMzMDIyNWUwMjU5YTA0MWYwZDY2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0
R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9H
cmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5kaWYKIAogI2lm
IEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxhdGZvcm1Jc0FO
R0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpID09IHRy
dWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJlYWRlZCBtYW5u
ZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxzZSBjYXNlIHRo
aXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1dCBhbHdheXMg
c2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIgYW5kIG51bGxw
dHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIGN1cnJl
bnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKQog
ewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNw
bGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgfQogCiAg
ICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNrZW5kLiIsIGF0
dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRpdmVEaXNwbGF5
VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlZmF1bHREaXNw
bGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNlTWV0YWwpIHsK
ICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9BTkdMRV9UWVBF
X0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0YXRpYyBFR0xE
aXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAgICAgICAgICAg
ICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwog
ICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9XRVJfQU5HTEUp
OwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjps
b3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYgKHBvd2VyUHJl
ZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJlZmVyZW5jZTo6
SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQo
RUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5hdGl2ZURpc3Bs
YXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlzcGxheTsKKyAg
ICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpoaWdoUGVy
Zm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlBdHRyaWJ1dGVz
LmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xBTkdMRShXVEZN
b3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVuY3Rpb25hbGl0
eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29hIHRvIHNpbXBs
aWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzKQorR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRycykKIHsKICAg
ICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdM
V2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVuc2lvbik7CiAg
ICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0gICAgICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRp
c3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0YWwg
aW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3RzIGFyZSBub3Qg
c2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVycywgc28KICAg
ICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0bGluZy4gT3Bl
bkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21lIHNvcnQgb2Yg
aW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAotICAgIExPRyhX
ZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRoaXMpOwor
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICglcCkuIiwg
dGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUo
KQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigp
LnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVudCgpKSB7CkBA
IC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAhPSB0aGlzKTsK
ICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9HKFdlYkdMLCAi
RGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlzKTsKKyAgICBM
T0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICglcCkuIiwgdGhp
cyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgpIGNvbnN0CkBA
IC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmlzVmFsaWQo
KSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIq
IEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4dEN1
cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNv
bnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXNDaGVjaykgewog
ICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0ICglcCkuIExv
c2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRTdGF0dXMgPSAw
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0
eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2V0Q29udGV4
dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlm
ICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUyMCw3ICs1MjAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShi
b29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmICht
X3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcgKzUyOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQog
ICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsK
ICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAg
ICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxsb2NhdGluZyBh
IG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVzc3VyZS4KQEAg
LTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlz
cGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVm
ZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0
ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAgICBBU1NFUlQo
IWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBhdXRvIGJhY2tp
bmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
KQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShiYWNraW5nKSwg
cGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmREaXNwbGF5
QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBw
YnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcikK
IHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4dHVyZVRhcmdl
dCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJC
KTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJy
ZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7
CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdM
X05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNw
bGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNobWVudFVzYWdl
IHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0NHTHVpbnQg
cGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewogICAgICAgICBM
T0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19jYXN0PGludD4o
dGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2NywyNCArNjY3
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZhY2VGcm9tU2hh
cmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNG
b3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZl
bnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsKLSAgICBpZiAo
ZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3Bs
YXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZXZl
bnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKSB7Ci0gICAg
ICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXkoKQogewogICAg
IGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0LDE1ICs3MDcs
MTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQog
CiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGljc0NvbnRleHRH
TENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3YgPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3YgPSBHcmFwaGlj
c0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1fY3YuZ2V0KCk7
CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogewog
ICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCk7CiAg
ICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQpA
QCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFT
YW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5
QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZm
ZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlCiB9
CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1SZWxlYXNl
VGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1S
ZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7
CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNv
cHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtRwogfQogI2Vu
ZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdPYmo7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0Nv
bnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKSAm
JiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRlICJBTkdMRVV0
aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8cGFsL3Nw
aS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQ
SS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TY29w
ZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3Rz
Q0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpbmNsdWRlICJD
b3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25z
dGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0dHJpYnV0ZSB2
ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBpbnQgdV9mbGlw
WTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZhcnlp
bmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAgICAi
eyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAxLjApOyIKLSAg
ICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41ICsgLjU7Igot
ICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFsaXplZFBvc2l0
aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2X3lUZXh0dXJl
Q29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2VGV4dHVyZUNv
b3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19OwotCi1zdGF0aWMg
Y29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKLSAgICAi
YXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0dXJl
U2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAgICJ1bmlmb3Jt
IGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIK
LSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZvaWQgbWFp
bigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24sIDAs
IDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9uICog
LjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAgICAgICBub3Jt
YWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKLSAgICAiICAg
IHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95VGV4dHVyZVNp
emU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9u
ICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHByIGF1dG8gc195
dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVuaWZvcm0gc2Ft
cGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JNYXRyaXg7Igot
ICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2YXJ5aW5nIHZl
YzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0gICAgInsiCi0g
ICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1X3lUZXh0dXJl
LCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0ZXh0dXJlMkQo
dV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIgICAgeXV2LmEg
PSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCi0g
ICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVy
VGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyIKLSAgICAi
dW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3JtIHNhbXBsZXIy
RFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1hdHJpeDsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZhcnlpbmcgdmVj
MiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAgICAieyIKLSAg
ICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVjdCh1X3lUZXh0
dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0ZXh0dXJl
MkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIKLSAgICAiICAg
IHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVfY29sb3JNYXRy
aXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2UgewotICAgIFVua25v
d24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJhbnNmZXJGdW5j
dGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBrSVRVX1JfNjAx
XzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQM19ENjUsCi0g
ICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJhbmdlRnJvbVBp
eGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBpeGVsRm9ybWF0
KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4OgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlw
ZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRU
eXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhBVkUoQ09SRVZJ
REVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlmCi0gICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlX0FSR0IyMTAx
MDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBs
YW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3IxMEJp
UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEw
QmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9G
T1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhC
aVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6RnVs
bDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5rbm93bjsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5jdGlvbkZyb21T
dHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVxdWFsKHN0cmlu
Zywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAgICAgIHJldHVy
biBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZFcXVhbChzdHJp
bmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAgICAgICByZXR1
cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENGRXF1YWwoc3Ry
aW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkpCi0gICAgICAg
IHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0gICAgaWYgKGNh
bkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKCkgJiYgQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkKLSAgICAgICAg
cmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2FuTG9hZF9Db3Jl
VmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVxdWFsKHN0cmlu
Zywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICByZXR1cm4gVHJh
bnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJ
bWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0cmluZywga0NW
SW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0dXJuIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25D
Vjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5pb24gewotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAgICAgR0xmbG9h
dCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxvYXQgY2I7Ci0g
ICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07Ci0KLSAgICBj
b25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZsb2F0IGIpCi0g
ICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNvbnN0ZXhwciBH
TGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkKLSAgICAgICAg
OiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAgIH0KLQotICAg
IGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xmbG9hdENvbG9y
JiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
YnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAgICAgICAmJiBh
YnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAgICAgICAmJiBh
YnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0KLX07Ci0KLXN0
cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBi
bGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB3aGl0
ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciByZWQgICAg
IHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsw
LCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVlICAgIHswLCAw
LCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAgIHswLCAxLCAx
fTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsxLCAwLCAxfTsK
LSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAxLCAwfTsKLX07
Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKLQot
ICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2ll
bnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0
KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0gICAgfQotCi0g
ICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikg
Y29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFu
Z2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQot
ICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJH
QiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiArIEtnICogRyAr
IEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0gICAgLy8gQ3Ig
PSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEti
IGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQg
ZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0aGUgYWJvdmUg
ZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8g
UiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2Ip
KSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0g
KCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8gV2hlbiB0aGUg
Y29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0g
d2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEgcmFuZ2Ugb2Yg
WzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUg
RnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFuZ2Ugb2YgWzAs
IDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9
IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0IHlTY2FsaW5n
RmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7
Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1
bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFj
dG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10gPSAwOwotCi0g
ICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0gPSAtY2JjclNj
YWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8g
Y2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIg
KiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsK
LSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsK
LSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNp
ZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsKLQotICAgIHJv
d3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11bMl0gPSAwOwot
ICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4g
b2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQotICAgIC8v
IGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0
MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVt
YmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAgICAgICAgYXV0
byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAgICAgYXV0byYg
eiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAgICB3IC09ICh5
ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRl
bykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQotY29uc3RleHBy
IEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYg
Y29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAgICAgcm93c1sw
XVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsy
XSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVswXSAqIGNvbG9y
LnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJn
Yi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93
c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sy
XVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4
Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVu
Y3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFp
cjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1hdHJpeE1hcCA9
IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBv
bmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAgLy8gaHR0cHM6
Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JD
ck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5
OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0
ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAg
MTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxs
b3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNf
YXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAy
NTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAx
MjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0
ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3
aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwg
InIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDks
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUg
ZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lm
aWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5
OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXgg
eyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIy
LCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAy
NTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0
MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Z3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
ODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJp
eCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAv
IDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAz
MCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBn
cmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYp
LCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcs
IDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAg
ICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFu
IGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25l
bnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8v
d3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNy
TWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4y
NjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4
IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1
NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRl
byBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjks
ICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
NzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAg
OTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVk
LCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIw
IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0gICAgLy8gTWF0
cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0x
OTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1
bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBN
VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07Ci0gICAgY29u
c3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5n
ZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1W
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBU
RSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAx
MjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0
ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVm
IC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xm
bG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNt
cHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0K
LSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAs
ICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0
ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwg
IlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMs
IDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Onll
bGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1h
dHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlF
cXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBN
IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEs
ICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAx
LjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5
YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKLSAgICAgICAg
bWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVy
RnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0
cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5j
dGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2Vz
LmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2VzLmdl
dCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6
a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5l
bXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRV
X1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1w
bGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1Jf
MjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNl
KE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQw
TV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5l
bXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBU
RV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQotICAgIC8vIFdl
IHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFu
Z2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5r
bm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0gICAgICAgIHJh
bmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5n
ZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8gQXNzdW1lIHVu
a25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRlcmF0b3IgPT0g
bWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmljZXMuZ2V0KCku
ZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7Ci0KLSAgICBB
U1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJldHVybiBpdGVy
YXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4dCkgfTsKLSAg
ICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0gICAgZ2w6OkRl
bGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rlc3Ryb3lDb250
ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
OjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG93bmVy
KQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0aWJsZSBjb250
ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBkb2VzIG5vdAot
ICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5LgotICAgIGNvbnN0
IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09OVEVYVF9DTElF
TlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAyLAotICAgICAg
ICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUsCi0gICAgICAg
IEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19FTkFCTEVEX0FO
R0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJTkRfR0VORVJB
VEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9O
T05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0Zm9ybURpc3Bs
YXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25maWcoKTsKLSAg
ICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5LCBjb25maWcs
IG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlmIChjb250ZXh0
ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAgYXV0byBjb250
ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVHTF9OT19DT05U
RVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRleHQpOwotICAg
IH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRyYXdpbmdCdWZm
ZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQpIHsKLSAgICAg
ICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUi
KTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBHTF9OT19FUlJP
UikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdMaW50IHZlcnRl
eFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgR0xpbnQg
ZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0g
ICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAgIGF1dG8gcHJv
Z3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVy
LCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsK
LSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIGdsOjpE
ZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNlIGFyZSB3cml0
dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQgdnNMZW5ndGgg
PSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNf
eXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBHTGludCBmc0xl
bmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQubGVuZ3Ro
KCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRl
eFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZTsKLSAg
ICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hh
ZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFk
ZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBnbDo6Q29tcGls
ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZyYWdtZW50U2hh
ZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0g
ICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2w6
OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlzIGNoZWNrZWQg
YWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24gYmVuZWZpdC4K
LQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5CdWZmZXJzKDEs
ICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xlYW51cCA9IG1h
a2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVsZXRlQnVmZmVy
cygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0aWNlc1sxMl0g
PSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsKLSAgICBnbDo6
QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0gICAgZ2w6OkJ1
ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR0xf
U1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAgICBnbDo6R2Vu
RnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1ZmZlckNsZWFu
dXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVsZXRlRnJh
bWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGludCBzdGF0dXMg
PSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFtLCBHTF9MSU5L
X1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMpIHsKLSAgICAg
ICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZSb2J1c3RBTkdM
RSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmdnNTdGF0dXMp
OwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRTaGFkZXJpdlJv
YnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwgbnVsbHB0ciwg
JmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
KCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIsIHRoaXMsIHN0
YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
b250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xlYW51cC5yZWxl
YXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBtX2Rpc3BsYXkg
PSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25maWcgPSBjb25m
aWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0gICAgbV9mcmFt
ZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7Ci0gICAgbV91
dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dy
YW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRpb24gPSBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4Iik7Ci0gICAg
bV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJv
Z3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiA9IGds
OjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXplIik7Ci0gICAg
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlvbkF0dHJpYnV0
ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJhX3Bvc2l0aW9u
Iik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdoaWxlIHRoZSBw
cm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRpb25BdHRyaWJ1
dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQb3NpdGlvbkF0
dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAgIGdsOjpDbGVh
ckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6
Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIFBsYXRmb3Jt
R0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewotICAgIC8vIEZJ
WE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQyMGYnIHBpeGVs
IGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3JtYXRzLgotICAg
IE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUoaW1h
Z2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNy
OEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZv
cm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShDT1JFVklERU9f
Q09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVsRm9ybWF0ICE9
IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAg
ICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhC
aVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4
dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVz
JykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJlZiBzdXJmYWNl
ID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFzdXJmYWNlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJm
YWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKLSAgICAg
ICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1cmZhY2VTZWVk
ID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRU
ZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7Ci0gICAgICAg
IC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRp
bWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVu
IG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5v
LW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwg
IUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fY29udGV4
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9IENWUGl4ZWxC
dWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4ZWxCdWZmZXJH
ZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQp
OwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVk
IGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAvLyBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xlYXJUZXh0dXJl
T25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIp
OwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgfSk7Ci0g
ICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0gICAgZ2w6OkJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
LSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBnbDo6RnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9U
RVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0YXR1cyA9IGds
OjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVz
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVw
KSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1cmUuIiwgdGhp
cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0dXJlcyBm
b3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0ID0gSU9TdXJm
YWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxhbmVXaWR0aCA9
IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRvIHV2UGxhbmVI
ZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwotCi0gICAgR0xl
bnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5UZXh0dXJlcygx
LCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0
KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVv
VGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3JlOjpjcmVhdGVQ
YnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZpZGVvVGV4dHVy
ZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1dlBsYW5lV2lk
dGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEpOwotICAgIGlm
ICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2SGFuZGxlQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFuZGxlXSB7Ci0g
ICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXks
IHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7Ci0gICAgZ2w6
OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwg
JnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7
Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9IFdlYkNvcmU6
OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlk
ZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkVELCB5
UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAwKTsK
LSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHlIYW5k
bGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgeUhhbmRsZV0g
ewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNwbGF5LCB5SGFu
ZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBwYXJhbWV0ZXJz
LgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMCk7Ci0gICAg
Z2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0gICAgZ2w6OlVu
aWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlwWTo6WWVzID8g
MSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24s
IHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYobV91dlRleHR1
cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQpOwotCi0g
ICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOwot
ICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9tU3RyaW5nKGR5
bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50KGltYWdlLCBr
Q1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBjb2xvck1hdHJp
eCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24ocmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29sb3JNYXRyaXhV
bmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAgICAvLyBEbyB0
aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5HTEVTLCAwLCA2
KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1cmZhY2VTZWVk
ID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91dHB1dFRleHR1
cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1fbGFzdEZsaXBZ
ID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQzMDFmMTI1MWI3
MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVPKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5oIgotCi0jaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0vLyBHcmFwaGlj
c0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9mIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBp
bXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5HTEUgQ29jb2Eu
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1
ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBG
bGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4dHVyZVNlZWQo
R0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RUZXh0dXJlU2Vl
ZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG1f
b3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9kaXNwbGF5IHsg
bnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0IHsgbnVs
bHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWcgeyBu
dWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIgeyAwIH07Ci0g
ICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAgICBHQ0dMaW50
IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV91dlRleHR1
cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlwWVVuaWZvcm1M
b2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9u
IHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiB7IC0x
IH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0g
ICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotCi0gICAg
RmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2ludGVyPElPU3Vy
ZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJmYWNlU2VlZCB7
IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dMdWludCwgdW5z
aWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVyZVNlZWQ7Ci19
OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4
dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oIgorCisjaWYg
RU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNp
bmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY29j
b2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIHsKKyAg
ICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ1bmlm
b3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRl
OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZvaWQg
bWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24s
IDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9u
ICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAiICAgICAgICBu
b3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKKyAgICAi
ICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIKKyAgICAiICAg
IHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisgICAgIn0iX3MK
K307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmVSZWN0
YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAidW5pZm9ybSB2
ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0dXJlU2l6ZTsi
CisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVy
ZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIK
KyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQo
YV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQb3NpdGlvbiA9
IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09IDEpIgorICAg
ICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXplZFBvc2l0aW9u
Lnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb24g
KiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5hdGUgPSBub3Jt
YWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9OworCitjb25z
dGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0dXJlOyIKKyAg
ICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3JtIG1hdDQgdV9j
b2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2b2lkIG1haW4o
KSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5yID0gdGV4dHVy
ZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAiICAgIHl1di5n
YiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRlKS5yZzsiCisg
ICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5dXYgKiB1X2Nv
bG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsiCisgICAgInVu
aWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0gbWF0NCB1X2Nv
bG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIKKyAg
ICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZvaWQgbWFpbigp
IgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIgPSB0ZXh0dXJl
MkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAiICAgIHl1
di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSku
cmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2
ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3MgUGl4ZWxSYW5n
ZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKworZW51bSBjbGFz
cyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9SXzcwOV8yLAor
ICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtEQ0lfUDMsCisg
ICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhlbFJhbmdlIHBp
eGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQoreworICAgIHN3aXRj
aCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80NDQ0QVlwQ2JD
cjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoKKyAgICBjYXNl
IGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2FzZSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAg
Y2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6Cisj
aWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisj
ZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
XzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5
cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVWSURFT19DT01Q
UkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV9B
R1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQaXhlbFJhbmdl
OjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2Zl
ckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJp
bmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247CisgICAgaWYg
KENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzcwOV8yKSkK
KyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yOworICAgIGlm
IChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl82MDFfNCkp
CisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFfNDsKKyAgICBp
ZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8x
OTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRFXzI0ME1fMTk5
NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9E
Q0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9EQ0lf
UDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1AzOworICAgIGlm
IChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSgpICYm
IENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSkpCisgICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYgKGNhbkxvYWRf
Q29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgpICYmIENGRXF1
YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjApKQorICAgICAg
ICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICByZXR1cm4gVHJh
bnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENvbG9yIHsKKyAg
ICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0IHI7CisgICAg
ICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAgICAgIH0gcmdi
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAgICAgICAgICAg
R0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0geWNiY3I7Cisg
ICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBHTGZsb2F0IGcs
IEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7CisgICAgfQorCisg
ICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBHTGZsb2F0IHNj
YWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8gc2NhbGUgfQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVl
OworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29u
c3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCisg
ICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCisg
ICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwor
ICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIg
R0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
TGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdM
ZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xm
bG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBHTGZs
b2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9h
dENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JNYXRyaXggewor
ICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhl
bFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7CisK
KyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVy
YXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4cHIgWUNiQ3JN
YXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVu
dCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAgICAvLyBUaGUg
Y29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Cisg
ICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0gKEIgLSBZKSAv
ICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKKyAg
ICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNp
ZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQorICAgIC8v
CisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJp
dmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCisg
ICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkgLSAoMiAqICgx
IC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBD
cgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwg
WSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYg
Q3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQu
IFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwg
aGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KKwor
ICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmlj
aWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6
RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3Rv
ciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOworCisg
ICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0gPSAwOworICAg
IHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
OworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9y
OworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZm
aWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAgcm93c1sxXVsy
XSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29l
ZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsKKworICAgIHJv
d3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdG
YWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJdID0gMDsKKyAg
ICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJvd3NbM11bMV0g
PSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOworCisgICAgLy8g
Q29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFu
ZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFu
Z2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJvd051bWJlciA9
IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8mIHJvdyA9IHJv
d3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAgICAgYXV0byYg
eSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAgYXV0byYgdyA9
IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7CisgICAgICAgIGlm
IChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0geCAqIDE2IC8g
MjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3Bl
cmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdM
ZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsx
XSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwK
KyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJn
Yi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAgICAgICAgcm93
c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sy
XVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0YXRpYyBjb25z
dCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBp
eGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQorewor
ICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0
cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsK
KyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8vIE1hdHJpY2Vz
IGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBz
cGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAx
CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhl
bFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlD
YkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5
OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0
LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAx
LjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4g
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYp
LCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2
NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4s
ICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5m
KSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAg
c3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIx
LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAx
LjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9y
Iik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGlu
IHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0
dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHByIHN0YXRpYyBZ
Q2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAw
LjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4
IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRl
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3
aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlk
ZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2
LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxv
dywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5
ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcw
OSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1
LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3
aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5m
KSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAx
NDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAg
MS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBh
cmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3Bl
Y2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAK
KyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4
ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHByIHN0YXRpYyBZ
Q2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAw
LjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9h
dENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0
MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAx
LjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVm
IC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cg
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEy
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAx
LjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1
NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUs
ICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2
NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4s
ICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Y3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29t
cG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAgICAvLyBodHRw
Oi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNvbnN0ZXhwciBz
dGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRl
bywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0
ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwg
IDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJs
YWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAy
NDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
cmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1
NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENv
bG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3Io
MTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1G
dWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRF
IDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgs
IDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwg
ICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNl
IHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
c21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwg
MjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEs
IDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
bWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRpc3BhdGNoX29u
Y2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXko
UGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYw
MVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4
ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVs
bE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFu
Z2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01h
dHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6
OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgp
OworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRl
bywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsK
KyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwg
VHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOworICAg
ICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJh
bnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgp
OworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxs
LCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0
cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5k
bGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KKyAgICBBU1NF
UlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdlID09IFBpeGVs
UmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKKworICAg
IGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRyYW5zZmVyRnVu
Y3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5jdGlvbnMgYXJl
IHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQoKSkKKyAgICAg
ICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rp
b25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1hdHJpY2Vz
LmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRleHQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBpZiAoIW1fY29u
dGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9kaXNwbGF5LCBt
X2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJm1f
eXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZyYW1l
YnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOwor
fQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYShH
cmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3duZXIpCit7Cisg
ICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0ZSB3aXRoIG93
bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5lc3Mgb3IgV2Vi
R0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJpYnV0ZXNbXSA9
IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAgIG93bmVyLm1f
aXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdMX0JBQ0tXQVJE
U19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAgIEVHTF9DT05U
RVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAg
ICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlVTSwKKyAgICAg
ICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdMRGlzcGxheSBk
aXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmlnIGNvbmZpZyA9
IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gRUdMX0Ny
ZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmosIGNvbnRleHRB
dHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkKKyAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KGRpc3BsYXks
IGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rp
c3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1
cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVzdHJveUNvbnRl
eHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29sIHVzZVRleHR1
cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBHTF9URVhUVVJF
XzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKKyAgICBp
ZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJH
TF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgaWYgKGds
OjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNoYWRlcihHTF9W
RVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpDcmVhdGVTaGFk
ZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9IGdsOjpDcmVh
dGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3Zl
cnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAgICAgZ2w6OkRl
bGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hhZGVyKGZyYWdt
ZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3JhbSk7CisgICAg
fSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJlIGNvbXBpbGUt
dGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hh
ZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
Lmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFn
bWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9
IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195dXZWZXJ0ZXhT
aGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCA6IHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRlclNvdXJjZSh2
ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7CisgICAgZ2w6
OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAm
ZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgZ2w6
OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hTaGFkZXIoeXV2
UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0s
IGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3JhbSk7CisgICAg
Ly8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0aWNhbCBwYXJh
bGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRleEJ1ZmZlciA9
IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7CisgICAgYXV0byB5
dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4QnVmZmVyXSB7
CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOworICAgIH0p
OworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwgMSwgMSwgMSwg
LTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgeXV2
VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIHNpemVv
Zih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBHTHVpbnQgZnJh
bWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsK
KyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2ZyYW1lYnVmZmVy
XSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKKyAg
ICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dyYW1pdlJvYnVz
dEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAmc3RhdHVzKTsK
KyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7CisgICAgICAg
IGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09NUElMRV9TVEFU
VVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3RhdHVzID0gMDsK
KyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFkZXIsIEdMX0NP
TVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFpbGVkIHRvIGxp
bms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0dXMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICB5
dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZlckNsZWFudXAu
cmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250ZXh0ID0gY29u
dGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1ZmZlciA9IHl1
dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgbV95
VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3Jh
bSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpH
ZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7CisgICAgbV9jb2xv
ck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3Jh
bSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uID0gZ2w6
OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAgIG1feVRleHR1
cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFt
LCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24g
PSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZVNpemUiKTsK
KyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0cmliTG9jYXRp
b24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlzIGRlbGV0ZWQg
YnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGluIHVzZS4KKyAg
ICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmli
QXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6VmVydGV4QXR0
cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBm
YWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
RmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9ubHkgc3VwcG9y
dHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUgc3VwcG9ydGlu
ZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0gQ1ZQaXhlbEJ1
ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9ybWF0ICE9IGtD
VlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8vIE5PTElOVAor
ICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJp
UGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JN
QVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9B
R1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhlbEZvcm1hdCAh
PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQorI2Vu
ZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENW
Q29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBj
b3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBp
eGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElP
U3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsK
KyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xh
c3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVk
CisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRl
eHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBh
bmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBs
YXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMQ29j
b2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKGltYWdlKTsK
KyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFnZSk7CisKKyAg
ICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBUaGUgb3V0cHV0
VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBlYXJseS1vdXRz
LiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVycm9yIGlzIG5v
dCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFrZVNjb3BlRXhp
dChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGVdIHsK
KyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwor
ICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3Jt
YXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGdsOjpCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0ZSBtZW1vcnkg
Zm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBn
bDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xB
TVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RF
WFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0
LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1
cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBm
cmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAg
ICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8gc291cmNlLgor
ICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUoc3VyZmFjZSwg
MCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1
cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBs
YW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3VyZmFjZUdldEhl
aWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0
ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAgR0x1aW50IHV2
VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUpOworICAgIGF1
dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0geworICAgICAg
ICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7CisgICAgZ2w6OkFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2aWRlb1RleHR1
cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBh
cmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJ
TkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhU
VVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZh
Y2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNF
X1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR0xf
VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChb
ZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29yZTo6ZGVzdHJv
eVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOworICAgIH0pOwor
CisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJnlUZXh0
dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3lUZXh0dXJl
XSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOworICAgIH0pOwor
ICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6QmluZFRleHR1cmUo
dmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZlckFuZEF0dGFj
aElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJnZXQsIEVHTF9J
T1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWln
aHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhhbmRsZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBtYWtlU2NvcGVF
eGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRlc3Ryb3lQYnVm
ZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0pOworCisgICAg
Ly8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVuaWZvcm0xaSht
X3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2RmxpcFlVbmlm
b3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAgZ2w6OlVuaWZv
cm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgsIHlQbGFuZUhl
aWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24s
IHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdlID0gcGl4ZWxS
YW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFuc2ZlckZ1bmN0
aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0PENGU3RyaW5n
UmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRy
aXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JHQk1hdHJpeEZv
clJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbik7CisgICAg
Z2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiwgMSwgR0xf
RkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJhd2luZy4KKyAg
ICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9sYXN0U3VyZmFj
ZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNlU2VlZDsKKyAg
ICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50ZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAgICBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0ZTM5NjBiNmQ3
MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3
dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGlj
c0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9u
IGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRo
ZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENvY29hLgorY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYSgpIGZp
bmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJl
ZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSkg
ZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKEdyYXBoaWNz
Q29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2VlZChHQ0dMdWlu
dCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVTZWVkLmdldCh0
ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBtX293bmVyOwor
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7IG51bGxwdHIg
fTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51bGxwdHIgfTsK
KyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsgbnVsbHB0ciB9
OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9OworICAgIFBsYXRm
b3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGludCBtX3lUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0dXJlVW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3JtTG9jYXRpb24g
eyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07
CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAtMSB9OworICAg
IEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OworICAgIEdDR0xp
bnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAgIEZsaXBZIG1f
bGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1cmZhY2VSZWY+
IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQgeyAwIH07CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVuc2lnbmVkLCBJ
bnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dM
dWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3Bw
CmluZGV4IDkzYzAyMTRmMzlhODE5MjQyODBmMzczYzlhYzc5Mzg2YmQyMzI0NjAuLmU3YzI5ZGQ1
Y2JmZmYxNDRiZDFiODU1MTkxNmJmOGRiNjc0YWYwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcApAQCAtMTc3LDcgKzE3Nyw3IEBAIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxh
dGZvcm1Db25maWcoKSBjCiAgICAgcmV0dXJuIG1fY29uZmlnOwogfQogCi1HQ0dMQU5HTEVMYXll
cjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCitHQ0dM
QU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSYgY29udGV4
dCkKICAgICA6IEdDR0xMYXllcihjb250ZXh0KQogICAgICwgbV9hbmdsZUNvbnRleHQoQU5HTEVD
b250ZXh0OjpjcmVhdGVDb250ZXh0KCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFH
Q0dMQU5HTEVMYXllci5oCmluZGV4IDcwNTc5ZDI4YjgwYmI5NDMwZTg4MzU5NDUzMGIwMjUwZjc4
NDUzMjUuLjc4NzM3ODJjM2ZkMjJjNTBhNTc1MDA1YWFkZTBmNGYwMDBmMmIxYWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFHQ0dMQU5HTEVMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCkBAIC03Niw3ICs3Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgRUdMU3VyZmFjZSBtX3N1cmZhY2UgeyBudWxscHRyIH07CiAgICAg
fTsKIAotICAgIEdDR0xBTkdMRUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Jik7CisgICAgR0NHTEFOR0xFTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRSYp
OwogICAgIHZpcnR1YWwgfkdDR0xBTkdMRUxheWVyKCk7CiAKICAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNw
cAppbmRleCAwMzU3OTQ1OTJkMTZmYmNkZGIxMWQxNTcxYzYzZmNkM2M4YzY0YWE1Li5iN2M3OWUx
Zjg5ZDA2ZWQ4MDczODNlZmVhYTU0NTEwMDBmZThmZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhR0NHTExheWVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgTmljb3NpYSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1HQ0dMTGF5ZXI6OkdDR0xMYXllcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKK0dDR0xMYXllcjo6R0NHTExheWVyKEdyYXBo
aWNzQ29udGV4dEdMVHlwZSYgY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAg
ICwgbV9jb250ZW50TGF5ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4
bWFwL05pY29zaWFHQ0dMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5ZXIuaAppbmRleCA0MzI5OTA0NjA5ODY3NWI3
YmVhYjk3OWYyMTY1Mzc3NWJlMzVlMGEyLi4zYzBhMDIzNGE0ZTZmZmM5Y2Q1MThhYzM2YTY2NDI1
NmU4MThlN2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oCkBAIC0zMCwx
MCArMzAsMTUgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKE5JQ09TSUEpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAj
aW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCiAjaW5jbHVk
ZSA8bWVtb3J5PgogCisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
QU5HTEUuaCIKKyNlbHNlCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHTENvbnRleHQ7CiB9CkBAIC00Myw3
ICs0OCwxMiBAQCBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBHQ0dMTGF5ZXIgOiBwdWJsaWMg
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgR0NHTExheWVyKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJik7CisjaWYgVVNFKEFOR0xFKQorICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEdMVHlwZSA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxz
ZQorICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dEdMVHlwZSA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOworI2VuZGlmCisgICAgZXhwbGljaXQgR0NHTExheWVyKEdyYXBoaWNzQ29u
dGV4dEdMVHlwZSYpOwogCiAgICAgdmlydHVhbCB+R0NHTExheWVyKCk7CiAKQEAgLTU0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRl
eHQ7CisgICAgR3JhcGhpY3NDb250ZXh0R0xUeXBlJiBtX2NvbnRleHQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7CiAKICAgICBSZWY8Q29udGVu
dExheWVyPiBtX2NvbnRlbnRMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCmluZGV4IGI4MzJhMTg2YTQyYzhiZTMyMmE0YzcwODFmNzVkY2Q0OTBjMjdmODguLjJjMGQ5
OTdjZjM4MDE4MTExZGM0NzNhMWVkZmM4NWIzZGY3OGQ4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwyMiAr
MjMsMzA5NSBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkK
KyNpZiBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25z
R0wuaCIKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdMQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAi
VGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5j
bHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVT
LmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNp
ZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5H
TF9FUykKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBV
U0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhR0NHTExheWVyLmgiCisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gq
PiYgZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVI
YXNoKj4qIHNoYXJlZE5hbWVIYXNoOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7
CisgICAgICAgIHNoYXJlZE5hbWVIYXNoID0gbmV3IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVI
YXNoKj47CisgICAgfSk7CisKKyAgICByZXR1cm4gKnNoYXJlZE5hbWVIYXNoOworfQorCitzdGF0
aWMgdm9pZCBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoU2hhZGVyTmFtZUhhc2gqIHNo
YWRlck5hbWVIYXNoKQoreworICAgICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKSA9
IHNoYWRlck5hbWVIYXNoOworfQorCisvLyBIYXNoIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEFOR0xF
IHRyYW5zbGF0b3IvY29tcGlsZXIgdG8gZG8KKy8vIHN5bWJvbCBuYW1lIG1hbmdsaW5nLiBTaW5j
ZSB0aGlzIGlzIGEgc3RhdGljIG1ldGhvZCwgYmVmb3JlCisvLyBjYWxsaW5nIGNvbXBpbGVTaGFk
ZXIgd2Ugc2V0IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcgorLy8gdG8gcG9pbnQgdG8gdGhl
IG1hcCBrZXB0IGJ5IHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLgorCitzdGF0aWMgdWludDY0X3QgbmFtZUhhc2hGb3JTaGFkZXIoY29uc3QgY2hhciogbmFt
ZSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBDU3RyaW5nIG5hbWVBc0NTdHJpbmcgPSBDU3RyaW5nKG5hbWUpOworCisgICAgLy8g
TG9vayB1cCBuYW1lIGluIG91ciBsb2NhbCBtYXAuCisgICAgU2hhZGVyTmFtZUhhc2gqJiBjdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIgPSAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVy
KCk7CisgICAgU2hhZGVyTmFtZUhhc2g6Oml0ZXJhdG9yIGZpbmRSZXN1bHQgPSBjdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXItPmZpbmQobmFtZUFzQ1N0cmluZyk7CisgICAgaWYgKGZpbmRSZXN1
bHQgIT0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGZpbmRSZXN1bHQtPnZhbHVlOworCisgICAgdW5zaWduZWQgaGFzaFZhbHVlID0gbmFtZUFzQ1N0
cmluZy5oYXNoKCk7CisKKyAgICAvLyBDb252ZXJ0IHRoZSAzMi1iaXQgaGFzaCBmcm9tIENTdHJp
bmc6Omhhc2ggaW50byBhIDY0LWJpdCByZXN1bHQKKyAgICAvLyBieSBzaGlmdGluZyB0aGVuIGFk
ZGluZyB0aGUgc2l6ZSBvZiBvdXIgdGFibGUuIE92ZXJmbG93IHdvdWxkCisgICAgLy8gb25seSBi
ZSBhIHByb2JsZW0gaWYgd2UncmUgYWxyZWFkeSBoYXNoaW5nIHRvIHRoZSBzYW1lIHZhbHVlIChh
bmQKKyAgICAvLyB3ZSdyZSBob3BpbmcgdGhhdCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY29u
dGV4dCB3ZQorICAgIC8vIGRvbid0IGhhdmUgdGhhdCBtYW55IHN5bWJvbHMpLgorCisgICAgdWlu
dDY0X3QgcmVzdWx0ID0gaGFzaFZhbHVlOworICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgMzIpICsg
KGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2l6ZSgpICsgMSk7CisKKyAgICBjdXJyZW50
TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNldChuYW1lQXNDU3RyaW5nLCByZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6
IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAg
bV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xMYXllcj4oKnRoaXMpOwor
I2Vsc2UKKyAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXI+KCp0aGlzKTsKKyNlbmRpZgorCisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKwor
ICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmli
dXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAg
ICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgIDo6Z2xHZW5UZXh0dXJl
cygxLCAmbV90ZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOworCisgICAgLy8gQ3JlYXRlIGFuIEZCTy4KKyAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEs
ICZtX2Zibyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8p
OworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIDo6Z2xHZW5UZXh0dXJlcygx
LCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgIDo6Z2xHZW5UZXh0
dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisjZW5kaWYKKworICAgIC8vIENyZWF0
ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0g
bV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewor
ICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBt
X211bHRpc2FtcGxlRkJPOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRE
cmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VT
KQorICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVy
YnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5j
aWwpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7
CisjZW5kaWYKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRl
cHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgfQorCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgOjpnbEVuYWJsZShHTF9W
RVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKKworICAgIGlmIChHTENvbnRleHQ6OmN1cnJlbnQo
KS0+dmVyc2lvbigpID49IDMyMCkgeworICAgICAgICBtX3VzaW5nQ29yZVByb2ZpbGUgPSB0cnVl
OworCisgICAgICAgIC8vIEZyb20gdmVyc2lvbiAzLjIgb24gd2UgdXNlIHRoZSBPcGVuR0wgQ29y
ZSBwcm9maWxlLCBzbyByZXF1ZXN0IHRoYXQgb3VwdXQgdG8gdGhlIHNoYWRlciBjb21waWxlci4K
KyAgICAgICAgLy8gT3BlbkdMIHZlcnNpb24gMy4yIHVzZXMgR0xTTCB2ZXJzaW9uIDEuNTAuCisg
ICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNMXzE1MF9DT1JFX09V
VFBVVCk7CisKKyAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5H
TCBDb3JlIHByb2ZpbGUsIGFuZCB3ZSBuZWVkIGEgVkFPIGZvciByZW5kZXJpbmcuCisgICAgICAg
IC8vIEEgVkFPIGNvdWxkIGJlIGNyZWF0ZWQgYW5kIGJvdW5kIGJ5IGVhY2ggY29tcG9uZW50IHVz
aW5nIEdMIHJlbmRlcmluZyAoVGV4dHVyZU1hcHBlciwgV2ViR0wsIGV0YykuIFRoaXMgaXMKKyAg
ICAgICAgLy8gYSBzaW1wbGVyIHNvbHV0aW9uOiB0aGUgZmlyc3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgY3JlYXRlZCBvbiBhIEdMQ29udGV4dCB3aWxsIGNyZWF0ZSBhbmQgYmluZCBhIFZBTyBm
b3IgdGhhdCBjb250ZXh0LgorICAgICAgICBHQ0dMaW50IGN1cnJlbnRWQU8gPSBnZXRJbnRlZ2Vy
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpWRVJURVhfQVJSQVlfQklORElORyk7CisgICAgICAg
IGlmICghY3VycmVudFZBTykgeworICAgICAgICAgICAgbV92YW8gPSBjcmVhdGVWZXJ0ZXhBcnJh
eSgpOworICAgICAgICAgICAgYmluZFZlcnRleEFycmF5KG1fdmFvKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBsb3dlciB2ZXJzaW9ucyByZXF1ZXN0IHRoZSBjb21w
YXRpYmlsaXR5IG91dHB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgorICAgICAgICBtX2NvbXBp
bGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF9DT01QQVRJQklMSVRZX09VVFBVVCk7CisK
KyAgICAgICAgLy8gR0xfUE9JTlRfU1BSSVRFIGlzIG5lZWRlZCBpbiBsb3dlciB2ZXJzaW9ucy4K
KyAgICAgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworICAgIH0KKyNlbHNlCisgICAg
Ly8gQWRqdXN0IHRoZSBzaGFkZXIgc3BlY2lmaWNhdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciBH
TEVTMyAoaS5lLiBXZWJHTDIgc3VwcG9ydCkgd2FzIHJlcXVlc3RlZC4KKyNpZiBFTkFCTEUoV0VC
R0wyKQorICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCwg
KGF0dHJpYnV0ZXMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9u
OjpXZWJHTDIpID8gU0hfV0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKKyNlbHNlCisgICAg
bV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBTSF9XRUJHTF9T
UEVDKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAg
ICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgc2g6OkluaXRCdWlsdElu
UmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhBdHRyaWJzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9
IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyA9IGdldEludGVn
ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMpOworICAgIEFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdlcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAg
ICBBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdl
cihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMpOworICAgIEFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdl
cihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAg
IEFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKTsKKwor
ICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzID0gMTsKKworICAgIEdDR0xpbnQgcmFuZ2VbMl0geyB9OworICAgIEdD
R0xpbnQgcHJlY2lzaW9uID0gMDsKKyAgICBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkZSQUdNRU5UX1NIQURFUiwgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKKyAgICBBTkdMRVJlc291cmNlcy5G
cmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0gfHwgcHJlY2lzaW9u
KTsKKworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKworICAg
IDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworfQorCitHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOworICAgIGJv
b2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgYXV0byBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewor
ICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgaWYgKG1fZGVw
dGhCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhC
dWZmZXIpOworCisgICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAg
aWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgOjpnbERlbGV0ZUZy
YW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisjZW5kaWYK
KworI2lmIFVTRShDQUlSTykKKyAgICBpZiAobV92YW8pCisgICAgICAgIGRlbGV0ZVZlcnRleEFy
cmF5KG1fdmFvKTsKKyNlbmRpZgorfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YWtlQ29udGV4dEN1cnJlbnQoKQoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25p
Y29zaWFMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjZWxzZQorICAgIHJldHVybiBtX3Rl
eG1hcExheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCit7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworI2lmIFVTRShP
UEVOR0xfRVMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCisjaWYgUExBVEZPUk0oR1RLKQorRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4
dGVuc2lvbnMpIHsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAvLyBnbEdldFN0cmluZ2kg
aXMgbm90IGF2YWlsYWJsZSBvbiBHTEVTMi4KKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVu
aXF1ZTxFeHRlbnNpb25zR0xPcGVuR0xFUz4odGhpcywgIGZhbHNlKTsKKyNlbHNlCisgICAgICAg
IC8vIEZyb20gT3BlbkdMIDMuMiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJl
IHdlIG11c3QgdXNlIGdsR2V0U3RyaW5naS4KKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVu
aXF1ZTxFeHRlbnNpb25zR0xPcGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJz
aW9uKCkgPj0gMzIwKTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsK
K30KKyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11
bGF0ZUV2ZW50Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCit7Cisg
ICAgaWYgKGV2ZW50ID09IFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVy
ZSkKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQoreworfQorCitzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0
ZWRSZXN1bHRzKCkKK3sKKyAgICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3Qg
Y2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQoreworICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOworCisgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBleHRl
bnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAg
ICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikp
IHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb24pOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0
cnVlLgorICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgc2V0Q29udGV4dEF0dHJp
YnV0ZXMoYXR0cnMpOworICAgIH0KKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmICFtX2lzRm9y
V2ViR0wyKSB7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUiKSkgeworICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0g
ZmFsc2U7CisgICAgICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisKKyNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIFRl
bXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZB
TFNFKTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIs
IEdMX0ZBTFNFKTsKKyNlbmRpZgorCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFs
aWFzKQorICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21w
b3NpdG9yVGV4dHVyZSk7CisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7
CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAg
IGdsRmx1c2goKTsKKworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRl
LmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGVsc2UKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICByZXR1cm47CisjZW5kaWYKKworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsK
KyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zdGF0ZS5ib3VuZFRhcmdldChH
TF9URVhUVVJFMCkgPT0gR0xfVEVYVFVSRV8yRCA/IG1fc3RhdGUuYm91bmRUZXh0dXJlKEdMX1RF
WFRVUkUwKSA6IDApOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVy
ZVVuaXQpOworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIDo6Z2xGbHVzaCgpOworfQorCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHMoKQoreworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAoY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeSgpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9
IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJP
ID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICAgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3
RkJPICE9IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAg
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBp
eGVsc0ZvclBhaW50UmVzdWx0cygpOworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAg
ICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdo
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49
IDApOworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bWFya0NvbnRleHRDaGFuZ2VkKCk7CisKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAg
IG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwor
CisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVT
VCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdM
X0RJVEhFUiwgR0xfRkFMU0UpOworICAgIAorICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNo
YXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKworICAgIC8vIEluaXRpYWxpemUgcmVu
ZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0geyAwLCAwLCAwLCAw
IH0sIGNsZWFyRGVwdGggPSAwOworICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7CisgICAgR0xi
b29sZWFuIGNvbG9yTWFza1tdID0geyBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
IH0sIGRlcHRoTWFzayA9IEdMX1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZm
ZmZmZiwgc3RlbmNpbE1hc2tCYWNrID0gMHhmZmZmZmZmZjsKKyAgICBHTGJpdGZpZWxkIGNsZWFy
TWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9D
TEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
CisgICAgOjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAg
ICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOworCisg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuZGVw
dGgpIHsKKyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFy
RGVwdGgpOworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsK
KyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7
CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBH
TF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNp
bCk7CisgICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2ls
TWFzaykpOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFT
SywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKKyAgICAgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICA6
OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xl
YXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisKKyAgICA6OmdsQ2xlYXIo
Y2xlYXJNYXNrKTsKKworICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29s
b3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIDo6Z2xDb2xvck1hc2so
Y29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsK
KyAgICBpZiAoYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNr
KTsKKyAgICB9CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbENsZWFyU3Rl
bmNpbChjbGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9G
Uk9OVCwgc3RlbmNpbE1hc2spOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9C
QUNLLCBzdGVuY2lsTWFza0JhY2spOworICAgIH0KKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKworICAgIGF1dG8gZXJyb3IgPSA6OmdsR2V0
RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0coV2ViR0wsICJGYXRhbDogT3BlbkdMIGVycm9yIGR1cmluZyBHcmFwaGljc0NvbnRleHRH
TCBidWZmZXIgaW5pdGlhbGl6YXRpb24gKCVkKS4iLCBlcnJvcik7CisgICAgICAgIGZvcmNlQ29u
dGV4dExvc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIDo6Z2xGbHVzaCgpOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQ
bGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNo
YWRlcikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVy
dGV4U2hhZGVyKSk7CisgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdt
ZW50U2hhZGVyKSk7CisgICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50
RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisK
KyAgICBIYXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdz
OworICAgIGZvciAoY29uc3QgYXV0byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWlu
Z01hcCkgeworICAgICAgICBjb25zdCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wu
a2V5OworICAgICAgICAvLyBUaGUgdmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBl
YWNoIGluZGV4IG9mIGFuIGFycmF5IHZhcmlhYmxlLgorICAgICAgICAvLyBXZSBvbmx5IHdhbnQg
YSBzaW5nbGUgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBhcnJheS4KKyAgICAgICAgaWYgKHN5
bWJvbE5hbWUuZW5kc1dpdGgoIl0iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIERvbid0IGNvdW50IGJ1aWx0IGluIHZhcnlpbmdzLgorICAgICAgICBpZiAoc3ltYm9sTmFt
ZSA9PSAiZ2xfRnJhZ0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwg
c3ltYm9sTmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWlu
Z01hcC5maW5kKHN5bWJvbE5hbWUpOworICAgICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJh
Z21lbnRFbnRyeS52YXJ5aW5nTWFwLmVuZCgpKQorICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5n
cy5hZGQoc3ltYm9sTmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZhbHVlKTsKKyAgICB9CisKKyAgICBz
aXplX3QgbnVtVmFyeWluZ3MgPSBjb21iaW5lZFZhcnlpbmdzLnNpemUoKTsKKyAgICBpZiAoIW51
bVZhcnlpbmdzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN0ZDo6dmVjdG9yPHNoOjpT
aGFkZXJWYXJpYWJsZT4gdmFyaWFibGVzOworICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVk
VmFyeWluZ3Muc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBj
b21iaW5lZFZhcnlpbmdzLnZhbHVlcygpKQorICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZh
cnlpbmdTeW1ib2wpOworCisgICAgR0NHTGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7CisjaWYg
VVNFKE9QRU5HTF9FUykKKyAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywg
Jm1heFZhcnlpbmdWZWN0b3JzKTsKKyNlbHNlCisgICAgaWYgKG1faXNGb3JXZWJHTDIpCisgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1Zl
Y3RvcnMpOworICAgIGVsc2UgeworICAgICAgICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMgPSAw
OworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFy
eWluZ0Zsb2F0cyk7CisgICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0
cyAvIDQ7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0
IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Cisg
ICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Cisg
ICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRl
eFNoYWRlciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisKKyAgICBIYXNoTWFwPFN0
cmluZywgc2g6OkdMZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOworCisgICAgZm9yIChj
b25zdCBhdXRvJiBlbnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKKyAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OworICAgICAgICB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1l
LmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNp
b24pOworICAgIH0KKworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5
LnVuaWZvcm1NYXApIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBl
bnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOworICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhT
eW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5j
X3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSk7CisgICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wg
IT0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUg
IT0gZW50cnkudmFsdWUuZ2V0KCkucHJlY2lzaW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCA9IHRleHR1cmU7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChw
cm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Cisg
ICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICA6Omds
QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJpbmRCdWZmZXIodGFy
Z2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHTHVp
bnQgZmJvOworICAgIGlmIChidWZmZXIpCisgICAgICAgIGZibyA9IGJ1ZmZlcjsKKyAgICBlbHNl
CisgICAgICAgIGZibyA9IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlz
YW1wbGVGQk8gOiBtX2Zibyk7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUik7
CisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKKyAgICBpZiAoZmJvICE9IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gZmJvOworICAgIH0KK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRh
cmdldCwgcmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0
dXJlLCB0YXJnZXQpOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVk
LCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJs
ZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9y
LCBHQ0dMZW51bSBkZmFjdG9yKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9
ICAgICAgIAorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0
ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdD
R0xlbnVtIGRzdEFscGhhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwg
c3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1
c2FnZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEsIHVzYWdlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnRwdHIgb2Zmc2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQnVmZmVy
U3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOworfQorCitH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
Q0dMZW51bSB0YXJnZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCisgICAgcmV0dXJuIDo6Z2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYg
YiwgR0NHTGNsYW1wZiBhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
Q2xlYXIobWFzayk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ2xlYXJTdGVuY2ls
KHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJv
b2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xl
YW4gYWxwaGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBp
bmcuIER1ZSB0byB0aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKKyAgICAvLyBw
b2ludCBhIGdsb2JhbCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0Lgor
ICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVz
b3VyY2VzKCk7CisgICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFO
R0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rp
b24gPSBuYW1lSGFzaEZvclNoYWRlcjsKKworICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJz
KQorICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVI
YXNoPigpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZv
clNoYWRlcnMuZ2V0KCkpOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKKworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25z
LT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKKworICAgIEFOR0xFUmVz
b3VyY2VzLkhhc2hGdW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOworICAgIG1fY29tcGls
ZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Uu
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0
ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7CisgICAgY29u
c3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRh
dGEoKTsKKyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJD
U3RyaW5nLmxlbmd0aCgpOworCisgICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNo
YWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxu
IiwgZ2V0U2hhZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKFdlYkdM
LCAiLS0tIGJlZ2luIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRy
YW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKKworICAg
IDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5z
bGF0ZWRTaGFkZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7
CisgICAgCisgICAgaW50IGNvbXBpbGVTdGF0dXM7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2
KHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKKworICAgIFNoYWRlclNv
dXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICAv
LyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpn
bEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAg
IGlmIChsZW5ndGgpIHsKKyAgICAgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICAgICAgVmVjdG9y
PEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgICAgICBQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgICAgICBlbnRyeS5sb2cgPSBnZXRV
bm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwor
ICAgIH0KKworICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKKyAgICAgICAgZW50
cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRy
YW5zbGF0b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUu
Iik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hh
ZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEhhc2hNYXA8UGxhdGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFk
ZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgY29uc3QgQ1N0cmlu
ZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7CisgICAgY29uc3Qg
Y2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7CisgICAg
aW50IHNoYWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7CisK
KyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xu
LS0tIGVuZCBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7CisK
KyAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRl
clNvdXJjZUxlbmd0aCk7CisKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgICAg
aW50IGNvbXBpbGVTdGF0dXM7CisKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxF
X1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xf
VFJVRSkgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgTE9HKFdlYkdM
LCAiRGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBzdWNjZWVkZWQuIik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJF
cnJvcjogZGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7CisgICAgfQorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVCht
X3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0
dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJP
KSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Cisg
ICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ3VsbEZh
Y2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhH
Q0dMZW51bSBmdW5jKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xEZXB0aE1h
c2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRl
cihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQorewor
ICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbERldGFjaFNoYWRlcihwcm9n
cmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxl
KEdDR0xlbnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsRGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwg
R0NHTHNpemVpIGNvdW50KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cisg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludHB0ciBvZmZzZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSkpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWlu
dCBpbmRleCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGaW5pc2goKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGbHVzaCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CisgICAgOjpnbEdl
dFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhB
dHRyaWJ1dGVTaXplKTsKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUp
OyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5h
dGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOwor
ICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGlu
ZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRh
dGEoKSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBT
SEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5n
dGgpKTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUu
ZGF0YSgpLCBuYW1lTGVuZ3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBp
bmcgYWN0aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4
LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7
CisjZW5kaWYKKworICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKKyAgICBpbmZvLnR5cGUg
PSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdD
R0xpbnQgc3ltYm9sQ291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5
bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywg
JnN5bWJvbENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hhZGVyU3ltYm9s
Q291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDR0x1aW50IHJhd0lu
ZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcFtpbmRleF0gOiAtMTsKKworICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dy
YW0sIHJhd0luZGV4LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dy
YW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNp
emUpOworCisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FD
VElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBH
THNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdMZW51bSB0
eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5p
Zm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBp
ZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcg
b3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xf
VFlQRV9VTklGT1JNLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKKyAgICAKKyNp
Zm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVu
Z3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZv
cm0gJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRm
OCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgCisg
ICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAg
aW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdDR0xpbnQgc3ltYm9s
Q291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5m
aW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHBy
b2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7
CisgICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJv
Z3JhbSk7CisgICAgfQorICAgIAorICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9s
Q291bnRzID0gcmVzdWx0LT52YWx1ZTsKKyAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8
IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBz
eW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsK
KyAgICAKKyAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgs
IGluZm8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNo
YWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xz
aXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9n
cmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKK30KKworc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG5hbWU7CisgICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFt
ZS51dGY4KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygi
d2ViZ2xfIiwgaGV4KG51bWJlciwgTG93ZXJjYXNlKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VN
YXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xU
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1h
cC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8m
IHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGF1
dG8gc3ltYm9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoc3ltYm9sRW50
cnkgPT0gc3ltYm9sTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgYXV0byYgbWFwcGVkTmFtZSA9IHN5bWJvbEVudHJ5LT52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OworICAgIHJldHVybiBTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0
aCgpKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xO
YW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJv
bFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwor
ICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIGZvciAoR0NHTHNpemVp
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBw
ZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsK
KyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52
YWx1ZSgpOworICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRl
ZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgorICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRT
aGFkZXJNYXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVy
TWFwLmVuZCgpKSB7CisgICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7
CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFw
KGxpbmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFw
cGVkTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgICAg
IG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJz
LnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoc3lt
Ym9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkg
YmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCisgICAg
ICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIg
cHJvZ3JhbS4KKyAgICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCisgICAgICAgICAg
ICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwor
ICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFk
ZXJzLmdldCgpKTsKKworICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hl
ZE5hbWUobmFtZSk7CisKKyAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51
bGxwdHIpOworCisgICAgICAgIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVy
YXRlZE5hbWUsIG5hbWUpOworCisgICAgICAgIHJldHVybiBnZW5lcmF0ZWROYW1lOworICAgIH0K
KworICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9
IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGZvciAoY29uc3QgYXV0
byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9s
RW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQorICAgICAgICAgICAgcmV0dXJu
IHN5bWJvbEVudHJ5LmtleTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7CisgICAgCisgICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNo
YWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYg
KG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsK
KyAgICB9CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNo
YWRlcnMgYWZ0ZXIgbGlua2luZy4KKyAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFw
LmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQo
KSkgeworICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOworICAgICAg
ICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlu
a2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5h
bE5hbWUpCisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgICAg
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hh
ZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1l
KQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgIH0KKworICAg
IGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0
aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxl
ZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55
IHNoYWRlciBwcm9ncmFtLgorCisgICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2li
bHlVbnVzZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGNhY2hlZCAhPSBt
X3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZC0+dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK1N0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAo
c2l6ZV90IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4o
U0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTaGFkZXJTb3Vy
Y2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tp
XSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25z
dCBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0
YXRpY19jYXN0PGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7CisgICAg
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZS5jX3N0cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuYW1lOworfQorCitp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkK
KyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJv
bE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAg
TE9HKFdlYkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJu
IDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkp
OworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGly
ZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICByZXR1cm4gOjpnbEdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIFNldCBhbiBhcmJpdHJh
cnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCisgICAgLy8g
YSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIg
dGhlIGVycm9yLgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdl
IGdvdCBOT19FUlJPUi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsK
KyAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJv
ciA9PSBOT19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOworICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBtb3ZlZEFuRXJyb3I7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRFcnJvcigpCit7CisgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUg
c3ludGhldGljIGVycm9yIGxpc3QgaW4gY2FzZQorICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFs
cmVhZHkgdGhlcmUsIHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCisgICAgICAg
IC8vIGdsR2V0RXJyb3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3Ig
Y29kZSBvbmNlLgorICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAg
ICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOworICAgIH0KKworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKKworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBy
ZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmco
bmFtZSkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKwor
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KworICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVi
dWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30K
KworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30KKwor
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVy
RVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRl
cikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1NoYWRl
cihzaGFkZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRl
eHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7
CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworCisgICAgR0NHTHNpemVpIGNvdW50ID0gMDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICBpZiAoY291bnQgPT0gMikKKyAgICAgICAg
bV9saW5rZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0s
IHNoYWRlcnNbMV0pKTsKKworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQgcGFyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3Rvciwg
R0NHTGZsb2F0IHVuaXRzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBm
IHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBp
bnZlcnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKworICAgIFNoYWRlclNvdXJjZUVudHJ5
IGVudHJ5OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9zaGFkZXJTb3Vy
Y2VNYXAuc2V0KHNoYWRlciwgV1RGTW92ZShlbnRyeSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NH
THVpbnQgbWFzaykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3Rl
bmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVu
Y2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NH
TGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2ls
T3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRl
cmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUs
IGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZv
cm0yZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZihs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBh
cnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2Z2
KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGludCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24s
IGFycmF5LmJ1ZlNpemUsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2
MSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbnQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0z
aShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
YXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNp
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9y
bTRpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJh
eSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJy
YXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAx
NikpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRy
YW5zcG9zZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVc2VQcm9ncmFtKHBy
b2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0LCAxPiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRh
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NH
THVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRy
aWIyZihpbmRleCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBp
bmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVy
dGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdCwgMz4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXku
ZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYy
LCBHQ0dMZmxvYXQgdjMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2
Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkg
c3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRl
eCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWln
aHQpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVWZXJ0ZXhBcnJheSgpCit7CisgICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0
ZXhBcnJheU9FUygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVW
ZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQoreworICAgIGdldEV4dGVuc2lvbnMo
KS5kZWxldGVWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit7
CisgICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3Jt
R0xPYmplY3QgYXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmJpbmRWZXJ0ZXhBcnJheU9F
UyhhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEJv
b2xlYW52KHBuYW1lLCB2YWx1ZS5kYXRhKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lKQoreworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dM
U3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmRhdGEp
OworfQorCitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChH
Q0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0NHTGludDY0IHZh
bHVlID0gMDsKKyAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11
c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0
aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAgIC8vIDo6
Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitH
Q0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0g
cG5hbWUsIEdDR0x1aW50IGluZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAg
VU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7CisgICAgLy8gRklYTUUg
MTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRv
IHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRl
eHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KKyAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1l
LCBpbmRleCwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQoreworICAg
IEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVCkKKyAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5D
SUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwor
ICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBH
Q0dMaW50IHZhbHVlID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAm
dmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChBQ1RJ
VkVfQVRUUklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAh
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICAqdmFsdWUg
PSByZXN1bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0
aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkpOworICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYg
c3ltYm9sQ291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFt
KS0+dmFsdWU7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxk
IGEgZmlsdGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcgb2YKKyAgICAvLyBvdXIgaW50ZXJuYWwg
YXR0cmlidXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUg
T3BlbkdMLgorICAgIEdDR0xpbnQgYXR0cmlidXRlQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7CisgICAg
Zm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICBB
Y3RpdmVJbmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwg
aW5mbyk7CisgICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0
dHJpYnV0ZUluZGV4TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gRG8gdGhlIHNh
bWUgZm9yIHVuaWZvcm1zLgorICAgIEdDR0xpbnQgdW5pZm9ybUNvdW50ID0gMDsKKyAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Cisg
ICAgZm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICAgICAg
QWN0aXZlSW5mbyBpbmZvOworICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBp
LCBpbmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVk
VG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAqdmFs
dWUgPSBzeW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBM
T0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEo
KSk7CisKKyAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAx
MjM0NTY3ODlhYmNkZWZBQkNERUZdKyIpOworCisgICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRM
b2c7CisgICAgCisgICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8g
dGhlIHNoYWRlciBzb3VyY2UgdGhhdAorICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBj
b21waWxlcnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKKyAgICAvLyB0aGlzIHdhcm5pbmcg
dG8gdGhlIHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAorICAgIC8v
IGlzIGNhdXNpbmcgaXQuCisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
YW5nbGVXYXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRl
cjUnIGlzIG5vdCBzdXBwb3J0ZWRcbiJfcyB9OworICAgIGludCBzdGFydEZyb20gPSBsb2cuc3Rh
cnRzV2l0aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsK
KyAgICBpbnQgbWF0Y2hlZExlbmd0aCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGludCBzdGFy
dCA9IHJlZ0V4cC5tYXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOworICAgICAg
ICBpZiAoc3RhcnQgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwcm9jZXNz
ZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkp
OworICAgICAgICBzdGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7CisKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hl
ZExlbmd0aCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3lt
Ym9sTmFtZShzaGFkZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7CisgICAgICAgIExPRyhXZWJH
TCwgIkRlbWFuZ2xpbmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBt
YXBwZWRTeW1ib2wudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQo
bWFwcGVkU3ltYm9sKTsKKyAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+
KGxvZy5sZW5ndGgoKSkpOworCisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5n
KHN0YXJ0RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2ViR0ws
ICJVbm1hbmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBH
TGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5m
byhsZW5ndGgpOworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZz
aXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBHQ0dMc2l6ZWkgY291bnQ7CisgICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAm
Y291bnQsIHNoYWRlcnMpOworCisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVy
cywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQorCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xH
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAg
IHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
QVNTRVJUKHNoYWRlcik7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisKKyAgICBjb25zdCBhdXRv
JiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgCisgICAgc3dp
dGNoIChwbmFtZSkgeworICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKKyAgICBjYXNlIFNIQURFUl9U
WVBFOgorICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgJnZhbHVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIElORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIp
Lmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RI
OgorICAgICAgICB2YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX0VOVU0pOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgY29u
c3QgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBpZiAoIWVu
dHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBHTGludCBsZW5n
dGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwg
Jmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisK
KyAgICBHTHNpemVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsK
KyAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0
YSgpKTsKKworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07
CisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8u
ZGF0YSgpLCBzaXplKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFk
ZXIpOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3Vy
Y2U7Cit9CisKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1l
dGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEdDR0xmbG9hdCB2
YWx1ZSA9IDAuZjsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7
CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldFVuaWZvcm1p
dihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5p
Zm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVk
U3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7Cisg
ICAgTE9HKFdlYkdMLCAiOjpnZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1
cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCitHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHZvaWQq
IHBvaW50ZXIgPSAwOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5h
bWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBwaXhlbHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgaWYgKHR5cGUgPT0gSEFMRl9G
TE9BVF9PRVMpCisgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgorCisg
ICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUg
Zm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2lu
ZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVlZAorICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBh
cyB3ZSBkbyBpbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgorICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEFMUEhBOgorICAgICAgICAgICAgLy8g
V2UgYXJlIHVzaW5nIEdMX1JFRCB0byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdl
bGwuCisgICAgICAgICAgICBmb3JtYXQgPSBSRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xf
UkcgdG8gYmFjayBHTF9MVU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAg
ICAgICAgICAgIGZvcm1hdCA9IFJHOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1F
OiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGlu
ZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4K
KyAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvbXByZXNzZWRUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKworUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdWludCBv
ID0gMDsKKyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAg
IHJldHVybiBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVy
KCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwor
ICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVNoYWRl
cigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVS
VEVYX1NIQURFUik7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuVGV4dHVyZXMo
MSwgJm8pOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7CisgICAgcmV0dXJu
IG87Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3Jt
R0xPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8pIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3Qg
Z29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2luZworICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVy
IGl0IGdldHMgZGVsZXRlZC4KKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAw
KTsKKyAgICB9CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3Zl
KHByb2dyYW0pOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
cmVuZGVyYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0
byYga2V5VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRl
eHR1cmU7CisgICAgfSk7CisgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3Ip
Cit7CisgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhl
dGljIGVycm9yIGxpc3QgdG8KKyAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBz
byBhIGNhbGxlciB0byBnZXRFcnJvciB3aWxsIGdldAorICAgIC8vIGFueSBlcnJvcnMgZnJvbSBn
bEVycm9yIGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemluZy4KKyAgICBtb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJy
b3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0
KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQor
ICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQoKQoreworICAgIGZvciAoYXV0byogY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRl
eHQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0
Q2hhbmdlZE5vdGlmaWNhdGlvbigpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9W
ZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1v
ZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkK
K3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZp
cnN0LCBjb3VudCwgcHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKKyAg
ICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQorewor
ICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlz
b3IpOworfQorCisjaWYgSEFWRShPUEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRl
eCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4KGluZGV4KTsKK30KKyNlbmRpZgorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29u
c3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgbGVuZ3RoKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKKyAgICBVTlVTRURfUEFSQU0odXNhZ2UpOworICAgIFVOVVNFRF9QQVJBTShzcmNP
ZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBk
c3RCeXRlT2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdD
R0x1aW50IGxlbmd0aCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oZHN0Qnl0ZU9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY0RhdGEpOworICAgIFVO
VVNFRF9QQVJBTShzcmNPZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCisj
aWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xl
bnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVP
ZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFy
Z2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOworfQorI2Vs
c2UKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xl
bnVtLCBHQ0dMZW51bSwgR0NHTGludHB0ciwgR0NHTGludHB0ciwgR0NHTHNpemVpcHRyKQorewor
fQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+
IGRhdGEpCit7CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgR0NHTHZvaWQq
IHB0ciA9IDo6Z2xNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBH
cmFwaGljc0NvbnRleHRHTDo6TUFQX1JFQURfQklUKTsKKyAgICBpZiAoIXB0cikKKyAgICAgICAg
cmV0dXJuOworICAgIG1lbWNweShkYXRhLmRhdGEsIHB0ciwgZGF0YS5idWZTaXplKTsKKyAgICBp
ZiAoITo6Z2xVbm1hcEJ1ZmZlcih0YXJnZXQpKQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oZGF0YSk7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50
IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dM
aW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmls
dGVyKQoreworICAgIFVOVVNFRF9QQVJBTShzcmNYMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kw
KTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWDEpOworICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGRzdFgwKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTApOworICAgIFVO
VVNFRF9QQVJBTShkc3RYMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAgICBVTlVTRURf
UEFSQU0obWFzayk7CisgICAgVU5VU0VEX1BBUkFNKGZpbHRlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IGxheWVyKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAg
IFVOVVNFRF9QQVJBTShhdHRhY2htZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dHVyZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMpCit7CisgICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQor
eworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50
cyk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVT
RURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3JjKTsKK30KKworI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdM
X0VTXzMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKQoreworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldElu
dGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5V
U0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAg
IFVOVVNFRF9QQVJBTShidWZTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKKyNlbmRp
ZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZCht
X3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisjZWxzZQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSwgR0NHTGVudW0sIEdD
R0xlbnVtLCBHQ0dMU3BhbjxHQ0dMaW50PikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9m
ZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2
ZWwpOworICAgIFVOVVNFRF9QQVJBTSh4b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeW9mZnNl
dCk7CisgICAgVU5VU0VEX1BBUkFNKHpvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAg
ICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURf
UEFSQU0oaGVpZ2h0KTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKG5h
bWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCit7CisgICAgVU5VU0VE
X1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odjApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50
IHYwLCBHQ0dMdWludCB2MSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2
MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7CisgICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAgICBVTlVTRURfUEFSQU0odjEpOworICAgIFVO
VVNFRF9QQVJBTSh2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWlu
dCB2MiwgR0NHTHVpbnQgdjMpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBV
TlVTRURfUEFSQU0odjApOworICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5VU0VEX1BBUkFN
KHYyKTsKKyAgICBVTlVTRURfUEFSQU0odjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShs
b2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRh
dGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBV
TlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
ZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0
cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAg
IFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwor
ICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50
IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VE
X1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh6KTsKKyAgICBVTlVTRURfUEFSQU0odyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVT
RURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBH
Q0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQoreworICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJB
TSh5KTsKKyAgICBVTlVTRURfUEFSQU0oeik7CisgICAgVU5VU0VEX1BBUkFNKHcpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwg
R0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRy
IG9mZnNldCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShz
aXplKTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0cmlkZSk7
CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBH
Q0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAgIFVOVVNFRF9QQVJBTShzdGFy
dCk7CisgICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAg
ICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdD
R0xlbnVtPiBidWZzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xp
bnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQoreworICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBV
TlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xT
cGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7
CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xl
bnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0o
ZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50
IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQoreworICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBV
TlVTRURfUEFSQU0oZGVwdGgpOworICAgIFVOVVNFRF9QQVJBTShzdGVuY2lsKTsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorewor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVR
dWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQoreworICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7
Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRm
b3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVy
eShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQoreworICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQorewor
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisKKyAg
ICByZXR1cm4gMDsKK30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1
ZXJ5T2JqZWN0dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIHJl
dHVybiAwOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTYW1wbGVyKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBV
TlVTRURfUEFSQU0oc2FtcGxlcik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odW5pdCk7CisgICAgVU5VU0VE
X1BBUkFNKHNhbXBsZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1w
bGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURf
UEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2Ft
cGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0o
cGFyYW0pOworfQorCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBs
ZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Cisg
ICAgcmV0dXJuIDAuZjsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFt
ZSkKKworeworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5h
bWUpOworICAgIHJldHVybiAwOworfQorCitHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQorewor
ICAgIFVOVVNFRF9QQVJBTShjb25kaXRpb24pOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisK
KyAgICByZXR1cm4gMDsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzU3luYyhHQ0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
U3luYyhHQ0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKK30KKworR0NH
TGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5
bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIFVOVVNF
RF9QQVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJB
TSh0aW1lb3V0KTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xp
bnQ2NCB0aW1lb3V0KQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFS
QU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsKK30KKworR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5h
bWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
CisgICAgcmV0dXJuIDA7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxh
dGZvcm1HTE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaWQpOworfQorCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9y
bUdMT2JqZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTShpZCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVk
YmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgaWQpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRp
dmVNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShwcmltaXRpdmVNb2RlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQoreworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBH
Q0dMZW51bSBidWZmZXJNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBV
TlVTRURfUEFSQU0odmFyeWluZ3MpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXJNb2RlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
KQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRi
YWNrKCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNm
b3JtRmVlZGJhY2soKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
QnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWlu
dCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dM
c2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJB
TShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShzaXplKTsKK30KKworVmVjdG9yPEdDR0x1aW50
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQoreworICAg
IFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybU5hbWVzKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25z
dCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVmVjdG9yPEdDR0xpbnQ+IHJlc3VsdCh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOworI2lm
IEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCisgICAgQVNTRVJUKHByb2dyYW0p
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5z
aXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHJlc3VsdC5kYXRhKCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
KyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0dDR0x1aW50IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJv
Z3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja05hbWUpOworICAgIHJldHVybiAw
OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1C
bG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJ
bmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVu
aWZvcm1CbG9ja0luZGV4KTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tCaW5kaW5nKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURf
UEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tC
aW5kaW5nKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMo
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJB
TSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGZv
cm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxv
Y2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
cHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICBVTlVT
RURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSAs
IEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtLCBH
Q0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVt
LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
aW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NH
TGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51
bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQorewor
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
Tik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0lu
c3RhbmNlZEFOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48
Y29uc3QgR0NHTHNpemVpPiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQor
eworICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1l
bnRzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTHNpemVpKQoreworICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NH
TGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQoreworICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNh
ZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKK3sK
KyAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIg
fHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOworICAgIFVu
aXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CisgICAgdW5zaWduZWQgc2l6ZSA9IDA7Cisg
ICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CisgICAgICAgIFBpeGVsU3RvcmVQYXJh
bXMgcGFyYW1zOworICAgICAgICBwYXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50Owor
ICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7
CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVk
IGNoYXI+KHNpemUpOworICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwg
c2l6ZSk7CisgICAgfQorICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4oemVy
by5nZXQoKSwgc2l6ZSkpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTEwMyw2
ICszMTc3LDYgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW4KICAgICByZXR1cm4gcmVhZENvbXBv
c2l0ZWRSZXN1bHRzKCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30KIAotI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDZjODFlYTdhODg5NTQwZDUz
ZTA2NWQ0NTM0YjQ2OTU2ZjIwY2ZhMWYuLmJhOWQ1YWY5MGQ3NDg1YTc2NDM1NjkyZGI1NjBhYmJl
OWQ4MTUwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC0yNSw1MyAr
MjUsMTcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoV0VCR0wpCisjaWYgRU5BQkxF
KFdFQkdMKSAmJiAhVVNFKEFOR0xFKQogCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIK
KyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKICNpbmNs
dWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCIKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIK
LSNlbmRpZgotCi0jaWYgVVNFKENBKQotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgotI2Vu
ZGlmCi0KLSNpZiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiQU5HTEVVdGlsaXRpZXMuaCIKLSNlbHNl
Ci0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xP
cGVuR0xDb21tb24uaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIlNj
b3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QuaCIKLSNlbmRpZgotCi0vLyBGSVhNRTogRmlu
ZCBhIGJldHRlciB3YXkgdG8gYXZvaWQgdGhlIG5hbWUgY29uZmxpY3Rpb24gZm9yIE5PX0VSUk9S
LgotI2lmIFBMQVRGT1JNKFdJTikKLSN1bmRlZiBOT19FUlJPUgotI2VsaWYgUExBVEZPUk0oR1RL
KQotLy8gVGhpcyBkZWZpbmUgaXMgZnJvbSB0aGUgWDExIGhlYWRlcnMsIGJ1dCBpdCdzIHVzZWQg
YmVsb3csIHNvIHdlIG11c3QgdW5kZWZpbmUgaXQuCi0jdW5kZWYgVkVSU0lPTgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShDT0NPQSkKLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLU9CSkNfQ0xBU1MgV2Vi
R0xMYXllcjsKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQogI2lmIFVTRShOSUNPU0lBKQog
bmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgR0NHTExheWVyOwpAQCAtODAsOSArNDQsNyBAQCBj
bGFzcyBHQ0dMTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV4dGVuc2lvbnNH
TDsKLSNpZiBVU0UoQU5HTEUpCi1jbGFzcyBFeHRlbnNpb25zR0xBTkdMRTsKLSNlbGlmIFVTRShP
UEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVT
OwogI2VsaWYgVVNFKE9QRU5HTCkKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTDsKQEAgLTk3LDI4
ICs1OSwxMSBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAKIHR5cGVk
ZWYgSGFzaE1hcDxDU3RyaW5nLCB1aW50NjRfdD4gU2hhZGVyTmFtZUhhc2g7CiAKKy8vIEJhc2Ug
Y2xhc3MgZm9yIEdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIE9wZW5HTCBvciBP
cGVuR0wgRVMuCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCA6
IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTAogewogcHVibGljOgogICAgIHZpcnR1YWwgfkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKCk7Ci0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0IG92ZXJyaWRlOwotI2lmIFVTRShBTkdMRSkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdDsKLSAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Q7Ci0gICAgR0NHTGVudW0g
ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICBzdGF0aWMgR0NHTGVudW0gZHJhd2lu
Z0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2lu
Z1RhcmdldCk7Ci0gICAgc3RhdGljIEdDR0xpbnQgRUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOwotICAgIGVudW0gY2xh
c3MgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgewotICAgICAgICAvLyBSZWxlYXNlcyBj
dXJyZW50IGNvbnRleHQgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgY2FsbHMgZG9uZSBp
biB0aGUgdGhyZWFkLgotICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCi0gICAgICAgIC8v
IFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMIGNhbGxzIGRvbmUgaW4gdGhlIHRocmVhZC4KLSAgICAgICAgUmVsZWFzZVRocmVhZFJlc291
cmNlcywKLSAgICAgICAgLy8gUmVsZWFzZXMgYWxsIGdsb2JhbCBzdGF0ZS4gU2hvdWxkIGJlIHVz
ZWQgb25seSBhZnRlciBhbGwgZGVwZW5kaW5nIG9iamVjdHMgaGF2ZQotICAgICAgICAvLyBiZWVu
IHJlbGVhc2VkLgotICAgICAgICBUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzCi0g
ICAgfTsKLSAgICBzdGF0aWMgYm9vbCByZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJl
YWRSZXNvdXJjZUJlaGF2aW9yKTsKLSNlbmRpZgogCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5n
IG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBw
cmVwYXJlVGV4dHVyZSgpOwpAQCAtMTMyLDE1ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBFcXVp
dmFsZW50IHRvIDo6Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBwaXhlbHM9PTAgd2l0aCBubyBhbGxv
Y2F0aW9uLgogICAgIHZvaWQgdGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CiAKLSNpZiAhVVNFKEFOR0xFKQotICAgIC8vIEhlbHBl
ciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXpl
ZCB0byAwLgotICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVk
LgotICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQg
c2V0dGluZy4KICAgICBib29sIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMaW50IGFsaWdubWVudCA9IDQpOwotI2VuZGlmCiAKICAgICBib29sIGlz
R0xFUzJDb21wbGlhbnQoKSBjb25zdCBmaW5hbDsKLQogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg
IC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCiAgICAgLy8KQEAgLTIwNiw5ICsxNDUsNyBAQCBw
dWJsaWM6CiAgICAgR0NHTGludDY0IGdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CiAgICAgR0NHTGludDY0IGdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGlu
ZGV4KSBmaW5hbDsKICAgICBHQ0dMaW50IGdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwotI2lmICFVU0UoQU5HTEUpCiAgICAgdm9pZCBn
ZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAg
ICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwogICAg
IFN0cmluZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3RbMl0sIEdDR0xzaXpl
aSwgY29uc3QgU3RyaW5nJik7CiAgICAgR0NHTGludCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwpAQCAtMjg2LDEwICsyMjMs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCkgZmlu
YWw7CiAgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7Ci0j
aWYgIVVTRShBTkdMRSkKICAgICBib29sIGNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xP
YmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25z
dDsKICAgICBib29sIHByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRl
ciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7Ci0jZW5kaWYKIAogICAg
IHZvaWQgdmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4KSBmaW5hbDsK
ICAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0LCAxPiB2YWx1ZXMpIGZpbmFsOwpAQCAtMzE3LDEwICsyNTIsOCBAQCBwdWJsaWM6
CiAKICAgICAvLyA9PT09PT09PT09IFdlYkdMMiBlbnRyeSBwb2ludHMuCiAKLSNpZiAhVVNFKEFO
R0xFKQogICAgIHZvaWQgYnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNvbnN0IHZvaWQqIGRh
dGEsIEdDR0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxlbmd0aCk7
CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RC
eXRlT2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1
aW50IGxlbmd0aCk7Ci0jZW5kaWYKICAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVt
IHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQs
IEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKSBmaW5hbDsKIAogICAg
IHZvaWQgZ2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0
LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CkBAIC00NDUsOSArMzc4LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIm
KSBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENvbXBvc2l0ZWRSZXN1
bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImKSBmaW5hbDsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQotICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFT
YW1wbGUoKSBmaW5hbDsKLSNlbmRpZgogCiAgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwogICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CkBAIC00NTYsOSAr
Mzg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgcHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50
KTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBkaXNwbGF5V2FzUmVj
b25maWd1cmVkKCk7Ci0jZW5kaWYKIAogICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9v
bCkgZmluYWw7CiAKQEAgLTQ4NCwxMiArNDExLDggQEAgcHVibGljOgogICAgIC8vIGFsbCBtZXRo
b2RzIGl0IGNvbnRhaW5zIG1heSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0ZWQgb24gdGhlCiAgICAg
Ly8gY3VycmVudCBoYXJkd2FyZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnNHTDo6c3VwcG9ydHMoKSB0
bwogICAgIC8vIGRldGVybWluZSB0aGlzLgotI2lmICFVU0UoQU5HTEUpCiAgICAgLy8gVXNlIGNv
dmFyaWFudCByZXR1cm4gdHlwZSBmb3IgT1BFTkdML09QRU5HTF9FUwogICAgIEV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbiYgZ2V0RXh0ZW5zaW9ucygpIGZpbmFsOwotI2Vsc2UKLSAgICBFeHRlbnNp
b25zR0wmIGdldEV4dGVuc2lvbnMoKSBmaW5hbDsKLSNlbmRpZgogCiAgICAgdm9pZCBzaW11bGF0
ZUV2ZW50Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcpIG92ZXJyaWRlOwogCkBA
IC00OTcsMzEgKzQyMCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5
KCkgb3ZlcnJpZGU7CiAKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0g
ICAgR3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBzdGF0
aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYs
IFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4
dCYpOwotCi0jaWYgVVNFKEFOR0xFKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlz
cGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQTEFZOwotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgbG93
UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5cGUsIC0xKTsKLSAgICBj
b25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQZXJmb3JtYW5jZURpc3Bs
YXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwotI2VuZGlmCi0jZW5kaWYK
LQogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgR3JhcGhpY3NDb250ZXh0
R0xJT1N1cmZhY2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47Ci0gICAgRUdMRGlzcGxheSBtX2Rpc3Bs
YXlPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRl
eHRPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBt
X2NvbmZpZ09iaiB7IG51bGxwdHIgfTsKLSNlbmRpZgorCiAgICAgR0NHTHVpbnQgbV90ZXh0dXJl
IHsgMCB9OwogCi1wcml2YXRlOgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGlj
IGVudHJ5IHBvaW50cyB0aGF0IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgLy8gQ2FsbGVk
IG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIG9mIEV4dGVuc2lvbnNHTCB0aGF0
IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBX
QVJOX1VOVVNFRF9SRVRVUk47CkBAIC01NDcsMjQgKzQ1MCw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmID0gSW50UmVj
dCgpKTsKICAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1
aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwog
Ci0jaWYgVVNFKEFOR0xFKQotICAgIGJvb2wgcmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCk7
Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7Ci0gICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7Ci0gICAg
c3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXks
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEU7Ci0jZW5kaWYKLSNpZiBVU0UoQU5HTEUpCi0gICAgLy8gUmV0dXJucyBm
YWxzZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgotICAgIGJvb2wg
d2FpdEFuZFVwZGF0ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgLy8g
UGxhdGZvcm0gc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKLSAgICBz
dGF0aWMgdm9pZCBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKLSNlbmRpZgogCi0j
aWYgIVVTRShBTkdMRSkKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBVbmlxdWVSZWY8c2g6
OlNoYWRlclZhcmlhYmxlPj4gU2hhZGVyU3ltYm9sTWFwOwogCiAgICAgc3RydWN0IFNoYWRlclNv
dXJjZUVudHJ5IHsKQEAgLTYzMSwxMiArNTE3LDggQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRlck5hbWVIYXNoPiBuYW1lSGFzaE1hcEZvclNoYWRl
cnM7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKIAotI2lmIFVTRShBTkdMRSkKLSAgICBmcmllbmQg
Y2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnNH
TEFOR0xFPiBtX2V4dGVuc2lvbnM7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVO
R0xfRVMpCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVTOwogICAgIGZyaWVu
ZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xDb21tb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4
dGVuc2lvbnNHTE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CkBAIC02NDgsOSArNTMwLDcgQEAgcHJp
dmF0ZToKIAogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+PiBtX3ZlcnRleEFycmF5OwogCi0jaWYg
IVVTRShBTkdMRSkKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOwotI2VuZGlmCiAK
ICAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CkBAIC02NTgsNTQgKzUzOCwxNCBAQCBwcml2YXRlOgogICAgIEdDR0x1aW50IG1faW50ZXJtZWRp
YXRlVGV4dHVyZSB7IDAgfTsKICNlbmRpZgogCi0jaWYgIVVTRShBTkdMRSkgJiYgVVNFKE9QRU5H
TF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogICAgIEdDR0x1aW50IG1fZGVwdGhCdWZmZXIgeyAw
IH07CiAgICAgR0NHTHVpbnQgbV9zdGVuY2lsQnVmZmVyIHsgMCB9OwogI2VuZGlmCiAgICAgR0NH
THVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CiAKICAgICBHQ0dMdWludCBtX2ludGVy
bmFsQ29sb3JGb3JtYXQgeyAwIH07Ci0jaWYgVVNFKEFOR0xFKQotICAgIEdDR0x1aW50IG1faW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgeyAwIH07Ci0jZW5kaWYKLSAgICBzdHJ1Y3QgR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZSB7Ci0gICAgICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsK
LSAgICAgICAgR0NHTHVpbnQgYm91bmREcmF3RkJPIHsgMCB9OwotICAgICAgICBHQ0dMZW51bSBh
Y3RpdmVUZXh0dXJlVW5pdCB7IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCB9OwotCi0gICAg
ICAgIHVzaW5nIEJvdW5kVGV4dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCi0gICAgICAgICAg
ICBzdGQ6OnBhaXI8R0NHTHVpbnQsIEdDR0xlbnVtPiwKLSAgICAgICAgICAgIEludEhhc2g8R0NH
TGVudW0+LAotICAgICAgICAgICAgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxH
Q0dMdWludD4sCi0gICAgICAgICAgICBQYWlySGFzaFRyYWl0czxXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+Ci0gICAgICAgID47Ci0gICAgICAgIEJvdW5kVGV4dHVyZU1hcCBib3Vu
ZFRleHR1cmVNYXA7Ci0gICAgICAgIEdDR0x1aW50IGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25z
dCB7IHJldHVybiBib3VuZFRleHR1cmUoYWN0aXZlVGV4dHVyZVVuaXQpOyB9Ci0gICAgICAgIEdD
R0x1aW50IGJvdW5kVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1
cmVVbml0KTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5k
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgR0NHTHVpbnQgY3VycmVudEJv
dW5kVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQp
OyB9Ci0gICAgICAgIEdDR0xlbnVtIGJvdW5kVGFyZ2V0KEdDR0xlbnVtIHRleHR1cmVVbml0KSBj
b25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJl
TWFwLmZpbmQodGV4dHVyZVVuaXQpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5k
VGV4dHVyZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVl
LnNlY29uZDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CiAKLSAgICAgICAgdm9p
ZCBzZXRCb3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQsIEdDR0x1aW50IHRleHR1cmUs
IEdDR0xlbnVtIHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgYm91bmRUZXh0dXJlTWFw
LnNldCh0ZXh0dXJlVW5pdCwgc3RkOjptYWtlX3BhaXIodGV4dHVyZSwgdGFyZ2V0KSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8
R0NHTHVpbnQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgICAgIFRleHR1cmVTZWVkQ291bnQgdGV4dHVyZVNlZWRD
b3VudDsKLSAgICB9OwogCiAgICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBtX3N0YXRlOwogCkBA
IC03MTQsMTYgKzU1NCw2IEBAIHByaXZhdGU6CiAgICAgR0NHTHVpbnQgbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKICAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIgeyAwIH07CiAKLSNpZiBVU0UoQU5HTEUpCi0gICAgLy8gRm9yIHByZXNlcnZlRHJhd2lu
Z0J1ZmZlcjp0cnVlIHdpdGhvdXQgbXVsdGlzYW1wbGluZy4KLSAgICBHQ0dMdWludCBtX3ByZXNl
cnZlRHJhd2luZ0J1ZmZlclRleHR1cmUgeyAwIH07Ci0gICAgLy8gQXR0YWNoZXMgbV90ZXh0dXJl
IHdoZW4gbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIGlzIG5vbi16ZXJvLgotICAgIEdD
R0x1aW50IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPIHsgMCB9OwotICAgIC8vIFF1ZXJpZWQg
YXQgZGlzcGxheSBzdGFydHVwLgotICAgIEVHTGludCBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFy
Z2V0IHsgLTEgfTsKLQotI2VuZGlmCi0KICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNp
emVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0NHTGVudW0+IG1fc3ludGhldGljRXJyb3Jz
OwogCkBAIC03NDQsMjkgKzU3NCw4IEBAIHByaXZhdGU6CiAjaWYgVVNFKENBSVJPKQogICAgIFBs
YXRmb3JtR0xPYmplY3QgbV92YW8geyAwIH07CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIC8vIEJhY2tpbmcgc3RvcmUgZm9yIHRoZSB0aGUgYnVmZmVyIHdoaWNoIGlzIGV2ZW50
dWFsbHkgdXNlZCBmb3IgZGlzcGxheS4KLSAgICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZl
ciA9PSBmYWxzZSwgdGhpcyBpcyB0aGUgZHJhd2luZyBidWZmZXIgYmFja2luZyBzdG9yZS4KLSAg
ICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9PSB0cnVlLCB0aGlzIGlzIGJsaXR0ZWQg
dG8gZHVyaW5nIGRpc3BsYXkgcHJlcGFyZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNl
PiBtX2Rpc3BsYXlCdWZmZXJCYWNraW5nOwotICAgIHZvaWQqIG1fZGlzcGxheUJ1ZmZlclBidWZm
ZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgYm9vbCBtX3N3
aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uIHsgZmFsc2UgfTsKLSAgICBTY29wZWRI
aWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0IG1faGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdDsKLSNl
bmRpZgotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFPiBtX2N2OwotI2VuZGlmCi0jaWYgVVNF
KEFOR0xFKQotICAgIGJvb2wgbV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxpbWl0ID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4UGVuZGluZ0ZyYW1lcyA9IDM7Ci0g
ICAgc2l6ZV90IG1fb2xkZXN0RnJhbWVDb21wbGV0aW9uRmVuY2UgeyAwIH07Ci0gICAgU2NvcGVk
R0xGZW5jZSBtX2ZyYW1lQ29tcGxldGlvbkZlbmNlc1ttYXhQZW5kaW5nRnJhbWVzXTsKLSNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3MzBkNmQzNjdmMWY5NTQ0NWIwYTc5YzE3NGRhODhhM2VlNTFjYjljLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyODg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCi0KLSNpZiBFTkFC
TEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCi0KLSNpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCi0jZWxzZQotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9w
ZW5HTC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
Zy5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0j
aW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpZiBVU0UoTElCRVBP
WFkpCi0jaW5jbHVkZSAiRXBveHlTaGltcy5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNs
dWRlICJPcGVuR0xFU1NoaW1zLmgiCi0jZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlcigpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VG
bGFnOwotICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWRO
YW1lSGFzaDsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10gewotICAgICAgICBzaGFy
ZWROYW1lSGFzaCA9IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OwotICAgIH0p
OwotCi0gICAgcmV0dXJuICpzaGFyZWROYW1lSGFzaDsKLX0KLQotc3RhdGljIHZvaWQgc2V0Q3Vy
cmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkK
LXsKLSAgICAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFz
aDsKLX0KLQotLy8gSGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2Nv
bXBpbGVyIHRvIGRvCi0vLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0
YXRpYyBtZXRob2QsIGJlZm9yZQotLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIKLS8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0
aGUgY3VycmVudCBpbnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KLQotc3RhdGlj
IHVpbnQ2NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5n
dGgpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ1N0cmlu
ZyBuYW1lQXNDU3RyaW5nID0gQ1N0cmluZyhuYW1lKTsKLQotICAgIC8vIExvb2sgdXAgbmFtZSBp
biBvdXIgbG9jYWwgbWFwLgotICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFw
Rm9yU2hhZGVyID0gKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOwotICAgIFNoYWRl
ck5hbWVIYXNoOjppdGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyLT5maW5kKG5hbWVBc0NTdHJpbmcpOwotICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlci0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52
YWx1ZTsKLQotICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOwot
Ci0gICAgLy8gQ29udmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8g
YSA2NC1iaXQgcmVzdWx0Ci0gICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUg
b2Ygb3VyIHRhYmxlLiBPdmVyZmxvdyB3b3VsZAotICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlm
IHdlJ3JlIGFscmVhZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCi0gICAgLy8gd2Un
cmUgaG9waW5nIHRoYXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKLSAgICAv
LyBkb24ndCBoYXZlIHRoYXQgbWFueSBzeW1ib2xzKS4KLQotICAgIHVpbnQ2NF90IHJlc3VsdCA9
IGhhc2hWYWx1ZTsKLSAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhh
c2hNYXBGb3JTaGFkZXItPnNpemUoKSArIDEpOwotCi0gICAgY3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyLT5zZXQobmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChj
b25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCi17Ci0gICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24m
IGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsK
LSAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKSkgewotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRo
U3RlbmNpbEV4dGVuc2lvbik7Ci0gICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2ls
IGlzIHRydWUuCi0gICAgICAgICAgICBhdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgICAgICBzZXRDb250ZXh0
QXR0cmlidXRlcyhhdHRycyk7Ci0gICAgfQotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1f
aXNGb3JXZWJHTDIpIHsKLSAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7Ci0gICAgICAgICAgICBhdHRycy5hbnRpYWxp
YXMgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJDb21w
b3NpdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLQotI2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwg
R0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJ
VEhFUiwgR0xfRkFMU0UpOwotI2VuZGlmCi0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5h
bnRpYWxpYXMpCi0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVk
aWF0ZVRleHR1cmUpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7
Ci0gICAgZ2xGbHVzaCgpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9m
Ym8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgZWxzZQotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8p
OwotICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3N0YXRlLmJvdW5kVGFy
Z2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUo
R0xfVEVYVFVSRTApIDogMCk7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCi0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVy
aW5nUmVzdWx0cygpCi17Ci0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlm
IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewotICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG11c3RSZXN0b3Jl
RkJPID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJl
YWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgICAgICBpZiAobV9zdGF0ZS5ib3Vu
ZERyYXdGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
LSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXV0byByZXN1bHQgPSBy
ZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQot
ewotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50
SGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWln
aHQgPj0gMCk7Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7
Ci0gICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVz
KCk7Ci0KLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NP
Ul9URVNULCBHTF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRo
ZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Ci0gICAgCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9
IHJlc2hhcGVGQk9zKEludFNpemUod2lkdGgsIGhlaWdodCkpOwotCi0gICAgLy8gSW5pdGlhbGl6
ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7MCwgMCwg
MCwgMH0sIGNsZWFyRGVwdGggPSAwOwotICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7Ci0gICAg
R0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RS
VUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFOwotICAgIEdMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZm
ZmZmZmYsIHN0ZW5jaWxNYXNrQmFjayA9IDB4ZmZmZmZmZmY7Ci0gICAgR0xiaXRmaWVsZCBjbGVh
ck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOwotICAgIDo6Z2xHZXRGbG9hdHYoR0xfQ09MT1Jf
Q0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOwotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDAp
OwotICAgIDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Ci0g
ICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKLQot
ICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJzLmRl
cHRoKSB7Ci0gICAgICAgIDo6Z2xHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVh
ckRlcHRoKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7
Ci0gICAgICAgIDo6Z2xHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2sp
OwotICAgICAgICA6OmdsRGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVhck1hc2sgfD0g
R0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAg
ICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5j
aWwpOwotICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKDApOwotICAgICAgICA6OmdsR2V0SW50ZWdl
cnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNp
bE1hc2spKTsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1B
U0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7Ci0gICAgICAg
IDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKLSAgICAgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgMHhmZmZmZmZmZik7Ci0gICAgICAgIGNs
ZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgfQotCi0gICAgOjpnbENsZWFy
KGNsZWFyTWFzayk7Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNv
bG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKLSAgICA6OmdsQ29sb3JNYXNr
KGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7
Ci0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFz
ayk7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xDbGVhclN0
ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
RlJPTlQsIHN0ZW5jaWxNYXNrKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
QkFDSywgc3RlbmNpbE1hc2tCYWNrKTsKLSAgICB9Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8p
Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0KLSAgICBhdXRvIGVycm9yID0gOjpnbEdl
dEVycm9yKCk7Ci0gICAgaWYgKGVycm9yICE9IEdMX05PX0VSUk9SKSB7Ci0gICAgICAgIFJFTEVB
U0VfTE9HKFdlYkdMLCAiRmF0YWw6IE9wZW5HTCBlcnJvciBkdXJpbmcgR3JhcGhpY3NDb250ZXh0
R0wgYnVmZmVyIGluaXRpYWxpemF0aW9uICglZCkuIiwgZXJyb3IpOwotICAgICAgICBmb3JjZUNv
bnRleHRMb3N0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICA6OmdsRmx1c2goKTsK
LX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmco
UGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRT
aGFkZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZl
cnRleFNoYWRlcikpOwotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFn
bWVudFNoYWRlcikpOwotICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVu
dEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwot
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIHNoOjpTaGFkZXJWYXJpYWJsZT4gY29tYmluZWRWYXJ5aW5n
czsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA6IHZlcnRleEVudHJ5LnZhcnlp
bmdNYXApIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBzeW1ib2xOYW1lID0gdmVydGV4U3ltYm9s
LmtleTsKLSAgICAgICAgLy8gVGhlIHZhcnlpbmcgbWFwIGluY2x1ZGVzIHZhcmlhYmxlcyBmb3Ig
ZWFjaCBpbmRleCBvZiBhbiBhcnJheSB2YXJpYWJsZS4KLSAgICAgICAgLy8gV2Ugb25seSB3YW50
IGEgc2luZ2xlIHZhcmlhYmxlIHRvIHJlcHJlc2VudCB0aGUgYXJyYXkuCi0gICAgICAgIGlmIChz
eW1ib2xOYW1lLmVuZHNXaXRoKCJdIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAvLyBEb24ndCBjb3VudCBidWlsdCBpbiB2YXJ5aW5ncy4KLSAgICAgICAgaWYgKHN5bWJvbE5h
bWUgPT0gImdsX0ZyYWdDb29yZCIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciIHx8
IHN5bWJvbE5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgY29uc3QgYXV0byYgZnJhZ21lbnRTeW1ib2wgPSBmcmFnbWVudEVudHJ5LnZhcnlp
bmdNYXAuZmluZChzeW1ib2xOYW1lKTsKLSAgICAgICAgaWYgKGZyYWdtZW50U3ltYm9sICE9IGZy
YWdtZW50RW50cnkudmFyeWluZ01hcC5lbmQoKSkKLSAgICAgICAgICAgIGNvbWJpbmVkVmFyeWlu
Z3MuYWRkKHN5bWJvbE5hbWUsIGZyYWdtZW50U3ltYm9sLT52YWx1ZSk7Ci0gICAgfQotCi0gICAg
c2l6ZV90IG51bVZhcnlpbmdzID0gY29tYmluZWRWYXJ5aW5ncy5zaXplKCk7Ci0gICAgaWYgKCFu
dW1WYXJ5aW5ncykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzdGQ6OnZlY3RvcjxzaDo6
U2hhZGVyVmFyaWFibGU+IHZhcmlhYmxlczsKLSAgICB2YXJpYWJsZXMucmVzZXJ2ZShjb21iaW5l
ZFZhcnlpbmdzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2YXJ5aW5nU3ltYm9sIDog
Y29tYmluZWRWYXJ5aW5ncy52YWx1ZXMoKSkKLSAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2
YXJ5aW5nU3ltYm9sKTsKLQotICAgIEdDR0xpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSAwOwotI2lm
IFVTRShPUEVOR0xfRVMpCi0gICAgOjpnbEdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMs
ICZtYXhWYXJ5aW5nVmVjdG9ycyk7Ci0jZWxzZQotICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdW
ZWN0b3JzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgR0NHTGludCBtYXhWYXJ5aW5nRmxvYXRzID0g
MDsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgJm1heFZh
cnlpbmdGbG9hdHMpOwotICAgICAgICBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1heFZhcnlpbmdGbG9h
dHMgLyA0OwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBzaDo6Q2hlY2tWYXJpYWJsZXNXaXRo
aW5QYWNraW5nTGltaXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJpYWJsZXMpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVj
dCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOwot
ICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOwot
ICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0
ZXhTaGFkZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwotCi0gICAgSGFzaE1hcDxT
dHJpbmcsIHNoOjpHTGVudW0+IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcDsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgZW50cnkgOiB2ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKSB7Ci0gICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZTsKLSAgICAgICAgdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmFkZChTdHJpbmcobWFwcGVkTmFt
ZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSwgZW50cnkudmFsdWUuZ2V0KCkucHJlY2lz
aW9uKTsKLSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRy
eS51bmlmb3JtTWFwKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0g
ZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKLSAgICAgICAgY29uc3QgYXV0byYgdmVydGV4
U3ltYm9sID0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmZpbmQoU3RyaW5nKG1hcHBlZE5hbWUu
Y19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSkpOwotICAgICAgICBpZiAodmVydGV4U3ltYm9s
ICE9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVl
ICE9IGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuYWN0aXZl
VGV4dHVyZVVuaXQgPSB0ZXh0dXJlOwotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQo
cHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAucmVtb3ZlKHByb2dyYW0pOwotICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRT
eW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwot
ICAgIExPRyhXZWJHTCwgIjo6YmluZEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgOjpn
bEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbWFwcGVkTmFtZS51dGY4KCkuZGF0
YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCaW5kQnVmZmVyKHRh
cmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZy
YW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0x1
aW50IGZibzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSBidWZmZXI7Ci0gICAgZWxz
ZQotICAgICAgICBmYm8gPSAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRp
c2FtcGxlRkJPIDogbV9mYm8pOwotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIp
OwotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZC
Tyk7Ci0gICAgaWYgKGZibyAhPSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERy
YXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IGZibzsKLSAgICB9Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0
YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4
dHVyZSwgdGFyZ2V0KTsKLSAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJl
ZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xC
bGVuZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhh
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwot
fSAgICAgICAKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0Is
IHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0g
dXNhZ2UpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMU3Bhbjxjb25zdCB2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVyRGF0
YSh0YXJnZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJ1ZmZl
clN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhKTsKLX0KLQot
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R0NHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLQotICAgIHJldHVybiA6OmdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjbGVhckNvbG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBm
IGIsIEdDR0xjbGFtcGYgYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bENsZWFyKG1hc2spOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyU3RlbmNpbChHQ0dMaW50IHMpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENsZWFyU3RlbmNp
bChzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xi
b29sZWFuIHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29s
ZWFuIGFscGhhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFR1cm4gb24gbmFtZSBtYXBw
aW5nLiBEdWUgdG8gdGhlIHdheSBBTkdMRSBuYW1lIGhhc2hpbmcgd29ya3MsIHdlCi0gICAgLy8g
cG9pbnQgYSBnbG9iYWwgaGFzaG1hcCB0byB0aGUgbWFwIG93bmVkIGJ5IHRoaXMgY29udGV4dC4K
LSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBtX2NvbXBpbGVyLmdldFJl
c291cmNlcygpOwotICAgIFNoSGFzaEZ1bmN0aW9uNjQgcHJldmlvdXNIYXNoRnVuY3Rpb24gPSBB
TkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb247Ci0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0
aW9uID0gbmFtZUhhc2hGb3JTaGFkZXI7Ci0KLSAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVy
cykKLSAgICAgICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1l
SGFzaD4oKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBG
b3JTaGFkZXJzLmdldCgpKTsKLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291
cmNlcyk7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9u
cy0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7Ci0KLSAgICBBTkdMRVJl
c291cmNlcy5IYXNoRnVuY3Rpb24gPSBwcmV2aW91c0hhc2hGdW5jdGlvbjsKLSAgICBtX2NvbXBp
bGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyKG51bGxwdHIpOwotCi0gICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNl
Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xh
dGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwotICAgIGNv
bnN0IGNoYXIqIHRyYW5zbGF0ZWRTaGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5k
YXRhKCk7Ci0gICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVy
Q1N0cmluZy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBvcmlnaW5hbCBz
aGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1c
biIsIGdldFNoYWRlclNvdXJjZShzaGFkZXIpLnV0ZjgoKS5kYXRhKCkpOwotICAgIExPRyhXZWJH
TCwgIi0tLSBiZWdpbiB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCB0
cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tIiwgdHJhbnNsYXRlZFNoYWRlclB0cik7Ci0KLSAg
ICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFu
c2xhdGVkU2hhZGVyTGVuZ3RoKTsKLSAgICAKLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIp
OwotICAgIAotICAgIGludCBjb21waWxlU3RhdHVzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJp
dihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAgICBTaGFkZXJT
b3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAg
Ly8gUG9wdWxhdGUgdGhlIHNoYWRlciBsb2cKLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6
Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAg
ICBpZiAobGVuZ3RoKSB7Ci0gICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgICAgIFZlY3Rv
cjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKLSAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hh
ZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICAgICAgUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICAgICAgZW50cnkubG9nID0gZ2V0
VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsK
LSAgICB9Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyAhPSBHTF9UUlVFKSB7Ci0gICAgICAgIGVu
dHJ5LmlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IHNoYWRlciB0
cmFuc2xhdG9yIHByb2R1Y2VkIGEgc2hhZGVyIHRoYXQgT3BlbkdMIHdvdWxkIG5vdCBjb21waWxl
LiIpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVy
KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBIYXNoTWFwPFBsYXRmb3JtR0xPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotCi0gICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2hh
ZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKLQotICAgIGNvbnN0IENTdHJp
bmcmIHNoYWRlclNvdXJjZUNTdHJpbmcgPSBlbnRyeS5zb3VyY2UudXRmOCgpOwotICAgIGNvbnN0
IGNoYXIqIHNoYWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOwotICAg
IGludCBzaGFkZXJTb3VyY2VMZW5ndGggPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmxlbmd0aCgpOwot
Ci0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuJXNc
bi0tLSBlbmQgZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4iLCBzaGFkZXJTb3VyY2VQdHIpOwot
Ci0gICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZzaGFk
ZXJTb3VyY2VMZW5ndGgpOwotCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLQotICAg
IGludCBjb21waWxlU3RhdHVzOwotCi0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElM
RV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKLQotICAgIGlmIChjb21waWxlU3RhdHVzID09IEdM
X1RSVUUpIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkRpcmVjdCBjb21waWxhdGlvbiBvZiBzaGFkZXIgc3VjY2VlZGVkLiIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVudHJ5LmlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAi
RXJyb3I6IGRpcmVjdCBjb21waWxhdGlvbiBvZiBzaGFkZXIgZmFpbGVkLiIpOwotICAgIH0KLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBU1NFUlQo
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChh
dHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGJvcmRlcik7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBU1NFUlQobV9zdGF0
ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewot
ICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEN1bGxG
YWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMo
R0NHTGVudW0gZnVuYykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRGVwdGhN
YXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsK
LSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFt
U3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwotICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJv
Z3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJs
ZShHQ0dMZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbERpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3Qs
IEdDR0xzaXplaSBjb3VudCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwot
ICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5
cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNl
dCkpKTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xFbmFibGUoY2FwKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVp
bnQgaW5kZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRmluaXNoKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRmx1c2goKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRnJhbWVi
dWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUs
IGxldmVsKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJv
bnRGYWNlKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwotICAgIDo6Z2xH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4
QXR0cmlidXRlU2l6ZSk7Ci0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXpl
KTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWlu
YXRpb24uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsK
LSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBp
bmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5k
YXRhKCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwg
U0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVu
Z3RoKSk7Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1l
LmRhdGEoKSwgbmFtZUxlbmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBw
aW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRl
eCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkp
OwotI2VuZGlmCi0KLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Ci0gICAgaW5mby50eXBl
ID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBH
Q0dMaW50IHN5bWJvbENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVT
eW1ib2xDb3VudChwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX0FUVFJJQlVURVMs
ICZzeW1ib2xDb3VudCk7Ci0gICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgfQotICAgIAotICAgIEFjdGl2ZVNoYWRlclN5bWJv
bENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAgICBHQ0dMdWludCByYXdJ
bmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5k
ZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5k
ZXhNYXBbaW5kZXhdIDogLTE7Ci0KLSAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9n
cmFtLCByYXdJbmRleCwgaW5mbyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOwotICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1T
aXplKTsKLQotICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4VW5pZm9ybVNpemUpOyAvLyBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCi0gICAg
R0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0g
dHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVu
aWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAg
aWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3RyaW5n
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9M
X1RZUEVfVU5JRk9STSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7Ci0gICAgCi0j
aWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxl
bmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSB1bmlm
b3JtICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0
ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotICAgIAot
ICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAg
IGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBHQ0dMaW50IHN5bWJv
bENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAu
ZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChw
cm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291bnQp
OwotICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHBy
b2dyYW0pOwotICAgIH0KLSAgICAKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJv
bENvdW50cyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXgg
PCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCkpID8g
c3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhdIDogLTE7
Ci0gICAgCi0gICAgcmV0dXJuIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJhd0luZGV4
LCBpbmZvKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHNpemVpIG1heENvdW50LCBHQ0dM
c2l6ZWkqIGNvdW50LCBQbGF0Zm9ybUdMT2JqZWN0KiBzaGFkZXJzKQotewotICAgIGlmICghcHJv
Z3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50
LCBjb3VudCwgc2hhZGVycyk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIYXNoZWROYW1l
KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBuYW1lOwotICAgIHVpbnQ2NF90IG51bWJlciA9IG5hbWVIYXNoRm9yU2hhZGVyKG5h
bWUudXRmOCgpLmRhdGEoKSwgbmFtZS5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
IndlYmdsXyIsIGhleChudW1iZXIsIExvd2VyY2FzZSkpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFN0
cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNl
TWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9s
VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRv
JiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBh
dXRvIHN5bWJvbEVudHJ5ID0gc3ltYm9sTWFwLmZpbmQobmFtZSk7Ci0gICAgaWYgKHN5bWJvbEVu
dHJ5ID09IHN5bWJvbE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgIGF1dG8mIG1hcHBlZE5hbWUgPSBzeW1ib2xFbnRyeS0+dmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZTsKLSAgICByZXR1cm4gU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5n
dGgoKSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
TmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1i
b2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0NHTHNpemVpIGNvdW50ID0gMDsK
LSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07Ci0gICAgZ2V0QXR0YWNoZWRT
aGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICBmb3IgKEdDR0xzaXpl
aSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7
Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUu
dmFsdWUoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0
ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KLSAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2Vk
U2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRl
ck1hcC5lbmQoKSkgewotICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVl
OwotICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1h
cHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAgICAg
ICBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVy
cy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHN5
bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5
IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAotICAg
ICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVy
IHByb2dyYW0uCi0gICAgICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICAg
ICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsK
LSAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hh
ZGVycy5nZXQoKSk7Ci0KLSAgICAgICAgYXV0byBnZW5lcmF0ZWROYW1lID0gZ2VuZXJhdGVIYXNo
ZWROYW1lKG5hbWUpOwotCi0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihu
dWxscHRyKTsKLQotICAgICAgICBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLnNldChnZW5l
cmF0ZWROYW1lLCBuYW1lKTsKLQotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkTmFtZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAg
PSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAgICAgIGlmIChuYW1lID09IHN5bWJv
bEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWUuY19zdHIoKSkKLSAgICAgICAgICAgIHJldHVy
biBzeW1ib2xFbnRyeS5rZXk7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0K
LVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBHQ0dMc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdOwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAm
Y291bnQsIHNoYWRlcnMpOwotICAgIAotICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5T
aGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlm
IChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7
Ci0gICAgfQotCi0gICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBz
aGFkZXJzIGFmdGVyIGxpbmtpbmcuCi0gICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1h
cC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5k
KCkpIHsKLSAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKLSAgICAg
ICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxp
bmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2lu
YWxOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgICAg
ICBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNo
YWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1l
LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTog
dGhleSBtYXkgYmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGls
ZWQsCi0gICAgICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFu
eSBzaGFkZXIgcHJvZ3JhbS4KLQotICAgICAgICBjb25zdCBhdXRvJiBjYWNoZWQgPSBtX3Bvc3Np
Ymx5VW51c2VkQXR0cmlidXRlTWFwLmZpbmQobmFtZSk7Ci0gICAgICAgIGlmIChjYWNoZWQgIT0g
bV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBj
YWNoZWQtPnZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdLCBzaXplX3QgY291bnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBmb3Ig
KHNpemVfdCBzeW1ib2xUeXBlID0gMDsgc3ltYm9sVHlwZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+
KFNIQURFUl9TWU1CT0xfVFlQRV9WQVJZSU5HKTsgKytzeW1ib2xUeXBlKSB7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgU2hhZGVyU291
cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcnNb
aV0pOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29u
c3QgU2hhZGVyU3ltYm9sTWFwJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChz
dGF0aWNfY2FzdDxlbnVtIEFOR0xFU2hhZGVyU3ltYm9sVHlwZT4oc3ltYm9sVHlwZSkpOwotICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewotICAg
ICAgICAgICAgICAgIGlmIChuYW1lID09IHN5bWJvbEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5h
bWUuY19zdHIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQot
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0p
Ci0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybiAtMTsKLQotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1i
b2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwotICAg
IExPRyhXZWJHTCwgIjo6Z2xHZXRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgp
KTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRp
cmVjdChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAtMTsKLQotCi0gICAgcmV0dXJuIDo6Z2xHZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7Ci0KLSAgICAvLyBTZXQgYW4gYXJiaXRy
YXJ5IGxpbWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgotICAgIC8v
IGEgcHJvYmxlbSBkcml2ZXIgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIG5ldmVyIGNsZWFy
IHRoZSBlcnJvci4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdvdWxkIGp1c3QgbG9vcCB1bnRpbCB3
ZSBnb3QgTk9fRVJST1IuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7
Ci0gICAgICAgIEdDR0xlbnVtIGVycm9yID0gZ2xHZXRFcnJvcigpOwotICAgICAgICBpZiAoZXJy
b3IgPT0gTk9fRVJST1IpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9zeW50aGV0aWNF
cnJvcnMuYWRkKGVycm9yKTsKLSAgICAgICAgbW92ZWRBbkVycm9yID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbW92ZWRBbkVycm9yOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RXJyb3IoKQotewotICAgIGlmICghbV9zeW50aGV0aWNFcnJvcnMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhl
IHN5bnRoZXRpYyBlcnJvciBsaXN0IGluIGNhc2UKLSAgICAgICAgLy8gdGhhdCBlcnJvciBpcyBh
bHJlYWR5IHRoZXJlLCBzaW5jZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgYm90aAotICAgICAg
ICAvLyBnbEdldEVycm9yIGFuZCBnZXRFcnJvciBpcyB0byBvbmx5IHJlcG9ydCBlYWNoIGVycm9y
IGNvZGUgb25jZS4KLSAgICAgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0g
ICAgICAgIHJldHVybiBtX3N5bnRoZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9P
UEVSQVRJT047Ci0KLSAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
cmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5n
KG5hbWUpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZmZXIpOwotfQotCi1HQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7
Ci0KLSAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1l
YnVmZmVyKQotewotICAgIGlmICghZnJhbWVidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNGcmFtZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Ci19
Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZl
ckVYVChyZW5kZXJidWZmZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFzaGFk
ZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNTaGFk
ZXIoc2hhZGVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
VGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQot
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0
ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdD
R0xmbG9hdCB3aWR0aCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQot
ewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLQotICAgIEdDR0xzaXplaSBjb3VudCA9IDA7Ci0gICAgUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyB9OwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9n
cmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAgaWYgKGNvdW50ID09IDIpCi0gICAgICAg
IG1fbGlua2VkU2hhZGVyTWFwLnNldChwcm9ncmFtLCBzdGQ6Om1ha2VfcGFpcihzaGFkZXJzWzBd
LCBzaGFkZXJzWzFdKSk7Ci0KLSAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50IHBhcmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3Is
IEdDR0xmbG9hdCB1bml0cykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1w
ZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwg
aW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBTaGFkZXJTb3VyY2VFbnRy
eSBlbnRyeTsKLQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291
cmNlTWFwLnNldChzaGFkZXIsIFdURk1vdmUoZW50cnkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdD
R0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0g
ZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0
ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3Rl
bmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNp
bE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6
cGFzcykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNp
bE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0
ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXpl
LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xV
bmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlm
b3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2Yo
bG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
YXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZs
b2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xV
bmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQg
djEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikp
OwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3Jt
M2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0z
aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xp
bnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdDR0xpbnQgdjMpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm00
aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bnQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZv
cm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJy
YXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA5KSk7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVu
aWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA5LCB0cmFuc3Bvc2UsIGFy
cmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUg
MTYpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVXNlUHJvZ3JhbShw
cm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9n
cmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0K
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdCwgMT4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkuZGF0
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdD
R0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0
cmliMmYoaW5kZXgsIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
LCAyPiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQg
aW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZl
cnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDM+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5
LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2
MiwgR0NHTGZsb2F0IHYzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2Miwg
djMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gYXJyYXkpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5k
ZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkoKQotewotICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuY3JlYXRlVmVy
dGV4QXJyYXlPRVMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
VmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICBnZXRFeHRlbnNpb25z
KCkuZGVsZXRlVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQot
ewotICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuaXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9y
bUdMT2JqZWN0IGFycmF5KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5iaW5kVmVydGV4QXJyYXlP
RVMoYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCb29sZWFu
dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+IHZhbHVlKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRC
b29sZWFudihwbmFtZSwgdmFsdWUuZGF0YSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSkKLXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICA6OmdsR2V0QnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZS5kYXRh
KTsKLX0KLQotR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjQo
R0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdDR0xpbnQ2NCB2
YWx1ZSA9IDA7Ci0gICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBt
dXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5p
dGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KLSAgICAvLyA6
OmdsR2V0SW50ZWdlcjY0dihwbmFtZSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQot
R0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwotICAgIC8vIEZJWE1F
IDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0
byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250
ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCi0gICAgLy8gOjpnbEdldEludGVnZXI2NGlfdihwbmFt
ZSwgaW5kZXgsIHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAg
ICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQpCi0gICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVO
Q0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsK
LSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
R0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwg
JnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoQUNU
SVZFX0FUVFJJQlVURVMgPT0gcG5hbWUgfHwgQUNUSVZFX1VOSUZPUk1TID09IHBuYW1lKTsKLSAg
ICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3No
YWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQg
IT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgKnZhbHVl
ID0gcmVzdWx0LT52YWx1ZS5jb3VudEZvclR5cGUocG5hbWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuc2V0KHByb2dyYW0sIEFj
dGl2ZVNoYWRlclN5bWJvbENvdW50cygpKTsKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMm
IHN5bWJvbENvdW50cyA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3Jh
bSktPnZhbHVlOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIGFjdGl2ZSBhdHRyaWJ1dGVzLCBidWls
ZCBhIGZpbHRlcmVkIGNvdW50LCBhbmQgYSBtYXBwaW5nIG9mCi0gICAgLy8gb3VyIGludGVybmFs
IGF0dHJpYnV0ZXMgaW5kZXhlcyB0byB0aGUgcmVhbCB1bmZpbHRlcmVkIGluZGV4ZXMgaW5zaWRl
IE9wZW5HTC4KLSAgICBHQ0dMaW50IGF0dHJpYnV0ZUNvdW50ID0gMDsKLSAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEFDVElWRV9BVFRSSUJVVEVTLCAmYXR0cmlidXRlQ291bnQpOwotICAg
IGZvciAoR0NHTGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKLSAgICAgICAg
QWN0aXZlSW5mbyBpbmZvOwotICAgICAgICBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGks
IGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxB
dHRyaWJ1dGVJbmRleE1hcC5hcHBlbmQoaSk7Ci0gICAgfQotICAgIAotICAgIC8vIERvIHRoZSBz
YW1lIGZvciB1bmlmb3Jtcy4KLSAgICBHQ0dMaW50IHVuaWZvcm1Db3VudCA9IDA7Ci0gICAgOjpn
bEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfVU5JRk9STVMsICZ1bmlmb3JtQ291bnQpOwot
ICAgIGZvciAoR0NHTGludCBpID0gMDsgaSA8IHVuaWZvcm1Db3VudDsgKytpKSB7Ci0gICAgICAg
IEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwg
aSwgaW5mbyk7Ci0gICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJl
ZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLmFwcGVuZChpKTsKLSAgICB9Ci0gICAgCi0gICAgKnZh
bHVlID0gc3ltYm9sQ291bnRzLmNvdW50Rm9yVHlwZShwbmFtZSk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcnNbMl0sIEdDR0xzaXplaSBjb3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCi17Ci0gICAg
TE9HKFdlYkdMLCAiT3JpZ2luYWwgU2hhZGVySW5mb0xvZzpcbiVzIiwgbG9nLnV0ZjgoKS5kYXRh
KCkpOwotCi0gICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiByZWdFeHAoIndlYmdsX1sw
MTIzNDU2Nzg5YWJjZGVmQUJDREVGXSsiKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgcHJvY2Vzc2Vk
TG9nOwotICAgIAotICAgIC8vIEFOR0xFIGluc2VydHMgYSAiI2V4dGVuc2lvbiIgbGluZSBpbnRv
IHRoZSBzaGFkZXIgc291cmNlIHRoYXQKLSAgICAvLyBjYXVzZXMgYSB3YXJuaW5nIGluIHNvbWUg
Y29tcGlsZXJzLiBUaGVyZSBpcyBubyBwb2ludCBzaG93aW5nCi0gICAgLy8gdGhpcyB3YXJuaW5n
IHRvIHRoZSB1c2VyIHNpbmNlIHRoZXkgZGlkbid0IHdyaXRlIHRoZSBjb2RlIHRoYXQKLSAgICAv
LyBpcyBjYXVzaW5nIGl0LgotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGFuZ2xlV2FybmluZyB7ICJXQVJOSU5HOiAwOjE6IGV4dGVuc2lvbiAnR0xfQVJCX2dwdV9zaGFk
ZXI1JyBpcyBub3Qgc3VwcG9ydGVkXG4iX3MgfTsKLSAgICBpbnQgc3RhcnRGcm9tID0gbG9nLnN0
YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IGFuZ2xlV2FybmluZy5nZXQoKS5sZW5ndGgoKSA6IDA7
Ci0gICAgaW50IG1hdGNoZWRMZW5ndGggPSAwOwotCi0gICAgZG8gewotICAgICAgICBpbnQgc3Rh
cnQgPSByZWdFeHAubWF0Y2gobG9nLCBzdGFydEZyb20sICZtYXRjaGVkTGVuZ3RoKTsKLSAgICAg
ICAgaWYgKHN0YXJ0ID09IC0xKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcHJvY2Vz
c2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgc3RhcnQgLSBzdGFydEZyb20p
KTsKLSAgICAgICAgc3RhcnRGcm9tID0gc3RhcnQgKyBtYXRjaGVkTGVuZ3RoOwotCi0gICAgICAg
IGNvbnN0IFN0cmluZyYgbWFuZ2xlZFN5bWJvbCA9IGxvZy5zdWJzdHJpbmcoc3RhcnQsIG1hdGNo
ZWRMZW5ndGgpOwotICAgICAgICBjb25zdCBTdHJpbmcmIG1hcHBlZFN5bWJvbCA9IG1hcHBlZFN5
bWJvbE5hbWUoc2hhZGVycywgY291bnQsIG1hbmdsZWRTeW1ib2wpOwotICAgICAgICBMT0coV2Vi
R0wsICJEZW1hbmdsaW5nOiAlcyB0byAlcyIsIG1hbmdsZWRTeW1ib2wudXRmOCgpLmRhdGEoKSwg
bWFwcGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5k
KG1hcHBlZFN5bWJvbCk7Ci0gICAgfSB3aGlsZSAoc3RhcnRGcm9tIDwgc3RhdGljX2Nhc3Q8aW50
Pihsb2cubGVuZ3RoKCkpKTsKLQotICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmlu
ZyhzdGFydEZyb20sIGxvZy5sZW5ndGgoKSAtIHN0YXJ0RnJvbSkpOwotCi0gICAgTE9HKFdlYkdM
LCAiVW5tYW5nbGVkIFNoYWRlckluZm9Mb2c6XG4lcyIsIHByb2Nlc3NlZExvZy50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKTsKLX0K
LQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
R0xpbnQgbGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9f
TE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotICAgIFZlY3RvcjxHTGNoYXI+IGlu
Zm8obGVuZ3RoKTsKLSAgICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAm
c2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgR0NHTHNpemVpIGNvdW50OwotICAgIFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyc1syXTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwg
JmNvdW50LCBzaGFkZXJzKTsKLQotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRl
cnMsIGNvdW50LCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6Omds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAg
ICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlcmkoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQotewotICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotCi0gICAgY29uc3QgYXV0
byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIAotICAgIHN3
aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIERFTEVURV9TVEFUVVM6Ci0gICAgY2FzZSBTSEFERVJf
VFlQRToKLSAgICAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsICZ2YWx1ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgIGlmIChyZXN1
bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRp
Y19jYXN0PGludD4ocmVzdWx0LT52YWx1ZS5pc1ZhbGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJTkZPX0xPR19MRU5HVEg6Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZW5kKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVy
KS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdU
SDoKLSAgICAgICAgdmFsdWUgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5W
QUxJRF9FTlVNKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIGNv
bnN0IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgaWYgKCFl
bnRyeS5pc1ZhbGlkKQotICAgICAgICByZXR1cm4gZW50cnkubG9nOwotCi0gICAgR0xpbnQgbGVu
Z3RoID0gMDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgs
ICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAot
Ci0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7
Ci0gICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRh
dGEoKSk7Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9
OwotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZv
LmRhdGEoKSwgc2l6ZSkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291
cmNlOwotfQotCi1HQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMZmxvYXQg
dmFsdWUgPSAwLmY7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIHZhbHVlOwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCAmdmFs
dWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQot
ewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldFVuaWZv
cm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRVbmlmb3Jt
aXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTHVpbnQ+IHZhbHVlKQotewotICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBl
ZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOwot
ICAgIExPRyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0
dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0
YSgpKTsKLX0KLQotR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x2b2lk
KiBwb2ludGVyID0gMDsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBu
YW1lLCAmcG9pbnRlcik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xzaXplaXB0cj4ocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGludCB4b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4gcGl4ZWxzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmICFVU0UoT1BFTkdMX0VTKQotICAgIGlmICh0eXBlID09IEhBTEZf
RkxPQVRfT0VTKQotICAgICAgICB0eXBlID0gR0xfSEFMRl9GTE9BVF9BUkI7Ci0jZW5kaWYKLQot
ICAgIGlmIChtX3VzaW5nQ29yZVByb2ZpbGUpICB7Ci0gICAgICAgIC8vIFRoZXJlIGFyZSBzb21l
IGZvcm1hdCB2YWx1ZXMgdXNlZCBpbiBXZWJHTCB0aGF0IGFyZSBkZXByZWNhdGVkIHdoZW4gdXNp
bmcgYSBjb3JlIHByb2ZpbGUsIHNvIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gYWRhcHQgdGhlbSwg
YXMgd2UgZG8gaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoKS4KLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBBTFBIQToKLSAgICAgICAgICAgIC8v
IFdlIGFyZSB1c2luZyBHTF9SRUQgdG8gYmFjayBHTF9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3
ZWxsLgotICAgICAgICAgICAgZm9ybWF0ID0gUkVEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdM
X1JHIHRvIGJhY2sgR0xfTFVNSU5BTkNFX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCi0g
ICAgICAgICAgICBmb3JtYXQgPSBSRzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhN
RTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxp
bmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUu
Ci0gICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDb21wcmVzc2VkVGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBpbWFnZVNpemUsIGRhdGEuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29tcHJlc3NlZFRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLVBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQg
byA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIo
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsK
LSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2xDcmVhdGVTaGFk
ZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZF
UlRFWF9TSEFERVIpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlblRleHR1cmVz
KDEsICZvKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwotICAgIHJldHVy
biBvOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBt
X3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91
bmREcmF3RkJPKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90
IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRl
ciBpdCBnZXRzIGRlbGV0ZWQuCi0gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwg
MCk7Ci0gICAgfQotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92
ZShwcm9ncmFtKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZl
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1
dG8mIGtleVZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0
ZXh0dXJlOwotICAgIH0pOwotICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4dHVyZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9y
KQotewotICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRo
ZXRpYyBlcnJvciBsaXN0IHRvCi0gICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywg
c28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKLSAgICAvLyBhbnkgZXJyb3JzIGZyb20g
Z2xFcnJvciBiZWZvcmUgdGhlIGVycm9yIHdlIGFyZSBzeW50aGVzaXppbmcuCi0gICAgbW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVy
cm9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9z
dCgpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkK
LSAgICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlY3ljbGVDb250ZXh0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRv
VmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBt
b2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQp
Ci17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVt
IG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQs
IEdDR0xzaXplaSBwcmltY291bnQpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50
c0luc3RhbmNlZEFOR0xFKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7Ci0g
ICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKLXsK
LSAgICBnZXRFeHRlbnNpb25zKCkudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZp
c29yKTsKLX0KLQotI2lmIEhBVkUoT1BFTkdMXzQpICYmIEVOQUJMRShXRUJHTDIpCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQgaW5k
ZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFByaW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNv
bnN0IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1
aW50IGxlbmd0aCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzYWdlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Jj
T2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
ZHN0Qnl0ZU9mZnNldCwgY29uc3Qgdm9pZCogc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBH
Q0dMdWludCBsZW5ndGgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGRzdEJ5dGVPZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShzcmNEYXRhKTsKLSAgICBV
TlVTRURfUEFSQU0oc3JjT2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLX0KLQot
I2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dM
ZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRl
T2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKLX0KLSNl
bHNlCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dM
ZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIsIEdDR0xpbnRwdHIsIEdDR0xzaXplaXB0cikKLXsK
LX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJE
YXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lk
PiBkYXRhKQotewotI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdDR0x2b2lk
KiBwdHIgPSA6OmdsTWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwg
R3JhcGhpY3NDb250ZXh0R0w6Ok1BUF9SRUFEX0JJVCk7Ci0gICAgaWYgKCFwdHIpCi0gICAgICAg
IHJldHVybjsKLSAgICBtZW1jcHkoZGF0YS5kYXRhLCBwdHIsIGRhdGEuYnVmU2l6ZSk7Ci0gICAg
aWYgKCE6OmdsVW5tYXBCdWZmZXIodGFyZ2V0KSkKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRhdGEpOwotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTik7Ci0jZW5kaWYKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc3JjWDApOwotICAgIFVOVVNFRF9QQVJBTShzcmNZ
MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gxKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTEpOwot
ICAgIFVOVVNFRF9QQVJBTShkc3RYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFkwKTsKLSAgICBV
TlVTRURfUEFSQU0oZHN0WDEpOwotICAgIFVOVVNFRF9QQVJBTShkc3RZMSk7Ci0gICAgVU5VU0VE
X1BBUkFNKG1hc2spOwotICAgIFVOVVNFRF9QQVJBTShmaWx0ZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCBsYXllcikKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAg
ICBVTlVTRURfUEFSQU0oYXR0YWNobWVudCk7Ci0gICAgVU5VU0VEX1BBUkFNKHRleHR1cmUpOwot
ICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxheWVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQotewotICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZl
cihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
LXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVu
dHMpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNyYyk7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5H
TF9FU18zKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKLXsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRJ
bnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBkYXRhLmJ1ZlNp
emUsIGRhdGEuZGF0YSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVO
VVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAg
ICBVTlVTRURfUEFSQU0oYnVmU2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0
b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotI2Vsc2UKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0sIEdDR0xlbnVtLCBH
Q0dMZW51bSwgR0NHTFNwYW48R0NHTGludD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKLXsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpv
ZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxl
dmVsKTsKLSAgICBVTlVTRURfUEFSQU0oeG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHlvZmZz
ZXQpOwotICAgIFVOVVNFRF9QQVJBTSh6b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGhlaWdodCk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShu
YW1lKTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwKQotewotICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWlu
dCB2MCwgR0NHTHVpbnQgdjEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0odjApOwotICAgIFVOVVNFRF9QQVJBTSh2MSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQg
djAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHYxKTsKLSAgICBV
TlVTRURfUEFSQU0odjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIsIEdDR0x1aW50IHYzKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFSQU0odjEpOwotICAgIFVOVVNFRF9QQVJB
TSh2Mik7Ci0gICAgVU5VU0VEX1BBUkFNKHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NH
THVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURf
UEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewot
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
bG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9j
YXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShk
YXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4
MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
dHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwot
ICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJB
TShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWlu
dCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQotewot
ICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNF
RF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0oeik7Ci0gICAgVU5VU0VEX1BBUkFNKHcpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1
aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50LCA0PiB2YWx1ZXMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwg
R0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKLXsKLSAgICBV
TlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFS
QU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHopOwotICAgIFVOVVNFRF9QQVJBTSh3KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgs
IEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0
ciBvZmZzZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0o
c2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShzdHJpZGUp
OwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwg
R0NHTHVpbnQgZW5kLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
cnQpOwotICAgIFVOVVNFRF9QQVJBTShlbmQpOwotICAgIFVOVVNFRF9QQVJBTShjb3VudCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBH
Q0dMZW51bT4gYnVmcykKLXsKLSAgICBVTlVTRURfUEFSQU0oYnVmcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dM
aW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHZhbHVlcykKLXsKLSAgICBV
TlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAg
VU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIp
OwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFN
KGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGlu
dCBkcmF3YnVmZmVyLCBHQ0dMZmxvYXQgZGVwdGgsIEdDR0xpbnQgc3RlbmNpbCkKLXsKLSAgICBV
TlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAg
VU5VU0VEX1BBUkFNKGRlcHRoKTsKLSAgICBVTlVTRURfUEFSQU0oc3RlbmNpbCk7Ci19Ci0KLVBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkp
OwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0
Zm9ybUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVl
cnkoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsK
LSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRR
dWVyeU9iamVjdHVpKFBsYXRmb3JtR0xPYmplY3QgcXVlcnksIEdDR0xlbnVtIHBuYW1lKQotewot
ICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlU2FtcGxlcigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewot
ICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kU2FtcGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVuaXQpOwotICAgIFVOVVNF
RF9QQVJBTShzYW1wbGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Ft
cGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCBwYXJhbSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW0pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgcGFyYW0pCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHBhcmFtKTsKLX0KLQotR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1w
bGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQot
ewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwot
ICAgIHJldHVybiAwLmY7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5h
bWUpCi0KLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHBu
YW1lKTsKLSAgICByZXR1cm4gMDsKLX0KLQotR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZlbmNlU3luYyhHQ0dMZW51bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKLXsK
LSAgICBVTlVTRURfUEFSQU0oY29uZGl0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1N5bmMoR0NHTHN5bmMgc3luYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMoR0NHTHN5bmMgc3luYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci19Ci0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGllbnRXYWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0x1aW50NjQgdGltZW91dCkKLXsKLSAgICBVTlVT
RURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKLSAgICBVTlVTRURfUEFS
QU0odGltZW91dCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dM
aW50NjQgdGltZW91dCkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BB
UkFNKGZsYWdzKTsKLSAgICBVTlVTRURfUEFSQU0odGltZW91dCk7Ci19Ci0KLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBu
YW1lKQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUp
OwotICAgIHJldHVybiAwOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBs
YXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGlkKTsKLX0KLQotR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZv
cm1HTE9iamVjdCBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVl
ZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpZCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0
aXZlTW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJpbWl0aXZlTW9kZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKLXsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywg
R0NHTGVudW0gYnVmZmVyTW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHZhcnlpbmdzKTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyTW9kZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZv
JikKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVk
YmFjaygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5z
Zm9ybUZlZWRiYWNrKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVp
bnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NH
THNpemVpcHRyIHNpemUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci19Ci0KLVZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHVuaWZvcm1OYW1lcykKLXsKLSAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1OYW1lcyk7
Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8R0NHTGludD4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lKQotewot
ICAgIFZlY3RvcjxHQ0dMaW50PiByZXN1bHQodW5pZm9ybUluZGljZXMuc2l6ZSgpLCAwKTsKLSNp
ZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQotICAgIEFTU0VSVChwcm9ncmFt
KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMu
c2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCByZXN1bHQuZGF0YSgpKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1HQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBy
b2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tOYW1lKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3Jt
QmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2Nr
SW5kZXgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1
bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrQmluZGluZykKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2Nr
QmluZGluZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxz
KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFS
QU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIFVOVVNFRF9QQVJBTShm
b3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBwYXJhbXMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0g
LCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhT
dWJJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSwg
R0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
bXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikK
LXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51
bSwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NH
TGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQs
IEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwg
R0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVu
dW0sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWks
IEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48
Y29uc3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsK
LSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkK
LXsKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVS
QVRJT04pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVt
ZW50c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xzaXplaSkKLXsKLSAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdD
R0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29u
c3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsKLSAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04p
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VT
YWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCB1bnBhY2tBbGlnbm1lbnQpCi17
Ci0gICAgQVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAy
IHx8IHVucGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKLSAgICBV
bmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOwotICAgIHVuc2lnbmVkIHNpemUgPSAwOwot
ICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgewotICAgICAgICBQaXhlbFN0b3JlUGFy
YW1zIHBhcmFtczsKLSAgICAgICAgcGFyYW1zLmFsaWdubWVudCA9IHVucGFja0FsaWdubWVudDsK
LSAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQs
IHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsIHBhcmFtcywgJnNpemUsIG51bGxwdHIsIG51bGxwdHIp
OwotICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgemVybyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25l
ZCBjaGFyPihzaXplKTsKLSAgICAgICAgaWYgKCF6ZXJvKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAs
IHNpemUpOwotICAgIH0KLSAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHpl
cm8uZ2V0KCksIHNpemUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcAppbmRleCBlNjZlMDBhZGIyODc1YWRmNjlhMTk3ZmNjNjky
MzE2ZGE2Zjk2ZTZlLi4yZjc3NDUyYTEzNjQyODgyM2Y2OTliYzI0MTM5YTVkMTgyZDZjMmEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcApAQCAt
MjgsOSArMjgsMTMgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKIAorI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCisjZWxzZQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgiCisjZW5kaWYKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJl
ZE1hbmFnZXIoKQpAQCAtNTYsNyArNjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlcjo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6YWRk
Q29udGV4dChHcmFwaGljc0NvbnRleHRHTFR5cGUqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwogICAgIGlmICghY29udGV4dCkKQEAgLTY2LDcgKzcwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQKICAgICBtX2NvbnRleHRzLmFwcGVuZChjb250ZXh0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
cjo6cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTFR5cGUqIGNvbnRleHQpCiB7CiAgICAg
aWYgKCFtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKQogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKaW5kZXggMGVmODZkYzZk
ZTdmMjFkNWU4ZTkxMjBlOWEzMmIwYThiMWYxZjczMS4uZmI1YzI4Yzk4ZDE4ZDg5OTUzOGQ3OTZl
YmMyMTg4YTdmNGM1OTQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TE1hbmFnZXIuaApAQCAtMzYsMTUgKzM2LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29u
c3QgdW5zaWduZWQgTWF4Q29udGV4dHMgPSAxNjsKIAorI2lmIFVTRShBTkdMRSkKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxzZQogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w7CisjZW5kaWYKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKICAg
ICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsK
IHB1YmxpYzoKKyNpZiBVU0UoQU5HTEUpCisgICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUeXBl
ID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCisgICAgdXNpbmcgR3JhcGhpY3NDb250
ZXh0R0xUeXBlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYKKwogICAgIHN0YXRp
YyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXImIHNoYXJlZE1hbmFnZXIoKTsKICAgICAK
LSAgICB2b2lkIGFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKLSAgICB2b2lk
IHJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lkIGFkZENv
bnRleHQoR3JhcGhpY3NDb250ZXh0R0xUeXBlKik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KEdy
YXBoaWNzQ29udGV4dEdMVHlwZSopOwogICAgIAogICAgIHZvaWQgcmVjeWNsZUNvbnRleHRJZk5l
Y2Vzc2FyeSgpOwogICAgIGJvb2wgaGFzVG9vTWFueUNvbnRleHRzKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0cy5zaXplKCkgPj0gTWF4Q29udGV4dHM7IH0KQEAgLTU5LDcgKzY5LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIoKSA9IGRl
ZmF1bHQ7CiAKLSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqPiBtX2NvbnRleHRz
OworICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRHTFR5cGUqPiBtX2NvbnRleHRzOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAppbmRl
eCAwNTc1NDQ0OGI5MDNlMTQ5OTNlZDMxYjBjYmQ2MWU4Njk0YTllZTk5Li45MmU3NjFhY2UzZDkx
Yjc5ODA5NDY0YTk0MTEyZjA4ODBlMGJkNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtODcsMTIgKzg3LDEwIEBAIFJlZlB0cjxHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
cjo6Y3JlYXRlKEdyCiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6On5HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIoKSA9IGRlZmF1bHQ7CiAKIEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyQmFzZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCi0vLyBGSVhNRTogQmVsb3cgZnVu
Y3Rpb25hbGl0eSBzaG91bGQgYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgotCiBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
R0w+IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZWQgPSBmYWxzZTsKQEAgLTEyNSwzMTQgKzEyMyw3IEBAIFJlZlB0cjxHcmFwaGljc0NvbnRleHRH
TD4gY3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4
CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQot
ewotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0ZXMud2Vi
R0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7Ci0jZW5k
aWYKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBMYXllciA9
IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7Ci0jZW5k
aWYKLSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0g
ICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hh
bmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJl
bmRlciBpbnRvLgotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1l
dGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0g
ICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
Z2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOwotCi0gICAgLy8gQ3JlYXRlIGFuIEZC
Ty4KLSAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0g
ICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fY29tcG9zaXRvclRleHR1cmUpOwot
ICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKLQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0
dXJlKTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdl
dCwgMCk7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KLSAgICBB
U1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAg
IGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmREcmF3
RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICBn
bDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAg
ICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KLSAgICAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9mYm87Ci0gICAgICAg
IGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAg
IGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQot
Ci0gICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0jZWxzZQotR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcykK
LXsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTExheWVyPigqdGhpcyk7Ci0jZWxzZQotICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtl
VW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOwotI2VuZGlmCi0K
LSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAg
YXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdl
ZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVy
IGludG8uCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6
OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gRkJPLgot
ICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOwotCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUp
OwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1
cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIEFTU0VS
VChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYg
KGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8g
PSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIDo6Z2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBp
ZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICA6
OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9
IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgotICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0KLSNpZiAhVVNFKE9QRU5H
TF9FUykKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwotCi0g
ICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7Ci0gICAgICAg
IG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMu
MiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBvdXB1
dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgotICAgICAgICAvLyBPcGVuR0wgdmVyc2lvbiAzLjIg
dXNlcyBHTFNMIHZlcnNpb24gMS41MC4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0
QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKLQotICAgICAgICAvLyBGcm9tIHZlcnNp
b24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQgYSBW
QU8gZm9yIHJlbmRlcmluZy4KLSAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRlZCBhbmQg
Ym91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJlTWFwcGVy
LCBXZWJHTCwgZXRjKS4gVGhpcyBpcwotICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRpb246IHRo
ZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdp
bGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCi0gICAgICAgIEdDR0xp
bnQgY3VycmVudFZBTyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlZFUlRF
WF9BUlJBWV9CSU5ESU5HKTsKLSAgICAgICAgaWYgKCFjdXJyZW50VkFPKSB7Ci0gICAgICAgICAg
ICBtX3ZhbyA9IGNyZWF0ZVZlcnRleEFycmF5KCk7Ci0gICAgICAgICAgICBiaW5kVmVydGV4QXJy
YXkobV92YW8pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRm9yIGxvd2Vy
IHZlcnNpb25zIHJlcXVlc3QgdGhlIGNvbXBhdGliaWxpdHkgb3V0cHV0IHRvIHRoZSBzaGFkZXIg
Y29tcGlsZXIuCi0gICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNM
X0NPTVBBVElCSUxJVFlfT1VUUFVUKTsKLQotICAgICAgICAvLyBHTF9QT0lOVF9TUFJJVEUgaXMg
bmVlZGVkIGluIGxvd2VyIHZlcnNpb25zLgotICAgICAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQ
UklURSk7Ci0gICAgfQotI2Vsc2UKLSAgICAvLyBBZGp1c3QgdGhlIHNoYWRlciBzcGVjaWZpY2F0
aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIEdMRVMzIChpLmUuIFdlYkdMMiBzdXBwb3J0KSB3YXMg
cmVxdWVzdGVkLgotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9jb21waWxlciA9IEFOR0xFV2Vi
S2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCAoYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3Jh
cGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMikgPyBTSF9XRUJHTDJfU1BFQyA6IFNI
X1dFQkdMX1NQRUMpOwotI2Vsc2UKLSAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2Uo
U0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMX1NQRUMpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIC8v
IEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291
cmNlczsKLSAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLQot
ICAgIEFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX0FUVFJJQlMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1h
eFZhcnlpbmdWZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFY
X1ZBUllJTkdfVkVDVE9SUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMpOwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVu
R0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0gICAgR0NH
TGludCByYW5nZVsyXSB7IH07Ci0gICAgR0NHTGludCBwcmVjaXNpb24gPSAwOwotICAgIGdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01FTlRfU0hB
REVSLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNp
b24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVsw
XSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwotCi0gICAgbV9jb21waWxlci5zZXRSZXNvdXJj
ZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19
Ci0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0woKQotewotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKLSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmICht
X2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29t
cG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0
QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAg
IGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwot
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAg
ICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7Ci0gICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVGQk8pOwotICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpIHsKLSNpZiAhVVNFKEFOR0xFKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgICAgICBp
ZiAobV9kZXB0aEJ1ZmZlcikKLSAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
bV9kZXB0aEJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKG1fc3RlbmNpbEJ1ZmZlcikKLSAgICAgICAg
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgot
ICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbDo6RGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLSAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsK
LSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotICAgIGlmIChtX3ZhbykKLSAgICAgICAgZGVsZXRl
VmVydGV4QXJyYXkobV92YW8pOwotI2VuZGlmCi19Ci0jZWxzZQotR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAg
ICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxl
dGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxldGVUZXh0dXJl
cygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0cmlidXRl
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMp
IHsKLSAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkgewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmICht
X2RlcHRoQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoQnVmZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIDo6Z2xEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotI2Vu
ZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxldGVWZXJ0
ZXhBcnJheShtX3Zhbyk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0jaWYgVVNF
KE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3Rh
dHVzKCkKLXsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBs
aWFudCgpIGNvbnN0Ci17Ci0jaWYgVVNFKEFOR0xFKQotICAgIHJldHVybiBtX2lzRm9yV2ViR0wy
OwotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAjaWYgVVNFKE5J
Q09TSUEpCiAgICAgcmV0dXJuICZtX25pY29zaWFMYXllci0+Y29udGVudExheWVyKCk7CkBAIC00
NDEsMzggKzEzMiw4IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiAh
VVNFKEFOR0xFKQotRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpIHsKLSNpZiBV
U0UoT1BFTkdMX0VTKQotICAgICAgICAvLyBnbEdldFN0cmluZ2kgaXMgbm90IGF2YWlsYWJsZSBv
biBHTEVTMi4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xP
cGVuR0xFUz4odGhpcywgIGZhbHNlKTsKLSNlbHNlCi0gICAgICAgIC8vIEZyb20gT3BlbkdMIDMu
MiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJlIHdlIG11c3QgdXNlIGdsR2V0
U3RyaW5naS4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xP
cGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKTsKLSNl
bmRpZgotICAgIH0KLSAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKLX0KLSNlbmRpZgotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGlu
ZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50ID09IFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVyZSkKLSAgICAgICAgbV9mYWls
TmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZUZvckRpc3BsYXkoKQotewotfQotCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBs
ZSgpCiB7CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpZiAoYXV0byBwaXhlbEJ1ZmZlciA9IHJl
YWRDb21wb3NpdGVkUmVzdWx0cygpKQpAQCAtNDgyLDExICsxNDMsNiBAQCBSZWZQdHI8TWVkaWFT
YW1wbGU+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9N
ZWRpYVNhbXBsZQogfQogI2VuZGlmCiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQotewotICAgIHJldHVy
biByZWFkUmVuZGVyaW5nUmVzdWx0cygpOwotfQotCiAjaWYgRU5BQkxFKFZJREVPKQogYm9vbCBH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlh
UGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0NHTGVudW0g
b3V0cHV0VGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpCiB7CkBAIC00OTQsNiArMTUwLDExIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyOjpjb3B5VGV4dHVyZUZyb21NZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBQCiB9
CiAjZW5kaWYKIAorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCit7CisgICAgcmV0dXJuIHJlYWRSZW5kZXJp
bmdSZXN1bHRzKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlci5oCmluZGV4IGU0NjYyYjY4M2VhNDViNmYxOTY2YjMxOTcz
MzkzMzAzYWFmODYwOTUuLmQxYWMwZWI3YzBhZGEyZmY4OGYxNzlkYjljZDRlYzBhMDVlNzZjYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgKQEAgLTI3
LDE4ICsyNywzNCBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCisjaWYgVVNFKEFOR0xFKQorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKKyNlbHNlCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciA6IHB1Ymxp
YyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7CisjaWYgVVNFKEFOR0xFKQordXNpbmcgR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSA9IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7Cisj
ZWxzZQordXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSA9IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOworI2VuZGlmCisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXJCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlcj4gY3JlYXRlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyYmKTsKICAgICB+R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKCk7CiAKKyAgICAvLyBH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJCYXNlIG92ZXJyaWRlcy4KKyAgICBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CiAjaWYgRU5BQkxFKFZJREVPKQog
ICAgIGJvb2wgY29weVRleHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5ZXImLCBQbGF0Zm9ybUdMT2Jq
ZWN0IHRleHR1cmUsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGZsaXBZKSBmaW5hbDsKICNlbmRpZgorI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9N
ZWRpYVNhbXBsZSgpIGZpbmFsOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
JiYpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyQU5HTEUuY3BwCmluZGV4IDA4NTM5YTdkOTI5ODExNDVkYzA2MDAxYjU3NGNhOGM5YTcxZjg5
NTUuLjE0Nzg3YjViNzA4Y2U3OTI1OTAzZGE1YjdiY2EzOTZmOGYyM2U2NWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRH
TFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcApAQCAt
MzEsNiArMzEsOCBAQAogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCiAjaW5jbHVkZSAiQU5H
TEVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIgogCiAjaWYgVVNFKE5JQ09TSUEpCiAj
aW5jbHVkZSAiTmljb3NpYUdDR0xBTkdMRUxheWVyLmgiCkBAIC00MCw3ICs0MiwxMDUgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKK0dyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVz
KQoreworI2lmIEVOQUJMRShXRUJHTDIpCisgICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0ZXMu
d2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7Cisj
ZW5kaWYKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8
Tmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsKKyNlbHNlCisgICAgbV90ZXhtYXBMYXll
ciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7Cisj
ZW5kaWYKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7
CisgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUg
Y2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KKworICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0g
ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKKyAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRv
IHJlbmRlciBpbnRvLgorICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICBn
bDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFy
YW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdM
X1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVy
aSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOworCisgICAgLy8gQ3JlYXRlIGFu
IEZCTy4KKyAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgZ2w6OkJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7
CisgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fY29tcG9zaXRvclRleHR1cmUp
OworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBH
TF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmko
dGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9D
TEFNUF9UT19FREdFKTsKKworICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9pbnRlcm1lZGlh
dGVUZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVy
ZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19F
REdFKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dS
QVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRh
cmdldCwgMCk7CisjZW5kaWYKKworICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAg
ICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwor
ICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICBnbDo6R2VuRnJhbWVidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRE
cmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgICAg
ICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAg
ICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KKyAgICAg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBt
X3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9mYm87CisgICAg
ICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAg
ICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAg
fQorCisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cit9CisKK0dyYXBoaWNzQ29udGV4
dEdMQU5HTEU6On5HcmFwaGljc0NvbnRleHRHTEFOR0xFKCkKK3sKKyAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwor
ICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVT
RUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgZ2w6OkRl
bGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgZ2w6OkRlbGV0ZVRleHR1
cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgYXV0byBhdHRyaWJ1
dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlh
cykgeworICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVz
LmRlcHRoKQorICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZl
cikKKyAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgfQorICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEs
ICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworI2VuZGlmCit9CisKK1BsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtRGlzcGxheSgp
IGNvbnN0CiB7CiAjaWYgVVNFKE5JQ09TSUEpCiAgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5w
bGF0Zm9ybURpc3BsYXkoKTsKQEAgLTQ5LDcgKzE0OSw3IEBAIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBj
b25zCiAjZW5kaWYKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1Db25maWcoKSBjb25zdAorUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTENvbmZpZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybUNvbmZpZygp
IGNvbnN0CiB7CiAjaWYgVVNFKE5JQ09TSUEpCiAgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5w
bGF0Zm9ybUNvbmZpZygpOwpAQCAtNTgsNyArMTU4LDI4IEBAIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xDb25maWcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtQ29uZmlnKCkgY29u
c3QKICNlbmRpZgogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlz
cGxheUJ1ZmZlckJhY2tpbmcoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25pY29zaWFM
YXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjZWxzZQorICAgIHJldHVybiBtX3RleG1hcExh
eWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNoZWNrR1BVU3RhdHVzKCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQoreworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnByZXBhcmVGb3JEaXNwbGF5KCkKK3sKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogewogICAg
IGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogICAgIGNvbnN0IGF1dG8gc2l6ZSA9
IGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7CkBAIC04Miw3ICsyMDMsNyBAQCBib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9y
bVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpw
bGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwCmluZGV4IGY0NGM3YTA5MzRhYTBiMmUz
MjRhYjM4MzhiODg4ZGJkMTA3YjBhYzcuLjE3ZjI5NDQ2MmMxMTcxNWMzYWNjOGJiYzZiYWZlYjY4
NDQ3OWY1NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5
ZXIuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dHVy
ZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIo
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCitUZXh0dXJlTWFwcGVyR0NHTFBsYXRm
b3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRH
TEFOR0xFJiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7CiAgICAgYXV0byBz
aGFyaW5nQ29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0
aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuaAppbmRleCBjNzRlNzU1NDIxZTBjMTRk
NjcxN2JkZjliMDYzYTQ3ZDg4NjRmMmNkLi5lM2VlZDZiYjllMzY2NjI2OTM3MzVjMmNjZDEwY2Ux
YjdlNmQ2ZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXll
ci5oCkBAIC0yMSw3ICsyMSw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShURVhUVVJF
X01BUFBFUikgJiYgIVVTRShOSUNPU0lBKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCkBA
IC0zNCw3ICszNCw3IEBAIGNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk7CiBj
bGFzcyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIgOiBwdWJsaWMgUGxhdGZvcm1MYXll
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7CisgICAgVGV4
dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUmKTsKICAg
ICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoKTsKIAogICAgIGJvb2wg
bWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRleHQ7CisgICAg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRSYgbV9jb250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxB
TkdMRUNvbnRleHQ+IG1fZ2xDb250ZXh0OwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCmluZGV4IDEyMTUwYjFkNTBlNWJj
ODkzNzRlYWE4MTFlMjMyYjNjYzUwZjMxNTEuLjNiNGI3NTgwMjdmNjk2NGUwMDllYjJlNTcyMGQ0
YTNjMWJjY2VkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKQEAgLTQ4
LDcgKzQ4LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0
SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNp
Z25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJ
bnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMR0w6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQ
aXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmICghaW1hZ2VQaXhlbHMgfHwg
aW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBjYW52YXNTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3Jl
VGhyZWFkLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFk
Lm1tCmluZGV4IDk1NDRiNTFjMjc4ZGY1NjllYTRhYjBiZmVmN2VmNzQ0YWM1MmM3MzUuLjZkNzcw
N2Q0MGMzMmYyODQyOWMzZDMyNDUxNWE1Y2M2OTc3NjFiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KQEAgLTMwLDcgKzMwLDcgQEAK
IAogI2ltcG9ydCAiQ29tbW9uVk0uaCIKICNpbXBvcnQgIkZsb2F0aW5nUG9pbnRFbnZpcm9ubWVu
dC5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlJ1bnRp
bWVBcHBsaWNhdGlvbkNoZWNrcy5oIgogI2ltcG9ydCAiVGhyZWFkR2xvYmFsRGF0YS5oIgpAQCAt
NzcsMTMgKzc3LDEzIEBAIHZvaWQgUmVsZWFzZVdlYlRocmVhZEdsb2JhbFN0YXRlKCkKICAgICAv
LyBJbiBzaW5nbGUtdGhyZWFkZWQgZW52aXJvbm1lbnRzIHdlIGRvIG5vdCBuZWVkIHRvIHVuc2V0
IHRoZSBjb250ZXh0LCBhcyB0aGVyZSBzaG91bGQgbm90IGJlIGFjY2VzcyBmcm9tCiAgICAgLy8g
bXVsdGlwbGUgdGhyZWFkcy4KICAgICBBU1NFUlQoV2ViVGhyZWFkSXNFbmFibGVkKCkpOwotICAg
IHVzaW5nIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOworICAgIHVzaW5n
IFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I7CiAgICAgLy8gRm9yIHdlYiB0
aHJlYWQsIGp1c3QgcmVsZWFzZSB0aGUgY29udGV4dCBhcyB3ZSBrbm93IHdlIHdpbGwgc2VlIGNh
bGxzIHRvIGl0IGFnYWluLgogICAgIC8vIEZvciBub24td2ViIHRocmVhZHMsIGUuZy4gdGhpcmQt
cGFydHkgY2xpZW50IHRocmVhZHMsIHdlIGRvbid0IGtub3cgaWYgd2UgZXZlciBzZWUgYW5vdGhl
ciBjYWxsIGZyb20gdGhlCiAgICAgLy8gdGhyZWFkLCBzbyB3ZSBhbHNvIHJlbGVhc2UgdGhlIHRo
cmVhZCByZXNvdXJjZXMuCiAgICAgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgcmVsZWFz
ZUJlaGF2aW9yID0KICAgICAgICAgV2ViVGhyZWFkSXNDdXJyZW50KCkgPyBSZWxlYXNlVGhyZWFk
UmVzb3VyY2VCZWhhdmlvcjo6UmVsZWFzZUN1cnJlbnRDb250ZXh0IDogUmVsZWFzZVRocmVhZFJl
c291cmNlQmVoYXZpb3I6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZXM7Ci0gICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMocmVsZWFzZUJlaGF2
aW9yKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFk
UmVzb3VyY2VzKHJlbGVhc2VCZWhhdmlvcik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wu
Y3BwCmluZGV4IGFjOTU5NTIwYTJlM2RmYWQ5ZmNkODJiMzkyZjEwYTlhNWE2MDQ4NDAuLjg0YjJl
Njg0NWQwNzQ5Y2RhYTFlNzhiODUzMGQ4ZjhlYTVhMGUwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmNwcApAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OnBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yCiAgICAg
ICAgICAgICAvLyBIZXJlIHdlIGRvIG5vdCB0cnkgdG8gcGxheSBiYWNrIHBlbmRpbmcgY29tbWFu
ZHMgZm9yIGltYWdlQnVmZmVyLiBDdXJyZW50bHkgdGhpcyBjYWxsIGlzIG9ubHkgbWFkZSBmb3Ig
ZW1wdHkKICAgICAgICAgICAgIC8vIGltYWdlIGJ1ZmZlcnMgYW5kIHRoZXJlJ3Mgbm8gZ29vZCB3
YXkgdG8gYWRkIGRpc3BsYXkgbGlzdHMuCiAgICAgICAgICAgICBpZiAocGl4ZWxCdWZmZXIpCi0g
ICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29u
dGV4dEF0dHJpYnV0ZXMsIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXItPmJhY2tl
bmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBXVEZNb3ZlKCpw
aXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpLmNsZWFyUmVjdCh7IEludFBvaW50KCksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6
ZSgpIH0pOwogICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSAiZmx1c2giIGltcGxlbWVudGF0
aW9uIGluIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgb3ZlcmxvYWRzIG9yZGVyaW5nIGFuZCBlZmZl
Y3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3Bl
ZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcApp
bmRleCA1YTZjZTY1ZTc0NDdkMjRlMWU3NzM2MGYyZDhjZmU2NGVhODhiMzJhLi4wZGE3Yjk1ZDE0
ZTlhZGZjZGQzNjY5Mzk5MzNkODAwZjAwYmY4ZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xS
ZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCIKICNpbmNsdWRlICJTdHJlYW1Db25uZWN0aW9u
V29ya1F1ZXVlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oPgogI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KIApAQCAtNTYsNyArNTYsNyBAQCB2
b2lkIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6ZnJlZVdlYkdMUmVuZGVy
aW5nUmVzb3VyY2VzKCkKICAgICBpZiAoc19yZXF1ZXN0cykKICAgICAgICAgcmV0dXJuOwogICAg
IHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW10gewot
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFzZVRocmVhZFJl
c291cmNlcyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UmVsZWFzZVRocmVhZFJl
c291cmNlQmVoYXZpb3I6OlRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMpOworICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OlJlbGVhc2VUaHJlYWRSZXNvdXJj
ZUJlaGF2aW9yOjpUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTsKICAgICB9KTsK
IH0KIAo=
</data>
<flag name="commit-queue"
          id="470556"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445395</attachid>
            <date>2021-11-30 01:33:31 -0800</date>
            <delta_ts>2021-11-30 02:50:38 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233522-20211130113328.patch</filename>
            <type>text/plain</type>
            <size>577628</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5iZjg5NTYxODJiZmMyMjEzZTU0YmFjMzMwNDk0NWUzYjZi
MjI0ZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEzMTMsNiArMTMxMyw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMU3RhdGUu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJGYWN0b3J5LmgKQEAgLTE0MDUsNiArMTQwNiw3IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0FOR0xF
SGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGlsaXRpZXMuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4MDExODYuLjE1
ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N2
L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggN2I2ZDU2MTQ2
OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVjMmQ1MzE4YWIz
OTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEzNiw2IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNv
L0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09WVFRD
dWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5h
Z2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTkyOTQ5ODk1MjBj
MjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxp
dGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKLXBsYXRmb3Jt
L2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVyLm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGQ5
ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJlZTAyNmE2YTlk
MTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBACiAJCTdBRjlC
MjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpT
VlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJl
Z2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlEMjU0OTcyMDEw
MEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhDMUFDIC8qIEdy
YXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29j
b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAz
MzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYwOTRERDI3MEM0
NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0
aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFj
ZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNl
U3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQ
VVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1
ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIzMDA4QUMwMjMg
LyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZF
OTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVEMjc1NEZGN0Mw
MDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYwQ0UgLyogR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0NoZWNrc01hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCNjgwQjgy
NUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAyMTAwMzg2NTlF
IC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBHcmFwaGljc0Nv
bnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVG
IC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRU
UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBBMThDRkI1RjMw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8qIEdyYXBoaWNz
Q29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEwMzM5QzI1NDk3
MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFw
aGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlEMjU0OTcyMDEw
MEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNz
Q29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IxNjE5MTAyNzE5
ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4MEM3MCAvKiBH
cmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1Nyw4IEBACiAJ
CTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhDIC8qIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdC
OTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBH
cmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEltYWdl
RXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0QTQ3MjUzNzc2
QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJCTZFMjdGMjQz
MjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJCQkJNkUyN0Yy
NDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJCQkJNkUyN0Yy
NDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwICovLAorCQkJ
CTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8s
CiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0dGluZy5j
cHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0
dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8sCiAJCQkJ
N0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2
ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5
IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyog
R3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBAQAogCQkJCTdC
OEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJCTdCOEVENUVG
MjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEwMzM5RDI1NDk3
MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdCMTAzMzlBMjU0
OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICovLAotCQkJCTdC
MTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCAqLywK
KwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
LmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8qIEltYWdlUm90
YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdGRjkgLyogSW1h
Z2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQg
LyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0MjYyLDE2IEBA
CiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3JhcGhpY3NDb250
ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3MDIzQTk2OTcz
MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCOTVD
RkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIxMDAzODY1OUUg
LyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IxMDMzOUUy
NTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFkZXJzICovLAot
CQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGlj
c0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4MjUzNzc2Q0Ew
MDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8qIEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0
MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0Eu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5MTVmYTVmNzRk
YzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2MzQ1NTlmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0
cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwg
Y29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wg
ZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCBzb3VyY2VJ
bWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxp
Z25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNh
bnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGludCBtX2N1cnJl
bnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xT
dGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNiNGQ3ZTljZWUx
ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50
ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJh
aXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNzQ29udGV4dEdM
U3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBHQ0dMdWludCBi
b3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4dHVyZU1hcCA9
IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwgR0NHTGVudW0+
LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJhaXRzPFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5kVGV4dHVyZU1h
cCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0KKyAgICBHQ0dM
dWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOwor
ICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gYm91
bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91bmRUYXJnZXQo
R0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9y
ID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0
b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
LT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQgc2V0
Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0dXJlLCBHQ0dM
ZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0KHRleHR1cmVV
bml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisKKyAgICB1c2lu
ZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIEludEhhc2g8R0NH
THVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Cisg
ICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVu
c2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYwZmI1ZWUxYWMz
OTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2NDBmZDRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNp
b25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNpbmNsdWRlICJF
eHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dMQU5HTEU6OkV4
dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0KQorRXh0ZW5z
aW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIGNv
bnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKICAg
ICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5kZXggMGE2MWVm
YzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRiOWY2MTVjM2Iz
YTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0zMiwxMyArMzIs
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4dGVuc2lvbnNH
TEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRp
YXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMuCi0gICAgZXhw
bGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICAv
LyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVuc2lvbnNHTEFO
R0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRlbnNpb25zR0xB
TkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4ICs2NCw4IEBA
IHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRlbnNpb25zOwog
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAgLy8gV2VhayBw
b2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFjayB0byBHcmFw
aGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIG1fY29udGV4
dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0aW5nLXBvaW50
IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAgICBib29sIG1f
d2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0
R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBkZmEyYjdhNTA5
Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCiAK
ICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIu
aD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElP
TikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBkZWZpbml0aW9u
IHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAgLTc2LDggKzcx
LDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdDR0xlbnVtIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCitHQ0dM
ZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgp
CiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEpCiAgICAgICAg
IEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3JtQ29uZmlnKCks
IEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQorR0NHTGVudW0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZv
ckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBzd2l0Y2ggKGRy
YXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyArOTksNyBAQCBH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRGb3JEcmF3
aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChH
Q0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1RhcmdldCkgewog
ICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZvckRyYXdpbmdU
YXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHJl
bGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVsZWFzZVRocmVh
ZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNlQmVoYXZpb3Ip
CiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAgLTE2MSw3ICsx
NTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xfUmVsZWFzZVRo
cmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRz
KCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRy
eUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpAQCAtMTg3LDE0
ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBwaXhlbEJ1ZmZl
cjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1dGVz
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKIHsK
ICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygpLmFscGhhID8g
R0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwocGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgYXV0byBh
dHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53
aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11c3RSZXN0b3Jl
RkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0
ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YXR0YWNo
RGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRycyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50
ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZFNjaXNzb3Io
R0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNj
b3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAgZ2w6OlJlbmRl
cmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDR0xlbnVtIHBu
YW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBn
bDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwgbnVsbHB0ciwg
dmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0NHTGVu
dW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48R0NHTGludCwg
Mj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRl
clR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUs
IHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAgICAgICAgIGlu
dGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihnZXRFeHRlbnNp
b25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwg
Zm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
ZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3Vu
ZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFr
ZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQpLCAwKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0wK
ICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2Uy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5
b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewog
ICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBi
b3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRh
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBtYWtl
R0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xz
aXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2
b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xhbXBm
IHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRo
UmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGdsOjpEZXB0aFJh
bmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oekZhcikp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFt
cGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVwdGgoR0NHTGNs
YW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVwdGhmKHN0YXRp
Y19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lvbnMpCiAgICAg
ICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+KHRoaXMpOwog
ICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkblBpeGVs
cyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRh
KQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0YS5kYXRhLCBm
YWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxzKEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJbXBsKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBsZW5ndGgsIEdD
R0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0YSwgYm9vbCBy
ZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMsIEdDR0xzaXpl
aSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZmZXJPYmplY3Qp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxz
SW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYKIH0KIAotLy8g
VGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZvbGxvdywgcG9y
dGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0
ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCiB7
CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwogICAgIC8v
IEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZvcm1zIGFyZSBu
b3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1MTYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBj
aGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpw
cmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQogICAgICAgICBy
ZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFTU0VSVCghbV9s
YXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1zdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVSZWFkRnJhbWVi
dWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5ib3VuZFJlYWRG
Qk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpAQCAtNTg3LDcg
KzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc2hh
cGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRX
aWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1cm47CkBAIC02
NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4Miw3
ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJlKEdD
R0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRl
cik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0
YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KICAgICBnbDo6
QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGlu
ZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpi
aW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03
MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBy
ZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0CiB9CiAK
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVy
ZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGdsOjpCaW5kVGV4
dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBm
IGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1
ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NH
TGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2Rl
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51
bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2Rl
QWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5k
RXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9CiAKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdD
R0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyhH
Q0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVu
dW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBz
cmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFs
cGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dM
ZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVt
IGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQgogICAgIGds
OjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBz
aXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBH
Q0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xT
cGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJT
dWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZmZXJTdWJEYXRh
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lkPiBk
YXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51
bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0
LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwg
R0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3
cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdl
dCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3Jp
dGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGlu
dD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJuYWxmb3JtYXRp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0aXZSb2J1c3RB
TkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXplLCBudWxscHRy
LCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxl
cywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODQ4LDcgKzg0
Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBtX3N0YXRlLnRl
eHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2
ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZl
bHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZv
aWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UzRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxz
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAgZ2w6OlRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6ZSwgcGl4ZWxz
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVs
LCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQp
LCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50
IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50
IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmYKICAg
ICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdWJJbWFn
ZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQs
IGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNl
dCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bh
bihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51
bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4OTQsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlM0RSb2J1
c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xz
aXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dM
aW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXpl
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNldCks
IDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xT
cGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhv
ZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5MDcsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1YkltYWdlM0RS
b2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6ZSwgZGF0YS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xp
bnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5
b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0QodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZv
cm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNv
bnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKK1Zl
Y3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtcyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1J
bmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVu
aWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpAQCAtOTI5LDcg
KzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwpAQCAt
OTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6OkNoZWNrRnJh
bWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBH
Q0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQ29sb3IoR0NH
TGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk0NSw3
ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdDR0xj
bGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFyQ29sb3Iociwg
ZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xi
aXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhcihHQ0dMYml0
ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NjIsNyArOTU2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NH
TGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dM
Ym9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwgR0NHTGJvb2xl
YW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGls
ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGls
ZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
IHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVT
aGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNvbXBpbGVTaGFk
ZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2Uy
RERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVy
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEwMTYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEwMzMsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoZnJhbWVi
dWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkN1
bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1
bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhGdW5j
KEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVuYyhmdW5jKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFu
IGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhHQ0dMYm9vbGVh
biBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
cHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxhZyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNo
YWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMTwogICAg
IGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpEaXNh
YmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODksNyArMTA4Myw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51
bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpCiAg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdF
bGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZW5h
YmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2FwKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NH
THVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQog
ICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1c2goKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMzks
NyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKICAgICBn
bDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dM
ZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVy
ZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51
bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTU2
LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE2NCw3ICsx
MTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDR0xlbnVt
IG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3Miw3ICsx
MTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NH
TGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICBpZiAo
IXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBA
IC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJp
YihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwgaW5mbyk7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7
CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURf
VkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
Y3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVu
aWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5m
byYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaW5k
ZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hl
ZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdD
R0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVj
dCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpZiAoIXByb2dy
YW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAgaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0cmliTG9jYXRp
b25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3Qo
KQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJuIG1vdmVkQW5F
cnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkK
K0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsKICAgICBpZiAo
IW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVkIHRvIG1vdmUg
dGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCkBA
IC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMzA3LDcg
KzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dM
ZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMxNSw3
ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2RlKTsKIH0KIAot
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKICAg
ICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xMzM0
LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFi
bGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXApOwogfQogCi1H
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewogICAgIGlm
ICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzNDUsNyArMTMz
OSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVy
KFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJc0ZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQog
ewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTM1Niw3
ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1Byb2dyYW0ocHJv
Z3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRl
cmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVy
YnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZQogICAgIHJl
dHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
KQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2w6
OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
IHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzODks
NyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1
cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNUZXh0dXJlKHRl
eHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0aCh3aWR0aCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogICAgIGds
OjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFj
dG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5p
dHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdD
R0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2FtcGxlQ292
ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAsNyArMTQyNCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFt
cGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVyYWdlKHZhbHVl
LCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xNDUxLDcgKzE0
NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJTb3VyY2Uoc2hh
ZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NH
TGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0
ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NTks
NyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdD
R0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCBy
ZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxG
dW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdD
R0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLAogICAg
IGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3
NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2so
R0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwg
R0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3Nyw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0g
ZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBt
YXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xl
bnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBH
Q0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtCiAg
ICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51
bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZh
aWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWls
LCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQ
YXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsxNTAxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyArMTUxNyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAg
IGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5kYXRhKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5p
Zm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NF
UlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpV
bmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2
Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyArMTU3Niw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9jYXRpb24sIGFy
cmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50
IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlmb3JtMWkobG9j
YXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBh
cnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBH
Q0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGds
OjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NH
TGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGlu
dCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFy
cmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBh
cnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdD
R0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00aShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYz
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAgZ2w6OlVuaWZv
cm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQogewogICAgIEFT
U0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGluCiAgICAgZ2w6
OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJh
CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9z
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAgICAgQVNTRVJU
KCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJy
YXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZT
aXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTY3NSw3ICsx
NjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAg
Z2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjFm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xm
bG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBH
Q0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBnbDo6VmVy
dGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0
cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRl
eEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEs
IEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZgog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
CiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4
LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBnbDo6VmVydGV4
QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4g
YXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cKICAgICBnbDo6
VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkg
c3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51
bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsCiAgICAg
Z2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0
cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zm
c2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJ
UG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dM
c2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwg
R0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc3Myw3
ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBv
aW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVydGV4QXR0cmli
SVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZp
ZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDCiAgICAgZ2w6
OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE3OTQsNyAr
MTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xP
YmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgw
Niw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4
QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0ZVZlcnRleEFy
cmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFy
cmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTE4
MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Zl
cnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRl
eEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4MjgsNyAr
MTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQ
bGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFycmF5T0VTKGFy
cmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NH
TGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xi
b29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+CiAg
ICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNpemUsIG51bGxw
dHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAgR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGZsb2F0
PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xFKHBuYW1lLCB2
YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdDR0xpbnQ2NCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQorR0NH
TGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFt
ZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dM
ZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCiB7CiAg
ICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYsNyBAQCBHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJv
Z3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBH
Q0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg5
MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3Jh
bWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVybiB2YWx1ZTsK
IH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9n
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJp
bmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1hbmdsZWRJbmZv
TG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBT
dHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAgVU5VU0VEX1BB
UkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0s
CiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFtSW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0x
OTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dy
YW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4gZ2V0VW5tYW5n
bGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7CiB9
CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmkoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChzaGFkZXIpOwog
ICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwg
R0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK1N0
cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTczLDEyICsxOTY3
LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhz
aGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCkKK1N0
cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZsb2F0IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFy
YW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9h
dCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTk4Nyw3
ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJh
bWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQog
ewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
TGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
TGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvYwog
ICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6
ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2Nh
dGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3ICsyMDE3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVpdlJvYnVzdEFO
R0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0K
IAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBA
IC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAgIHJldHVybiBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAK
LUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0ciBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0wK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAgIHJldHVybiBv
OwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNy
ZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICByZXR1cm4gbzsK
IH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJv
Z3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVBy
b2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVhdGVQcm9ncmFt
KCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogICAgIHJldHVy
biBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIwODMsNyBAQCBQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIoR0NH
TGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVO
VF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7CiB9CiAK
LVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUo
KQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVUZXh0dXJl
KCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVi
dWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAgICBnbDo6RGVs
ZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6RGVsZXRlUHJv
Z3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5k
ZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogICAgIGds
OjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkRlbGV0ZVNo
YWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2MSw3ICsyMTU1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9y
bUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFs
bCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6
ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5
bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQgdG8gbW92ZSB0
aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCiAgICAgLy8g
cHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2ls
bCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50aGV0aWNFcnJv
cnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VD
b250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExv
c3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykp
CiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250ZXh0KCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWRO
b3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNwYXRjaENvbnRl
eHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5n
ZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkg
Y291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNp
emVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwg
R0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NH
THNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVp
IHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0VsZW1lbnRzSW5z
dGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVt
IG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4
LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMjMsNyArMjIx
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3Io
R0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0ZXhBdHRyaWJE
aXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIyNiw3IEBAIEdD
R0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3JtQmxvY2tJbmRl
eChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1TdHJpbmcg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkKK1N0cmluZyBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7CiAgICAgQVNT
RVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjUyLDcg
KzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBTdHJpbmcoYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9j
a0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAog
CiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0dXJuIG5hbWU7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGdsOjpCZWdpblF1
ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
bmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVu
ZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6OkVuZFF1ZXJ5
KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVy
eU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50IEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lKQogCiAv
LyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAt
MjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9y
bUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRi
YWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAgICAgZ2w6OkRl
bGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwogfQogCi1HQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0
Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9y
bUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJh
bnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNr
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMzM0LDcgKzIz
MjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJh
Y2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJhbnNmb3JtRmVl
ZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhH
Q0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2RlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM1MCw3ICsy
MzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZm
ZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZh
cnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFt
LCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3MuZGF0YSgpLCBi
dWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0gMDsKLSAgICBn
bDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAgZ2w6OkdldFBy
b2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZPUk1fRkVFREJB
Q0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZTaXplKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRC
dWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsCiAgICAg
Z2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dM
aW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBH
Q0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQg
bWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwg
R0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RY
MSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDAz
LDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZm
ZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpCbGl0RnJhbWVi
dWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRz
dFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1l
bnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NHTGludCBsYXll
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVMYXllcih0YXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNw
YW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0YXJnZXQsIGF0
dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFy
Z2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihH
Q0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRCdWZmZXIoR0NH
TGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNyYyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQs
IEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZl
clRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZy
YWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIC0x
OwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMKICAgICByZXR1
cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NH
THVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDc2LDcg
KzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtMnVpKGxv
Y2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkoR0NHTGludCBs
b2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDg0LDcgKzI0
NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtM3VpKGxvY2F0
aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1
aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWlu
dAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWlu
dD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGds
OjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8g
MiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjUxOCw3ICsy
NTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9ybTN1aXYobG9j
YXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1CiAg
ICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyArMjUzMCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDNmdihsb2Nh
dGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkK
IHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwg
dHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NF
UlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
QEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVu
aWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJhbnNwb3NlLCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTcyLDcg
KzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlmb3JtTWF0cml4
M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVmU2l6ZSAlIDEy
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyArMjU3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDNmdihsb2Nh
dGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGluZGV4
LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4Myw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShpbmRleCwgeCwg
eSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
Ykk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyArMjU5MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aXYoaW5kZXgs
IHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVp
bnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0
cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQg
eiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdQog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xl
bnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBH
Q0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcKICAgICBnbDo6
RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+
IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6OkRyYXdCdWZm
ZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZl
ciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdD
R0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIsIGRyYXdidWZm
ZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFu
PGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNs
ZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFs
dWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZl
ciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlcy5kYXRh
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50
IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyZmkoR0NH
TGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGlu
dCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsCiAgICAg
Z2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKICAgICBnbDo6
RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJuIGdsOjpJc1F1
ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVlKTsKIH0KIAot
UGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigp
CitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVNhbXBsZXIo
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAgICBnbDo6RGVs
ZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiAgICAgcmV0
dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5p
dCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcyMyw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIs
IHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBs
ZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdD
R0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2FtcGxlclBhcmFt
ZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNh
bXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6
OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLUdDR0xmbG9h
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NHTGZsb2F0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2Jq
ZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
ciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNh
bXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUp
CiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwKICAgICByZXR1
cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5
bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dMc3luYyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0
ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYQog
ICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQogCi1HQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCitHQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMgc3luYykKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMoc3luYyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3lu
YykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dMc3luYyBzeW5j
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5
bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0KIAotR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMs
IEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVudW0gR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZp
ZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4OSw3ICsyNzgz
LDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdD
R0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNsaWVudFdhaXRT
eW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50
NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5bmMoR0NHTHN5
bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNzk3LDcgKzI3
OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3luYyhzeW5jLCBm
bGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKIHsK
ICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNr
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFu
c2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgy
Myw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgz
MSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlclJh
bmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6QmluZEJ1ZmZl
clJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0KIAotVmVjdG9y
PEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVz
KQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtSW5k
aWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlm
b3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWludD4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJv
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBwYXJhbXMpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1
aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJsb2NraXZSb2J1
c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcy5idWZTaXpl
LCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0FycmF5
c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NH
TFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg1OSw3
ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlz
QU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVsdGlEcmF3QXJy
YXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xT
cGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGlu
c3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkg
ZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTCiAgICAg
Z2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5kYXRhLCBjb3Vu
dHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2Rl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2Rl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yODgwLDcgKzI4
NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0FO
R0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURyYXdFbGVtZW50
c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCksIGRyYXdjb3Vu
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBj
b3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg5
Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxl
bWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6TXVsdGlEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwgcG9pbnRlcnMu
ZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQorYm9vbCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogewogICAgIHNp
emVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVDb21wbGV0aW9u
RmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKQEAg
LTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5k
VXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50
Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JU
ZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3BsYXlXYXNS
ZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChl
dmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1cmUpIHsKKyAg
ICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVuZGVyaW5nUmVz
dWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBwYWlu
dFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1h
Z2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVh
ZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RGTW92ZSgqcGl4
ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0
KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBSZWFk
aW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3
aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVk
QWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byByZXN1bHRzID0g
cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1bHRzICYmICFy
ZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1bHRzLT5mb3Jt
YXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0cy0+Zm9ybWF0
KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAgLy8gRklYTUU6
IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJvd0J5dGVzIGFu
ZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXplID0gcmVzdWx0
cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6ZS53aWR0aCgp
ICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRhdGEoKTsKKyAg
ICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAxKSAqIHJvd1N0
cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChuZXcgdWludDhf
dFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9wICs9IHJvd1N0
cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5KHRlbXAuZ2V0
KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0b20sIHRvcCwg
cm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCksIHJvd1N0cmlk
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3N0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdS
ZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJl
dHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWlu
dGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlYWRDb21w
b3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRlMzBiY2JjNDc3NDViYjhiNDIxNTI3YmZkMzQ5YmFkNjc3YmQwNjcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSU9T
dXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0
LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29zaWEgeworY2xh
c3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBIb3N0V2luZG93
OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNzIFBpeGVsQnVm
ZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQ
bGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBoaWNzQ29udGV4
dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7CisgICAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0OworICAgIEdD
R0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGljIEdDR0xlbnVt
IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVt
IGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdCdWZmZXJUZXh0
dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKKyAgICBl
bnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAgICAgLy8gUmVs
ZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgY2FsbHMg
ZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCisgICAg
ICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlVGhyZWFk
UmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQg
YmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisgICAgICAgIC8v
IGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFz
ZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9u
LCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAgdm9pZCBwcmVw
YXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlvbiB3aXRob3V0
IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAgaW50IGdldEF0
dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2luZyB0aHJvdWdo
IEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0KTsK
KworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09
MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8vIEdyYXBoaWNz
Q29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdCBm
aW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkgZmluYWw7Cisg
ICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZv
cm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgZmluYWw7Cisg
ICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmlu
YWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVuZENvbG9yKEdD
R0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFt
cGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKSBm
aW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBH
Q0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAgdm9pZCBidWZm
ZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEsIEdD
R0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZp
bmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0
KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5hbDsKKyAgICB2
b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFt
cGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVhckRlcHRoKEdD
R0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDR0xpbnQgcykg
ZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFsOworICAgIHZv
aWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlUZXhTdWJJbWFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dM
aW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0gbW9kZSkgZmlu
YWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7CisgICAgdm9pZCBk
ZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdD
R0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9pZCBkZXRhY2hT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0FycmF5cyhHQ0dM
ZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFsOworICAgIHZv
aWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxlKEdDR0xlbnVt
IGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBp
bmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lkIGZsdXNoKCkg
ZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9udEZhY2UoR0NH
TGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJn
ZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBib29sIGdldEFj
dGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7CisgICAgYm9vbCBn
ZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBs
YXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGdl
dEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpIGZp
bmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZpbmFsOworICAg
IHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVl
KSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkgZmlu
YWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGlu
dD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5h
bWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5nIGdldFVubWFu
Z2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25zdCBTdHJpbmcm
KTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJpKFBsYXRmb3Jt
R0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5m
b0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25UeXBlLCBHQ0dM
U3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5hbDsKKyAgICBT
dHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIFN0cmlu
ZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0IGdldFRleFBh
cmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NH
TGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7CisgICAgdm9p
ZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRVbmlmb3JtdWl2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
THVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0
Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdDR0xzaXplaXB0
ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKSBm
aW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKSBmaW5h
bDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAgICBHQ0dMYm9v
bGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIEdDR0xib29s
ZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBp
c1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBp
c1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RleHR1
cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgoR0NHTGZsb2F0
KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFs
OworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5p
dHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCByZWFkblBp
eGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBm
aW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSBm
aW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29s
ZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgc2hh
ZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIHZv
aWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2sp
IGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dM
ZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBz
dGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2Vw
YXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBzdGVu
Y2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKSBmaW5h
bDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZh
aWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAgdm9pZCB0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7
CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXpl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCBjb21wcmVz
c2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQg
Ym9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7Cisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhv
ZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgpIGZpbmFsOwor
ICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCB1
bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdikg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB4LCBH
Q0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6KSBmaW5h
bDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikgZmluYWw7
CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgsIEdDR0xm
bG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0
Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHkp
IGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQg
eikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBmaW5hbDsKKyAg
ICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwg
R0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAgdm9pZCBkcmF3
QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBj
b3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxlbWVudHNJ
bnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKSBmaW5h
bDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmluYWw7CisgICAg
dm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQg
YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgY29weUJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdD
R0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRy
KSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3Jj
WDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQg
ZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIp
IGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZUZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRz
KSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAgdm9p
ZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlcm5hbGZv
cm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVz
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5hbDsKKyAgICB2
b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFn
ZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdD
R0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0
aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGlu
dCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZz
ZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7Cisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBH
Q0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAg
R0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVp
bnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3VpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+KSBmaW5h
bDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHVu
aWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aShH
Q0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3
KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6
LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5hbDsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0
LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0
ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NH
TGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZm
ZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2
b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVF1
ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5
KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkp
IGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KSBm
aW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0dWkoUGxhdGZv
cm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBsYXRmb3JtR0xP
YmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2FtcGxlcihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU2FtcGxlcihQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAgICB2b2lkIHNh
bXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUs
IEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmYoUGxhdGZv
cm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5h
bDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBz
YW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTYW1wbGVyUGFy
YW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsK
KyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQg
ZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykgZmluYWw7Cisg
ICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBjbGllbnRX
YWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQp
IGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywg
R0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2koR0NHTHN5bmMs
IEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVRyYW5z
Zm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQ
bGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RyYW5zZm9ybUZl
ZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmluZFRyYW5zZm9y
bUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkgZmluYWw7Cisg
ICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpIGZp
bmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZpbmFsOworICAg
IHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lkIHBhdXNlVHJh
bnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9ybUZlZWRiYWNr
KCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1
aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAgdm9pZCBiaW5k
QnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZpbmFsOworICAg
IFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsKKyAgICBWZWN0
b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpIGZp
bmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1CbG9ja0Jp
bmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRl
eCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9pZCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJ
bmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykgZmluYWw7Cisg
ICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dM
c2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0FycmF5c0luc3Rh
bmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywg
R0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXpl
aT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworICAgIHZv
aWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
b2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtdWx0aURy
YXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBv
ZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6
ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZUJ1ZmZl
cigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKSBmaW5h
bDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsKKyAgICBQbGF0
Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xP
YmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5h
bDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lk
IGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBzeW50aGVz
aXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdldEV4dGVuc2lv
bnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2
ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsKKyAgICB2b2lk
IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAg
IHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCk7Cisg
ICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOworICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5k
ZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworCisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CisjZW5kaWYKKyAgICB1bnNp
Z25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKTsKKworICAgIGNvbnN0ZXhwciBzdGF0
aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQ
TEFZOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZl
RGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5
cGUsIC0xKTsKKyAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQ
ZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwor
I2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xFKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJs
aWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICAvLyBDYWxs
ZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRo
YXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2Vy
J3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKKyAgICAvLyBpbiBwYXJ0
aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBv
cgorICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMg
b2YgdGhlIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQgdmFsaWRhdGVE
ZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKKyAg
ICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgdm9pZCByZWFkblBpeGVsc0ltcGwo
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpKiBsZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9p
ZCogZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCk7CisKKyAgICAvLyBEaWQg
dGhlIG1vc3QgcmVjZW50IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUgaW4gYW4gYWNj
ZXB0YWJsZSBzdGF0ZT8KKyAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsKKworICAgIGJv
b2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcHJlcGFyZVRleHR1cmVJ
bXBsKCk7CisgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IElu
dFJlY3QmID0gSW50UmVjdCgpKTsKKyAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZl
cklmTmVlZGVkKEdDR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpOworCisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIGFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZm
ZXJCYWNraW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CisgICAgc3RhdGljIGJv
b2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXksIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wpOworI2VuZGlmCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBjb250
ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgorICAgIGJvb2wgd2FpdEFuZFVwZGF0
ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gUGxhdGZvcm0gc3Bl
Y2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICBzdGF0aWMgdm9pZCBw
bGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKKworICAgIEdDR0x1aW50IG1fdGV4dHVy
ZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsQ29sb3JGb3JtYXQg
eyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCB7IDAgfTsK
KyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OworICAgIEdDR0x1aW50IG1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyIHsgMCB9OworICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6
dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCisgICAgR0NHTHVpbnQgbV9wcmVzZXJ2ZURyYXdp
bmdCdWZmZXJUZXh0dXJlIHsgMCB9OworICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVyZSB3aGVuIG1f
cHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KKyAgICBHQ0dMdWludCBt
X3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKKyAgICAvLyBRdWVyaWVkIGF0IGRpc3Bs
YXkgc3RhcnR1cC4KKyAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCB7IC0x
IH07CisgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgorICAgIExp
c3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKyAgICBib29sIG1faXNGb3JX
ZWJHTDIgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3VudCB7IDAgfTsK
KyAgICBib29sIG1fZmFpbE5leHRTdGF0dXNDaGVjayB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Vz
ZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKKyAgICBzaXplX3QgbV9vbGRlc3RGcmFt
ZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKKyAgICBTY29wZWRHTEZlbmNlIG1fZnJhbWVDb21wbGV0
aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOworICAgIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUg
bV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+IG1fZXh0ZW5z
aW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJm
YWNlU3dhcENoYWluIG1fc3dhcENoYWluOworICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsg
bnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsg
bnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWdP
YmogeyBudWxscHRyIH07CisgICAgLy8gQmFja2luZyBzdG9yZSBmb3IgdGhlIHRoZSBidWZmZXIg
d2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5LgorICAgIC8vIFdoZW4gcHJlc2Vy
dmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3aW5nIGJ1ZmZlciBiYWNr
aW5nIHN0b3JlLgorICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IHRydWUsIHRo
aXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7CisgICAgdm9pZCogbV9kaXNw
bGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24geyBmYWxzZSB9
OworICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9oaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0OworI2VuZGlmCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIEdD
R0x1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm1l
ZGlhdGVUZXh0dXJlIHsgMCB9OworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisgICAgc3RkOjp1
bmlxdWVfcHRyPE5pY29zaWE6OkdDR0xMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKKyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFOworI2lmIFVTRShOSUNPU0lBKQorICAgIGZyaWVuZCBjbGFzcyBOaWNv
c2lhOjpHQ0dMTGF5ZXI7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgZnJpZW5kIGNs
YXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyNlbmRpZgorfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXggY2NjYjU3MjRhNGNk
OTJmZjBiZjhlNzM4M2M1ZDlmZTY4OWQ3N2I4Ni4uNGQ1OWNiMTJjNWU0NDc1MzdkZTBhZWUyMTBk
ZTAwMmNiZDc5ZmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKQEAgLTEw
Niw3ICsxMDYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJh
Y3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFBpeGVs
QnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50VG9DYW52YXMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRl
cywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVCghcGl4ZWxCdWZmZXIuc2l6
ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcAppbmRleCBmNzlmMjJlMzEzZWExMTczODljNWY0MDlkZDBmNDk0YWUxNWFlYjkz
Li5hZjRjMTdkNTFmYTU5ZjQ2ODhkZjQzOTY1MzUxOGY1Y2EwZGFhZjIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFn
ZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50
VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0
QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJj
ZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJU
KCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFzU2l6ZS5pc0Vt
cHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRHTENvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKaW5kZXggMjU1NWZmMDgzMjhlMzQ2
OWNkN2E0YTI5N2RiZWY3OTBmNjMwNTI4OC4uZTQwOTVhMmIxOWUyNGQxZGI4MDljMTgyZjY0MzJi
ZGMwY2I3ODZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApAQCAtMjcsMTIgKzI3
LDE4IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbmNsdWRl
ICJJT1N1cmZhY2UuaCIKIAorI2lmIEVOQUJMRShWSURFTykKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMQ29jb2Eg
OiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgeworY2xhc3MgV0VCQ09SRV9FWFBPUlQg
R3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMQ29jb2E+IGNyZWF0
ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAgfkdyYXBoaWNz
Q29udGV4dEdMQ29jb2EoKTsKQEAgLTQ5LDE0ICs1NSwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwogI2VuZGlmCiAK
LSAgICAvLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBvdmVycmlkZXMuCisgICAgLy8gR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0IG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGNvcHlU
ZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBmbGlwWSkgZmluYWw7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pCisgICAgR3JhcGhpY3ND
b250ZXh0R0xDViogYXNDVigpIGZpbmFsOworI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0ZDo6dW5pcXVl
X3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29u
dGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3MmM3N2VjYjIx
OWUzOS4uMDI5Y2MzZmFlNDdmODcwMjNjNWMzMDIyNWUwMjU5YTA0MWYwZDY2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0
R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9H
cmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5kaWYKIAogI2lm
IEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxhdGZvcm1Jc0FO
R0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpID09IHRy
dWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJlYWRlZCBtYW5u
ZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxzZSBjYXNlIHRo
aXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1dCBhbHdheXMg
c2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIgYW5kIG51bGxw
dHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIGN1cnJl
bnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKQog
ewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNw
bGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgfQogCiAg
ICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNrZW5kLiIsIGF0
dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRpdmVEaXNwbGF5
VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlZmF1bHREaXNw
bGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNlTWV0YWwpIHsK
ICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9BTkdMRV9UWVBF
X0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0YXRpYyBFR0xE
aXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAgICAgICAgICAg
ICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwog
ICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9XRVJfQU5HTEUp
OwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjps
b3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYgKHBvd2VyUHJl
ZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJlZmVyZW5jZTo6
SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQo
RUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5hdGl2ZURpc3Bs
YXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlzcGxheTsKKyAg
ICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpoaWdoUGVy
Zm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlBdHRyaWJ1dGVz
LmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xBTkdMRShXVEZN
b3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVuY3Rpb25hbGl0
eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29hIHRvIHNpbXBs
aWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzKQorR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRycykKIHsKICAg
ICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdM
V2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVuc2lvbik7CiAg
ICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0gICAgICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRp
c3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0YWwg
aW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3RzIGFyZSBub3Qg
c2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVycywgc28KICAg
ICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0bGluZy4gT3Bl
bkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21lIHNvcnQgb2Yg
aW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAotICAgIExPRyhX
ZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRoaXMpOwor
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICglcCkuIiwg
dGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUo
KQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigp
LnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVudCgpKSB7CkBA
IC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAhPSB0aGlzKTsK
ICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9HKFdlYkdMLCAi
RGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlzKTsKKyAgICBM
T0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICglcCkuIiwgdGhp
cyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgpIGNvbnN0CkBA
IC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmlzVmFsaWQo
KSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIq
IEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4dEN1
cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNv
bnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXNDaGVjaykgewog
ICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0ICglcCkuIExv
c2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRTdGF0dXMgPSAw
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0
eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2V0Q29udGV4
dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlm
ICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUyMCw3ICs1MjAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShi
b29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmICht
X3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcgKzUyOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQog
ICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsK
ICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAg
ICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxsb2NhdGluZyBh
IG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVzc3VyZS4KQEAg
LTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlz
cGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVm
ZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0
ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAgICBBU1NFUlQo
IWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBhdXRvIGJhY2tp
bmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
KQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShiYWNraW5nKSwg
cGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmREaXNwbGF5
QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBw
YnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcikK
IHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4dHVyZVRhcmdl
dCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJC
KTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJy
ZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7
CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdM
X05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNw
bGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNobWVudFVzYWdl
IHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0NHTHVpbnQg
cGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewogICAgICAgICBM
T0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19jYXN0PGludD4o
dGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2NywyNCArNjY3
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZhY2VGcm9tU2hh
cmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNG
b3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZl
bnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsKLSAgICBpZiAo
ZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3Bs
YXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZXZl
bnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKSB7Ci0gICAg
ICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXkoKQogewogICAg
IGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0LDE1ICs3MDcs
MTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQog
CiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGljc0NvbnRleHRH
TENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3YgPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3YgPSBHcmFwaGlj
c0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1fY3YuZ2V0KCk7
CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogewog
ICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCk7CiAg
ICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQpA
QCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFT
YW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5
QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZm
ZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlCiB9
CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1SZWxlYXNl
VGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1S
ZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7
CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNv
cHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtRwogfQogI2Vu
ZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdPYmo7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0Nv
bnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKSAm
JiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRlICJBTkdMRVV0
aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8cGFsL3Nw
aS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQ
SS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TY29w
ZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3Rz
Q0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpbmNsdWRlICJD
b3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25z
dGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0dHJpYnV0ZSB2
ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBpbnQgdV9mbGlw
WTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZhcnlp
bmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAgICAi
eyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAxLjApOyIKLSAg
ICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41ICsgLjU7Igot
ICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFsaXplZFBvc2l0
aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2X3lUZXh0dXJl
Q29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2VGV4dHVyZUNv
b3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19OwotCi1zdGF0aWMg
Y29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKLSAgICAi
YXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0dXJl
U2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAgICJ1bmlmb3Jt
IGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIK
LSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZvaWQgbWFp
bigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24sIDAs
IDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9uICog
LjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAgICAgICBub3Jt
YWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKLSAgICAiICAg
IHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95VGV4dHVyZVNp
emU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9u
ICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHByIGF1dG8gc195
dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVuaWZvcm0gc2Ft
cGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JNYXRyaXg7Igot
ICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2YXJ5aW5nIHZl
YzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0gICAgInsiCi0g
ICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1X3lUZXh0dXJl
LCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0ZXh0dXJlMkQo
dV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIgICAgeXV2LmEg
PSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCi0g
ICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVy
VGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyIKLSAgICAi
dW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3JtIHNhbXBsZXIy
RFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1hdHJpeDsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZhcnlpbmcgdmVj
MiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAgICAieyIKLSAg
ICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVjdCh1X3lUZXh0
dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0ZXh0dXJl
MkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIKLSAgICAiICAg
IHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVfY29sb3JNYXRy
aXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2UgewotICAgIFVua25v
d24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJhbnNmZXJGdW5j
dGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBrSVRVX1JfNjAx
XzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQM19ENjUsCi0g
ICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJhbmdlRnJvbVBp
eGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBpeGVsRm9ybWF0
KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4OgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlw
ZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRU
eXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhBVkUoQ09SRVZJ
REVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlmCi0gICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlX0FSR0IyMTAx
MDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBs
YW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3IxMEJp
UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEw
QmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9G
T1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhC
aVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6RnVs
bDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5rbm93bjsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5jdGlvbkZyb21T
dHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVxdWFsKHN0cmlu
Zywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAgICAgIHJldHVy
biBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZFcXVhbChzdHJp
bmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAgICAgICByZXR1
cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENGRXF1YWwoc3Ry
aW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkpCi0gICAgICAg
IHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0gICAgaWYgKGNh
bkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKCkgJiYgQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkKLSAgICAgICAg
cmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2FuTG9hZF9Db3Jl
VmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVxdWFsKHN0cmlu
Zywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICByZXR1cm4gVHJh
bnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJ
bWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0cmluZywga0NW
SW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0dXJuIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25D
Vjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5pb24gewotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAgICAgR0xmbG9h
dCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxvYXQgY2I7Ci0g
ICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07Ci0KLSAgICBj
b25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZsb2F0IGIpCi0g
ICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNvbnN0ZXhwciBH
TGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkKLSAgICAgICAg
OiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAgIH0KLQotICAg
IGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xmbG9hdENvbG9y
JiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
YnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAgICAgICAmJiBh
YnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAgICAgICAmJiBh
YnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0KLX07Ci0KLXN0
cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBi
bGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB3aGl0
ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciByZWQgICAg
IHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsw
LCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVlICAgIHswLCAw
LCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAgIHswLCAxLCAx
fTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsxLCAwLCAxfTsK
LSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAxLCAwfTsKLX07
Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKLQot
ICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2ll
bnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0
KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0gICAgfQotCi0g
ICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikg
Y29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFu
Z2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQot
ICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJH
QiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiArIEtnICogRyAr
IEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0gICAgLy8gQ3Ig
PSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEti
IGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQg
ZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0aGUgYWJvdmUg
ZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8g
UiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2Ip
KSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0g
KCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8gV2hlbiB0aGUg
Y29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0g
d2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEgcmFuZ2Ugb2Yg
WzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUg
RnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFuZ2Ugb2YgWzAs
IDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9
IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0IHlTY2FsaW5n
RmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7
Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1
bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFj
dG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10gPSAwOwotCi0g
ICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0gPSAtY2JjclNj
YWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8g
Y2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIg
KiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsK
LSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsK
LSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNp
ZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsKLQotICAgIHJv
d3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11bMl0gPSAwOwot
ICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4g
b2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQotICAgIC8v
IGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0
MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVt
YmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAgICAgICAgYXV0
byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAgICAgYXV0byYg
eiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAgICB3IC09ICh5
ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRl
bykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQotY29uc3RleHBy
IEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYg
Y29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAgICAgcm93c1sw
XVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsy
XSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVswXSAqIGNvbG9y
LnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJn
Yi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93
c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sy
XVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4
Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVu
Y3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFp
cjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1hdHJpeE1hcCA9
IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBv
bmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAgLy8gaHR0cHM6
Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JD
ck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5
OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0
ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAg
MTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxs
b3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNf
YXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAy
NTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAx
MjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0
ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3
aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwg
InIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDks
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUg
ZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lm
aWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5
OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXgg
eyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIy
LCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAy
NTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0
MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Z3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
ODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJp
eCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAv
IDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAz
MCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBn
cmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYp
LCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcs
IDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAg
ICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFu
IGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25l
bnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8v
d3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNy
TWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4y
NjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4
IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1
NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRl
byBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjks
ICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
NzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAg
OTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVk
LCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIw
IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0gICAgLy8gTWF0
cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0x
OTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1
bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBN
VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07Ci0gICAgY29u
c3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5n
ZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1W
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBU
RSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAx
MjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0
ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVm
IC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xm
bG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNt
cHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0K
LSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAs
ICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0
ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwg
IlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMs
IDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Onll
bGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1h
dHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlF
cXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBN
IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEs
ICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAx
LjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5
YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKLSAgICAgICAg
bWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVy
RnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0
cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5j
dGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2Vz
LmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2VzLmdl
dCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6
a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5l
bXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRV
X1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1w
bGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1Jf
MjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNl
KE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQw
TV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5l
bXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBU
RV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQotICAgIC8vIFdl
IHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFu
Z2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5r
bm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0gICAgICAgIHJh
bmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5n
ZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8gQXNzdW1lIHVu
a25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRlcmF0b3IgPT0g
bWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmljZXMuZ2V0KCku
ZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7Ci0KLSAgICBB
U1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJldHVybiBpdGVy
YXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4dCkgfTsKLSAg
ICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0gICAgZ2w6OkRl
bGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rlc3Ryb3lDb250
ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
OjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG93bmVy
KQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0aWJsZSBjb250
ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBkb2VzIG5vdAot
ICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5LgotICAgIGNvbnN0
IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09OVEVYVF9DTElF
TlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAyLAotICAgICAg
ICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUsCi0gICAgICAg
IEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19FTkFCTEVEX0FO
R0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJTkRfR0VORVJB
VEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9O
T05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0Zm9ybURpc3Bs
YXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25maWcoKTsKLSAg
ICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5LCBjb25maWcs
IG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlmIChjb250ZXh0
ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAgYXV0byBjb250
ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVHTF9OT19DT05U
RVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRleHQpOwotICAg
IH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRyYXdpbmdCdWZm
ZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQpIHsKLSAgICAg
ICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUi
KTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBHTF9OT19FUlJP
UikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdMaW50IHZlcnRl
eFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgR0xpbnQg
ZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0g
ICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAgIGF1dG8gcHJv
Z3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVy
LCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsK
LSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIGdsOjpE
ZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNlIGFyZSB3cml0
dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQgdnNMZW5ndGgg
PSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNf
eXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBHTGludCBmc0xl
bmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQubGVuZ3Ro
KCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRl
eFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZTsKLSAg
ICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hh
ZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFk
ZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBnbDo6Q29tcGls
ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZyYWdtZW50U2hh
ZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0g
ICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2w6
OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlzIGNoZWNrZWQg
YWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24gYmVuZWZpdC4K
LQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5CdWZmZXJzKDEs
ICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xlYW51cCA9IG1h
a2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVsZXRlQnVmZmVy
cygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0aWNlc1sxMl0g
PSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsKLSAgICBnbDo6
QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0gICAgZ2w6OkJ1
ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR0xf
U1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAgICBnbDo6R2Vu
RnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1ZmZlckNsZWFu
dXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVsZXRlRnJh
bWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGludCBzdGF0dXMg
PSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFtLCBHTF9MSU5L
X1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMpIHsKLSAgICAg
ICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZSb2J1c3RBTkdM
RSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmdnNTdGF0dXMp
OwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRTaGFkZXJpdlJv
YnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwgbnVsbHB0ciwg
JmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
KCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIsIHRoaXMsIHN0
YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
b250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xlYW51cC5yZWxl
YXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBtX2Rpc3BsYXkg
PSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25maWcgPSBjb25m
aWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0gICAgbV9mcmFt
ZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7Ci0gICAgbV91
dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dy
YW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRpb24gPSBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4Iik7Ci0gICAg
bV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJv
Z3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiA9IGds
OjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXplIik7Ci0gICAg
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlvbkF0dHJpYnV0
ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJhX3Bvc2l0aW9u
Iik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdoaWxlIHRoZSBw
cm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRpb25BdHRyaWJ1
dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQb3NpdGlvbkF0
dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAgIGdsOjpDbGVh
ckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6
Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIFBsYXRmb3Jt
R0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewotICAgIC8vIEZJ
WE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQyMGYnIHBpeGVs
IGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3JtYXRzLgotICAg
IE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUoaW1h
Z2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNy
OEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZv
cm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShDT1JFVklERU9f
Q09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVsRm9ybWF0ICE9
IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAg
ICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhC
aVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4
dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVz
JykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJlZiBzdXJmYWNl
ID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFzdXJmYWNlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJm
YWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKLSAgICAg
ICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1cmZhY2VTZWVk
ID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRU
ZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7Ci0gICAgICAg
IC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRp
bWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVu
IG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5v
LW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwg
IUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fY29udGV4
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9IENWUGl4ZWxC
dWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4ZWxCdWZmZXJH
ZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQp
OwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVk
IGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAvLyBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xlYXJUZXh0dXJl
T25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIp
OwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgfSk7Ci0g
ICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0gICAgZ2w6OkJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
LSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBnbDo6RnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9U
RVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0YXR1cyA9IGds
OjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVz
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVw
KSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1cmUuIiwgdGhp
cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0dXJlcyBm
b3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0ID0gSU9TdXJm
YWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxhbmVXaWR0aCA9
IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRvIHV2UGxhbmVI
ZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwotCi0gICAgR0xl
bnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5UZXh0dXJlcygx
LCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0
KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVv
VGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3JlOjpjcmVhdGVQ
YnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZpZGVvVGV4dHVy
ZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1dlBsYW5lV2lk
dGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEpOwotICAgIGlm
ICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2SGFuZGxlQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFuZGxlXSB7Ci0g
ICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXks
IHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7Ci0gICAgZ2w6
OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwg
JnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7
Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9IFdlYkNvcmU6
OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlk
ZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkVELCB5
UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAwKTsK
LSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHlIYW5k
bGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgeUhhbmRsZV0g
ewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNwbGF5LCB5SGFu
ZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBwYXJhbWV0ZXJz
LgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMCk7Ci0gICAg
Z2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0gICAgZ2w6OlVu
aWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlwWTo6WWVzID8g
MSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24s
IHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYobV91dlRleHR1
cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQpOwotCi0g
ICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOwot
ICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9tU3RyaW5nKGR5
bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50KGltYWdlLCBr
Q1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBjb2xvck1hdHJp
eCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24ocmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29sb3JNYXRyaXhV
bmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAgICAvLyBEbyB0
aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5HTEVTLCAwLCA2
KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1cmZhY2VTZWVk
ID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91dHB1dFRleHR1
cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1fbGFzdEZsaXBZ
ID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQzMDFmMTI1MWI3
MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVPKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5oIgotCi0jaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0vLyBHcmFwaGlj
c0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9mIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBp
bXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5HTEUgQ29jb2Eu
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1
ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBG
bGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4dHVyZVNlZWQo
R0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RUZXh0dXJlU2Vl
ZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG1f
b3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9kaXNwbGF5IHsg
bnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0IHsgbnVs
bHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWcgeyBu
dWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIgeyAwIH07Ci0g
ICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAgICBHQ0dMaW50
IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV91dlRleHR1
cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlwWVVuaWZvcm1M
b2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9u
IHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiB7IC0x
IH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0g
ICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotCi0gICAg
RmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2ludGVyPElPU3Vy
ZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJmYWNlU2VlZCB7
IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dMdWludCwgdW5z
aWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVyZVNlZWQ7Ci19
OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4
dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oIgorCisjaWYg
RU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNp
bmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY29j
b2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIHsKKyAg
ICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ1bmlm
b3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRl
OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZvaWQg
bWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24s
IDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9u
ICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAiICAgICAgICBu
b3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKKyAgICAi
ICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIKKyAgICAiICAg
IHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisgICAgIn0iX3MK
K307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmVSZWN0
YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAidW5pZm9ybSB2
ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0dXJlU2l6ZTsi
CisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVy
ZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIK
KyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQo
YV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQb3NpdGlvbiA9
IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09IDEpIgorICAg
ICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXplZFBvc2l0aW9u
Lnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb24g
KiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5hdGUgPSBub3Jt
YWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9OworCitjb25z
dGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0dXJlOyIKKyAg
ICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3JtIG1hdDQgdV9j
b2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2b2lkIG1haW4o
KSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5yID0gdGV4dHVy
ZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAiICAgIHl1di5n
YiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRlKS5yZzsiCisg
ICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5dXYgKiB1X2Nv
bG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsiCisgICAgInVu
aWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0gbWF0NCB1X2Nv
bG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIKKyAg
ICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZvaWQgbWFpbigp
IgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIgPSB0ZXh0dXJl
MkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAiICAgIHl1
di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSku
cmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2
ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3MgUGl4ZWxSYW5n
ZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKworZW51bSBjbGFz
cyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9SXzcwOV8yLAor
ICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtEQ0lfUDMsCisg
ICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhlbFJhbmdlIHBp
eGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQoreworICAgIHN3aXRj
aCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80NDQ0QVlwQ2JD
cjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoKKyAgICBjYXNl
IGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2FzZSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAg
Y2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6Cisj
aWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisj
ZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
XzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5
cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVWSURFT19DT01Q
UkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV9B
R1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQaXhlbFJhbmdl
OjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2Zl
ckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJp
bmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247CisgICAgaWYg
KENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzcwOV8yKSkK
KyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yOworICAgIGlm
IChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl82MDFfNCkp
CisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFfNDsKKyAgICBp
ZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8x
OTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRFXzI0ME1fMTk5
NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9E
Q0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9EQ0lf
UDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1AzOworICAgIGlm
IChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSgpICYm
IENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSkpCisgICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYgKGNhbkxvYWRf
Q29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgpICYmIENGRXF1
YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjApKQorICAgICAg
ICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICByZXR1cm4gVHJh
bnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENvbG9yIHsKKyAg
ICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0IHI7CisgICAg
ICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAgICAgIH0gcmdi
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAgICAgICAgICAg
R0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0geWNiY3I7Cisg
ICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBHTGZsb2F0IGcs
IEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7CisgICAgfQorCisg
ICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBHTGZsb2F0IHNj
YWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8gc2NhbGUgfQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVl
OworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29u
c3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCisg
ICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCisg
ICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwor
ICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIg
R0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
TGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdM
ZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xm
bG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBHTGZs
b2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9h
dENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JNYXRyaXggewor
ICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhl
bFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7CisK
KyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVy
YXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4cHIgWUNiQ3JN
YXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVu
dCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAgICAvLyBUaGUg
Y29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Cisg
ICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0gKEIgLSBZKSAv
ICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKKyAg
ICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNp
ZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQorICAgIC8v
CisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJp
dmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCisg
ICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkgLSAoMiAqICgx
IC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBD
cgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwg
WSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYg
Q3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQu
IFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwg
aGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KKwor
ICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmlj
aWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6
RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3Rv
ciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOworCisg
ICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0gPSAwOworICAg
IHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
OworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9y
OworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZm
aWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAgcm93c1sxXVsy
XSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29l
ZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsKKworICAgIHJv
d3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdG
YWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJdID0gMDsKKyAg
ICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJvd3NbM11bMV0g
PSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOworCisgICAgLy8g
Q29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFu
ZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFu
Z2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJvd051bWJlciA9
IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8mIHJvdyA9IHJv
d3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAgICAgYXV0byYg
eSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAgYXV0byYgdyA9
IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7CisgICAgICAgIGlm
IChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0geCAqIDE2IC8g
MjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3Bl
cmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdM
ZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsx
XSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwK
KyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJn
Yi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAgICAgICAgcm93
c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sy
XVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0YXRpYyBjb25z
dCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBp
eGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQorewor
ICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0
cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsK
KyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8vIE1hdHJpY2Vz
IGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBz
cGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAx
CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhl
bFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlD
YkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5
OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0
LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAx
LjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4g
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYp
LCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2
NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4s
ICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5m
KSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAg
c3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIx
LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAx
LjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9y
Iik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGlu
IHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0
dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHByIHN0YXRpYyBZ
Q2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAw
LjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4
IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRl
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3
aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlk
ZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2
LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxv
dywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5
ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcw
OSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1
LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3
aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5m
KSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAx
NDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAg
MS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBh
cmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3Bl
Y2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAK
KyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4
ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHByIHN0YXRpYyBZ
Q2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAw
LjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9h
dENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0
MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAx
LjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVm
IC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cg
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEy
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAx
LjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1
NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUs
ICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2
NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4s
ICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Y3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29t
cG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAgICAvLyBodHRw
Oi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNvbnN0ZXhwciBz
dGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRl
bywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0
ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwg
IDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJs
YWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAy
NDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
cmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1
NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENv
bG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3Io
MTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1G
dWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRF
IDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgs
IDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwg
ICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNl
IHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
c21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwg
MjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEs
IDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
bWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRpc3BhdGNoX29u
Y2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXko
UGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYw
MVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4
ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVs
bE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFu
Z2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01h
dHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6
OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgp
OworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRl
bywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsK
KyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwg
VHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOworICAg
ICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJh
bnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgp
OworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxs
LCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0
cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5k
bGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KKyAgICBBU1NF
UlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdlID09IFBpeGVs
UmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKKworICAg
IGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRyYW5zZmVyRnVu
Y3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5jdGlvbnMgYXJl
IHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQoKSkKKyAgICAg
ICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rp
b25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1hdHJpY2Vz
LmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRleHQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBpZiAoIW1fY29u
dGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9kaXNwbGF5LCBt
X2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJm1f
eXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZyYW1l
YnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOwor
fQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYShH
cmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3duZXIpCit7Cisg
ICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0ZSB3aXRoIG93
bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5lc3Mgb3IgV2Vi
R0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJpYnV0ZXNbXSA9
IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAgIG93bmVyLm1f
aXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdMX0JBQ0tXQVJE
U19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAgIEVHTF9DT05U
RVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAg
ICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlVTSwKKyAgICAg
ICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdMRGlzcGxheSBk
aXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmlnIGNvbmZpZyA9
IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gRUdMX0Ny
ZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmosIGNvbnRleHRB
dHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkKKyAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KGRpc3BsYXks
IGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rp
c3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1
cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVzdHJveUNvbnRl
eHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29sIHVzZVRleHR1
cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBHTF9URVhUVVJF
XzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKKyAgICBp
ZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJH
TF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgaWYgKGds
OjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNoYWRlcihHTF9W
RVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpDcmVhdGVTaGFk
ZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9IGdsOjpDcmVh
dGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3Zl
cnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAgICAgZ2w6OkRl
bGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hhZGVyKGZyYWdt
ZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3JhbSk7CisgICAg
fSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJlIGNvbXBpbGUt
dGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hh
ZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
Lmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFn
bWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9
IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195dXZWZXJ0ZXhT
aGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCA6IHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRlclNvdXJjZSh2
ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7CisgICAgZ2w6
OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAm
ZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgZ2w6
OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hTaGFkZXIoeXV2
UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0s
IGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3JhbSk7CisgICAg
Ly8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0aWNhbCBwYXJh
bGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRleEJ1ZmZlciA9
IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7CisgICAgYXV0byB5
dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4QnVmZmVyXSB7
CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOworICAgIH0p
OworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwgMSwgMSwgMSwg
LTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgeXV2
VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIHNpemVv
Zih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBHTHVpbnQgZnJh
bWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsK
KyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2ZyYW1lYnVmZmVy
XSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKKyAg
ICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dyYW1pdlJvYnVz
dEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAmc3RhdHVzKTsK
KyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7CisgICAgICAg
IGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09NUElMRV9TVEFU
VVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3RhdHVzID0gMDsK
KyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFkZXIsIEdMX0NP
TVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFpbGVkIHRvIGxp
bms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0dXMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICB5
dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZlckNsZWFudXAu
cmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250ZXh0ID0gY29u
dGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1ZmZlciA9IHl1
dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgbV95
VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3Jh
bSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpH
ZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7CisgICAgbV9jb2xv
ck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3Jh
bSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uID0gZ2w6
OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAgIG1feVRleHR1
cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFt
LCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24g
PSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZVNpemUiKTsK
KyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0cmliTG9jYXRp
b24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlzIGRlbGV0ZWQg
YnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGluIHVzZS4KKyAg
ICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmli
QXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6VmVydGV4QXR0
cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBm
YWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
RmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9ubHkgc3VwcG9y
dHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUgc3VwcG9ydGlu
ZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0gQ1ZQaXhlbEJ1
ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9ybWF0ICE9IGtD
VlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8vIE5PTElOVAor
ICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJp
UGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JN
QVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9B
R1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhlbEZvcm1hdCAh
PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQorI2Vu
ZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENW
Q29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBj
b3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBp
eGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElP
U3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsK
KyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xh
c3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVk
CisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRl
eHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBh
bmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBs
YXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMQ29j
b2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKGltYWdlKTsK
KyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFnZSk7CisKKyAg
ICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBUaGUgb3V0cHV0
VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBlYXJseS1vdXRz
LiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVycm9yIGlzIG5v
dCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFrZVNjb3BlRXhp
dChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGVdIHsK
KyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwor
ICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3Jt
YXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGdsOjpCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0ZSBtZW1vcnkg
Zm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBn
bDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xB
TVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RF
WFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0
LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1
cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBm
cmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAg
ICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8gc291cmNlLgor
ICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUoc3VyZmFjZSwg
MCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1
cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBs
YW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3VyZmFjZUdldEhl
aWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0
ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAgR0x1aW50IHV2
VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUpOworICAgIGF1
dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0geworICAgICAg
ICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7CisgICAgZ2w6OkFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2aWRlb1RleHR1
cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBh
cmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJ
TkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhU
VVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZh
Y2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNF
X1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR0xf
VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChb
ZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29yZTo6ZGVzdHJv
eVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOworICAgIH0pOwor
CisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJnlUZXh0
dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3lUZXh0dXJl
XSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOworICAgIH0pOwor
ICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6QmluZFRleHR1cmUo
dmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZlckFuZEF0dGFj
aElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJnZXQsIEVHTF9J
T1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWln
aHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhhbmRsZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBtYWtlU2NvcGVF
eGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRlc3Ryb3lQYnVm
ZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0pOworCisgICAg
Ly8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVuaWZvcm0xaSht
X3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2RmxpcFlVbmlm
b3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAgZ2w6OlVuaWZv
cm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgsIHlQbGFuZUhl
aWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24s
IHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdlID0gcGl4ZWxS
YW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFuc2ZlckZ1bmN0
aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0PENGU3RyaW5n
UmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRy
aXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JHQk1hdHJpeEZv
clJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbik7CisgICAg
Z2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiwgMSwgR0xf
RkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJhd2luZy4KKyAg
ICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9sYXN0U3VyZmFj
ZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNlU2VlZDsKKyAg
ICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50ZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAgICBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0ZTM5NjBiNmQ3
MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3
dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGlj
c0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9u
IGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRo
ZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENvY29hLgorY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYSgpIGZp
bmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJl
ZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSkg
ZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKEdyYXBoaWNz
Q29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2VlZChHQ0dMdWlu
dCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVTZWVkLmdldCh0
ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBtX293bmVyOwor
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7IG51bGxwdHIg
fTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51bGxwdHIgfTsK
KyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsgbnVsbHB0ciB9
OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9OworICAgIFBsYXRm
b3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGludCBtX3lUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0dXJlVW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3JtTG9jYXRpb24g
eyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07
CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAtMSB9OworICAg
IEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OworICAgIEdDR0xp
bnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAgIEZsaXBZIG1f
bGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1cmZhY2VSZWY+
IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQgeyAwIH07CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVuc2lnbmVkLCBJ
bnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dM
dWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3Bw
CmluZGV4IDkzYzAyMTRmMzlhODE5MjQyODBmMzczYzlhYzc5Mzg2YmQyMzI0NjAuLmU3YzI5ZGQ1
Y2JmZmYxNDRiZDFiODU1MTkxNmJmOGRiNjc0YWYwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcApAQCAtMTc3LDcgKzE3Nyw3IEBAIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxh
dGZvcm1Db25maWcoKSBjCiAgICAgcmV0dXJuIG1fY29uZmlnOwogfQogCi1HQ0dMQU5HTEVMYXll
cjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCitHQ0dM
QU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSYgY29udGV4
dCkKICAgICA6IEdDR0xMYXllcihjb250ZXh0KQogICAgICwgbV9hbmdsZUNvbnRleHQoQU5HTEVD
b250ZXh0OjpjcmVhdGVDb250ZXh0KCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFH
Q0dMQU5HTEVMYXllci5oCmluZGV4IDcwNTc5ZDI4YjgwYmI5NDMwZTg4MzU5NDUzMGIwMjUwZjc4
NDUzMjUuLjc4NzM3ODJjM2ZkMjJjNTBhNTc1MDA1YWFkZTBmNGYwMDBmMmIxYWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFHQ0dMQU5HTEVMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCkBAIC03Niw3ICs3Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgRUdMU3VyZmFjZSBtX3N1cmZhY2UgeyBudWxscHRyIH07CiAgICAg
fTsKIAotICAgIEdDR0xBTkdMRUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Jik7CisgICAgR0NHTEFOR0xFTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRSYp
OwogICAgIHZpcnR1YWwgfkdDR0xBTkdMRUxheWVyKCk7CiAKICAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNw
cAppbmRleCAwMzU3OTQ1OTJkMTZmYmNkZGIxMWQxNTcxYzYzZmNkM2M4YzY0YWE1Li5iN2M3OWUx
Zjg5ZDA2ZWQ4MDczODNlZmVhYTU0NTEwMDBmZThmZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhR0NHTExheWVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgTmljb3NpYSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1HQ0dMTGF5ZXI6OkdDR0xMYXllcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKK0dDR0xMYXllcjo6R0NHTExheWVyKEdyYXBo
aWNzQ29udGV4dEdMVHlwZSYgY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAg
ICwgbV9jb250ZW50TGF5ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4
bWFwL05pY29zaWFHQ0dMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5ZXIuaAppbmRleCA0MzI5OTA0NjA5ODY3NWI3
YmVhYjk3OWYyMTY1Mzc3NWJlMzVlMGEyLi4zYzBhMDIzNGE0ZTZmZmM5Y2Q1MThhYzM2YTY2NDI1
NmU4MThlN2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oCkBAIC0zMCwx
MCArMzAsMTUgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKE5JQ09TSUEpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAj
aW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCiAjaW5jbHVk
ZSA8bWVtb3J5PgogCisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
QU5HTEUuaCIKKyNlbHNlCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHTENvbnRleHQ7CiB9CkBAIC00Myw3
ICs0OCwxMiBAQCBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBHQ0dMTGF5ZXIgOiBwdWJsaWMg
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgR0NHTExheWVyKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJik7CisjaWYgVVNFKEFOR0xFKQorICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEdMVHlwZSA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxz
ZQorICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dEdMVHlwZSA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOworI2VuZGlmCisgICAgZXhwbGljaXQgR0NHTExheWVyKEdyYXBoaWNzQ29u
dGV4dEdMVHlwZSYpOwogCiAgICAgdmlydHVhbCB+R0NHTExheWVyKCk7CiAKQEAgLTU0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRl
eHQ7CisgICAgR3JhcGhpY3NDb250ZXh0R0xUeXBlJiBtX2NvbnRleHQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7CiAKICAgICBSZWY8Q29udGVu
dExheWVyPiBtX2NvbnRlbnRMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCmluZGV4IGI4MzJhMTg2YTQyYzhiZTMyMmE0YzcwODFmNzVkY2Q0OTBjMjdmODguLjJjMGQ5
OTdjZjM4MDE4MTExZGM0NzNhMWVkZmM4NWIzZGY3OGQ4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwyMiAr
MjMsMzA5NSBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkK
KyNpZiBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25z
R0wuaCIKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdMQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAi
VGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5j
bHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVT
LmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNp
ZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5H
TF9FUykKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBV
U0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhR0NHTExheWVyLmgiCisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gq
PiYgZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVI
YXNoKj4qIHNoYXJlZE5hbWVIYXNoOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7
CisgICAgICAgIHNoYXJlZE5hbWVIYXNoID0gbmV3IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVI
YXNoKj47CisgICAgfSk7CisKKyAgICByZXR1cm4gKnNoYXJlZE5hbWVIYXNoOworfQorCitzdGF0
aWMgdm9pZCBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoU2hhZGVyTmFtZUhhc2gqIHNo
YWRlck5hbWVIYXNoKQoreworICAgICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKSA9
IHNoYWRlck5hbWVIYXNoOworfQorCisvLyBIYXNoIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEFOR0xF
IHRyYW5zbGF0b3IvY29tcGlsZXIgdG8gZG8KKy8vIHN5bWJvbCBuYW1lIG1hbmdsaW5nLiBTaW5j
ZSB0aGlzIGlzIGEgc3RhdGljIG1ldGhvZCwgYmVmb3JlCisvLyBjYWxsaW5nIGNvbXBpbGVTaGFk
ZXIgd2Ugc2V0IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcgorLy8gdG8gcG9pbnQgdG8gdGhl
IG1hcCBrZXB0IGJ5IHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLgorCitzdGF0aWMgdWludDY0X3QgbmFtZUhhc2hGb3JTaGFkZXIoY29uc3QgY2hhciogbmFt
ZSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBDU3RyaW5nIG5hbWVBc0NTdHJpbmcgPSBDU3RyaW5nKG5hbWUpOworCisgICAgLy8g
TG9vayB1cCBuYW1lIGluIG91ciBsb2NhbCBtYXAuCisgICAgU2hhZGVyTmFtZUhhc2gqJiBjdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIgPSAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVy
KCk7CisgICAgU2hhZGVyTmFtZUhhc2g6Oml0ZXJhdG9yIGZpbmRSZXN1bHQgPSBjdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXItPmZpbmQobmFtZUFzQ1N0cmluZyk7CisgICAgaWYgKGZpbmRSZXN1
bHQgIT0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGZpbmRSZXN1bHQtPnZhbHVlOworCisgICAgdW5zaWduZWQgaGFzaFZhbHVlID0gbmFtZUFzQ1N0
cmluZy5oYXNoKCk7CisKKyAgICAvLyBDb252ZXJ0IHRoZSAzMi1iaXQgaGFzaCBmcm9tIENTdHJp
bmc6Omhhc2ggaW50byBhIDY0LWJpdCByZXN1bHQKKyAgICAvLyBieSBzaGlmdGluZyB0aGVuIGFk
ZGluZyB0aGUgc2l6ZSBvZiBvdXIgdGFibGUuIE92ZXJmbG93IHdvdWxkCisgICAgLy8gb25seSBi
ZSBhIHByb2JsZW0gaWYgd2UncmUgYWxyZWFkeSBoYXNoaW5nIHRvIHRoZSBzYW1lIHZhbHVlIChh
bmQKKyAgICAvLyB3ZSdyZSBob3BpbmcgdGhhdCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY29u
dGV4dCB3ZQorICAgIC8vIGRvbid0IGhhdmUgdGhhdCBtYW55IHN5bWJvbHMpLgorCisgICAgdWlu
dDY0X3QgcmVzdWx0ID0gaGFzaFZhbHVlOworICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgMzIpICsg
KGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2l6ZSgpICsgMSk7CisKKyAgICBjdXJyZW50
TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNldChuYW1lQXNDU3RyaW5nLCByZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6
IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAg
bV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xMYXllcj4oKnRoaXMpOwor
I2Vsc2UKKyAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXI+KCp0aGlzKTsKKyNlbmRpZgorCisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKwor
ICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmli
dXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAg
ICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgIDo6Z2xHZW5UZXh0dXJl
cygxLCAmbV90ZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOworCisgICAgLy8gQ3JlYXRlIGFuIEZCTy4KKyAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEs
ICZtX2Zibyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8p
OworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIDo6Z2xHZW5UZXh0dXJlcygx
LCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgIDo6Z2xHZW5UZXh0
dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisjZW5kaWYKKworICAgIC8vIENyZWF0
ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0g
bV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewor
ICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBt
X211bHRpc2FtcGxlRkJPOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRE
cmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VT
KQorICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVy
YnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5j
aWwpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7
CisjZW5kaWYKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRl
cHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgfQorCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgOjpnbEVuYWJsZShHTF9W
RVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKKworICAgIGlmIChHTENvbnRleHQ6OmN1cnJlbnQo
KS0+dmVyc2lvbigpID49IDMyMCkgeworICAgICAgICBtX3VzaW5nQ29yZVByb2ZpbGUgPSB0cnVl
OworCisgICAgICAgIC8vIEZyb20gdmVyc2lvbiAzLjIgb24gd2UgdXNlIHRoZSBPcGVuR0wgQ29y
ZSBwcm9maWxlLCBzbyByZXF1ZXN0IHRoYXQgb3VwdXQgdG8gdGhlIHNoYWRlciBjb21waWxlci4K
KyAgICAgICAgLy8gT3BlbkdMIHZlcnNpb24gMy4yIHVzZXMgR0xTTCB2ZXJzaW9uIDEuNTAuCisg
ICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNMXzE1MF9DT1JFX09V
VFBVVCk7CisKKyAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5H
TCBDb3JlIHByb2ZpbGUsIGFuZCB3ZSBuZWVkIGEgVkFPIGZvciByZW5kZXJpbmcuCisgICAgICAg
IC8vIEEgVkFPIGNvdWxkIGJlIGNyZWF0ZWQgYW5kIGJvdW5kIGJ5IGVhY2ggY29tcG9uZW50IHVz
aW5nIEdMIHJlbmRlcmluZyAoVGV4dHVyZU1hcHBlciwgV2ViR0wsIGV0YykuIFRoaXMgaXMKKyAg
ICAgICAgLy8gYSBzaW1wbGVyIHNvbHV0aW9uOiB0aGUgZmlyc3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgY3JlYXRlZCBvbiBhIEdMQ29udGV4dCB3aWxsIGNyZWF0ZSBhbmQgYmluZCBhIFZBTyBm
b3IgdGhhdCBjb250ZXh0LgorICAgICAgICBHQ0dMaW50IGN1cnJlbnRWQU8gPSBnZXRJbnRlZ2Vy
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpWRVJURVhfQVJSQVlfQklORElORyk7CisgICAgICAg
IGlmICghY3VycmVudFZBTykgeworICAgICAgICAgICAgbV92YW8gPSBjcmVhdGVWZXJ0ZXhBcnJh
eSgpOworICAgICAgICAgICAgYmluZFZlcnRleEFycmF5KG1fdmFvKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBsb3dlciB2ZXJzaW9ucyByZXF1ZXN0IHRoZSBjb21w
YXRpYmlsaXR5IG91dHB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgorICAgICAgICBtX2NvbXBp
bGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF9DT01QQVRJQklMSVRZX09VVFBVVCk7CisK
KyAgICAgICAgLy8gR0xfUE9JTlRfU1BSSVRFIGlzIG5lZWRlZCBpbiBsb3dlciB2ZXJzaW9ucy4K
KyAgICAgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworICAgIH0KKyNlbHNlCisgICAg
Ly8gQWRqdXN0IHRoZSBzaGFkZXIgc3BlY2lmaWNhdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciBH
TEVTMyAoaS5lLiBXZWJHTDIgc3VwcG9ydCkgd2FzIHJlcXVlc3RlZC4KKyNpZiBFTkFCTEUoV0VC
R0wyKQorICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCwg
KGF0dHJpYnV0ZXMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9u
OjpXZWJHTDIpID8gU0hfV0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKKyNlbHNlCisgICAg
bV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBTSF9XRUJHTF9T
UEVDKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAg
ICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgc2g6OkluaXRCdWlsdElu
UmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhBdHRyaWJzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9
IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyA9IGdldEludGVn
ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMpOworICAgIEFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdlcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAg
ICBBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdl
cihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMpOworICAgIEFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdl
cihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAg
IEFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKTsKKwor
ICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzID0gMTsKKworICAgIEdDR0xpbnQgcmFuZ2VbMl0geyB9OworICAgIEdD
R0xpbnQgcHJlY2lzaW9uID0gMDsKKyAgICBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkZSQUdNRU5UX1NIQURFUiwgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKKyAgICBBTkdMRVJlc291cmNlcy5G
cmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0gfHwgcHJlY2lzaW9u
KTsKKworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKworICAg
IDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworfQorCitHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOworICAgIGJv
b2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgYXV0byBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewor
ICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgaWYgKG1fZGVw
dGhCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhC
dWZmZXIpOworCisgICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAg
aWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgOjpnbERlbGV0ZUZy
YW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisjZW5kaWYK
KworI2lmIFVTRShDQUlSTykKKyAgICBpZiAobV92YW8pCisgICAgICAgIGRlbGV0ZVZlcnRleEFy
cmF5KG1fdmFvKTsKKyNlbmRpZgorfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YWtlQ29udGV4dEN1cnJlbnQoKQoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25p
Y29zaWFMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjZWxzZQorICAgIHJldHVybiBtX3Rl
eG1hcExheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCit7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworI2lmIFVTRShP
UEVOR0xfRVMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCisjaWYgUExBVEZPUk0oR1RLKQorRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4
dGVuc2lvbnMpIHsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAvLyBnbEdldFN0cmluZ2kg
aXMgbm90IGF2YWlsYWJsZSBvbiBHTEVTMi4KKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVu
aXF1ZTxFeHRlbnNpb25zR0xPcGVuR0xFUz4odGhpcywgIGZhbHNlKTsKKyNlbHNlCisgICAgICAg
IC8vIEZyb20gT3BlbkdMIDMuMiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJl
IHdlIG11c3QgdXNlIGdsR2V0U3RyaW5naS4KKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVu
aXF1ZTxFeHRlbnNpb25zR0xPcGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJz
aW9uKCkgPj0gMzIwKTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsK
K30KKyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11
bGF0ZUV2ZW50Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCit7Cisg
ICAgaWYgKGV2ZW50ID09IFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVy
ZSkKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQoreworfQorCitzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0
ZWRSZXN1bHRzKCkKK3sKKyAgICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3Qg
Y2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQoreworICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOworCisgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBleHRl
bnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAg
ICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikp
IHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb24pOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0
cnVlLgorICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgc2V0Q29udGV4dEF0dHJp
YnV0ZXMoYXR0cnMpOworICAgIH0KKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmICFtX2lzRm9y
V2ViR0wyKSB7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUiKSkgeworICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0g
ZmFsc2U7CisgICAgICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisKKyNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIFRl
bXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZB
TFNFKTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIs
IEdMX0ZBTFNFKTsKKyNlbmRpZgorCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFs
aWFzKQorICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21w
b3NpdG9yVGV4dHVyZSk7CisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7
CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAg
IGdsRmx1c2goKTsKKworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRl
LmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGVsc2UKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICByZXR1cm47CisjZW5kaWYKKworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsK
KyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zdGF0ZS5ib3VuZFRhcmdldChH
TF9URVhUVVJFMCkgPT0gR0xfVEVYVFVSRV8yRCA/IG1fc3RhdGUuYm91bmRUZXh0dXJlKEdMX1RF
WFRVUkUwKSA6IDApOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVy
ZVVuaXQpOworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIDo6Z2xGbHVzaCgpOworfQorCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHMoKQoreworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAoY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeSgpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9
IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJP
ID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICAgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3
RkJPICE9IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAg
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBp
eGVsc0ZvclBhaW50UmVzdWx0cygpOworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAg
ICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdo
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49
IDApOworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bWFya0NvbnRleHRDaGFuZ2VkKCk7CisKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAg
IG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwor
CisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVT
VCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdM
X0RJVEhFUiwgR0xfRkFMU0UpOworICAgIAorICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNo
YXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKworICAgIC8vIEluaXRpYWxpemUgcmVu
ZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0geyAwLCAwLCAwLCAw
IH0sIGNsZWFyRGVwdGggPSAwOworICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7CisgICAgR0xi
b29sZWFuIGNvbG9yTWFza1tdID0geyBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
IH0sIGRlcHRoTWFzayA9IEdMX1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZm
ZmZmZiwgc3RlbmNpbE1hc2tCYWNrID0gMHhmZmZmZmZmZjsKKyAgICBHTGJpdGZpZWxkIGNsZWFy
TWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9D
TEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
CisgICAgOjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAg
ICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOworCisg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuZGVw
dGgpIHsKKyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFy
RGVwdGgpOworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsK
KyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7
CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBH
TF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNp
bCk7CisgICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2ls
TWFzaykpOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFT
SywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKKyAgICAgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICA6
OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xl
YXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisKKyAgICA6OmdsQ2xlYXIo
Y2xlYXJNYXNrKTsKKworICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29s
b3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIDo6Z2xDb2xvck1hc2so
Y29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsK
KyAgICBpZiAoYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNr
KTsKKyAgICB9CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbENsZWFyU3Rl
bmNpbChjbGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9G
Uk9OVCwgc3RlbmNpbE1hc2spOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9C
QUNLLCBzdGVuY2lsTWFza0JhY2spOworICAgIH0KKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKworICAgIGF1dG8gZXJyb3IgPSA6OmdsR2V0
RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0coV2ViR0wsICJGYXRhbDogT3BlbkdMIGVycm9yIGR1cmluZyBHcmFwaGljc0NvbnRleHRH
TCBidWZmZXIgaW5pdGlhbGl6YXRpb24gKCVkKS4iLCBlcnJvcik7CisgICAgICAgIGZvcmNlQ29u
dGV4dExvc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIDo6Z2xGbHVzaCgpOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQ
bGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNo
YWRlcikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVy
dGV4U2hhZGVyKSk7CisgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdt
ZW50U2hhZGVyKSk7CisgICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50
RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisK
KyAgICBIYXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdz
OworICAgIGZvciAoY29uc3QgYXV0byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWlu
Z01hcCkgeworICAgICAgICBjb25zdCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wu
a2V5OworICAgICAgICAvLyBUaGUgdmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBl
YWNoIGluZGV4IG9mIGFuIGFycmF5IHZhcmlhYmxlLgorICAgICAgICAvLyBXZSBvbmx5IHdhbnQg
YSBzaW5nbGUgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBhcnJheS4KKyAgICAgICAgaWYgKHN5
bWJvbE5hbWUuZW5kc1dpdGgoIl0iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIERvbid0IGNvdW50IGJ1aWx0IGluIHZhcnlpbmdzLgorICAgICAgICBpZiAoc3ltYm9sTmFt
ZSA9PSAiZ2xfRnJhZ0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwg
c3ltYm9sTmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWlu
Z01hcC5maW5kKHN5bWJvbE5hbWUpOworICAgICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJh
Z21lbnRFbnRyeS52YXJ5aW5nTWFwLmVuZCgpKQorICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5n
cy5hZGQoc3ltYm9sTmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZhbHVlKTsKKyAgICB9CisKKyAgICBz
aXplX3QgbnVtVmFyeWluZ3MgPSBjb21iaW5lZFZhcnlpbmdzLnNpemUoKTsKKyAgICBpZiAoIW51
bVZhcnlpbmdzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN0ZDo6dmVjdG9yPHNoOjpT
aGFkZXJWYXJpYWJsZT4gdmFyaWFibGVzOworICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVk
VmFyeWluZ3Muc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBj
b21iaW5lZFZhcnlpbmdzLnZhbHVlcygpKQorICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZh
cnlpbmdTeW1ib2wpOworCisgICAgR0NHTGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7CisjaWYg
VVNFKE9QRU5HTF9FUykKKyAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywg
Jm1heFZhcnlpbmdWZWN0b3JzKTsKKyNlbHNlCisgICAgaWYgKG1faXNGb3JXZWJHTDIpCisgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1Zl
Y3RvcnMpOworICAgIGVsc2UgeworICAgICAgICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMgPSAw
OworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFy
eWluZ0Zsb2F0cyk7CisgICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0
cyAvIDQ7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0
IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Cisg
ICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Cisg
ICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRl
eFNoYWRlciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisKKyAgICBIYXNoTWFwPFN0
cmluZywgc2g6OkdMZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOworCisgICAgZm9yIChj
b25zdCBhdXRvJiBlbnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKKyAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OworICAgICAgICB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1l
LmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNp
b24pOworICAgIH0KKworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5
LnVuaWZvcm1NYXApIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBl
bnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOworICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhT
eW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5j
X3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSk7CisgICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wg
IT0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUg
IT0gZW50cnkudmFsdWUuZ2V0KCkucHJlY2lzaW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCA9IHRleHR1cmU7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChw
cm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Cisg
ICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICA6Omds
QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJpbmRCdWZmZXIodGFy
Z2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHTHVp
bnQgZmJvOworICAgIGlmIChidWZmZXIpCisgICAgICAgIGZibyA9IGJ1ZmZlcjsKKyAgICBlbHNl
CisgICAgICAgIGZibyA9IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlz
YW1wbGVGQk8gOiBtX2Zibyk7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUik7
CisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKKyAgICBpZiAoZmJvICE9IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gZmJvOworICAgIH0KK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRh
cmdldCwgcmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0
dXJlLCB0YXJnZXQpOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVk
LCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJs
ZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9y
LCBHQ0dMZW51bSBkZmFjdG9yKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9
ICAgICAgIAorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0
ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdD
R0xlbnVtIGRzdEFscGhhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwg
c3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1
c2FnZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEsIHVzYWdlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnRwdHIgb2Zmc2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQnVmZmVy
U3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOworfQorCitH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
Q0dMZW51bSB0YXJnZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCisgICAgcmV0dXJuIDo6Z2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYg
YiwgR0NHTGNsYW1wZiBhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
Q2xlYXIobWFzayk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ2xlYXJTdGVuY2ls
KHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJv
b2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xl
YW4gYWxwaGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBp
bmcuIER1ZSB0byB0aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKKyAgICAvLyBw
b2ludCBhIGdsb2JhbCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0Lgor
ICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVz
b3VyY2VzKCk7CisgICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFO
R0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rp
b24gPSBuYW1lSGFzaEZvclNoYWRlcjsKKworICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJz
KQorICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVI
YXNoPigpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZv
clNoYWRlcnMuZ2V0KCkpOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKKworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25z
LT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKKworICAgIEFOR0xFUmVz
b3VyY2VzLkhhc2hGdW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOworICAgIG1fY29tcGls
ZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Uu
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0
ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7CisgICAgY29u
c3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRh
dGEoKTsKKyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJD
U3RyaW5nLmxlbmd0aCgpOworCisgICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNo
YWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxu
IiwgZ2V0U2hhZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKFdlYkdM
LCAiLS0tIGJlZ2luIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRy
YW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKKworICAg
IDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5z
bGF0ZWRTaGFkZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7
CisgICAgCisgICAgaW50IGNvbXBpbGVTdGF0dXM7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2
KHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKKworICAgIFNoYWRlclNv
dXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICAv
LyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpn
bEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAg
IGlmIChsZW5ndGgpIHsKKyAgICAgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICAgICAgVmVjdG9y
PEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgICAgICBQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgICAgICBlbnRyeS5sb2cgPSBnZXRV
bm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwor
ICAgIH0KKworICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKKyAgICAgICAgZW50
cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRy
YW5zbGF0b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUu
Iik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hh
ZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEhhc2hNYXA8UGxhdGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFk
ZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgY29uc3QgQ1N0cmlu
ZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7CisgICAgY29uc3Qg
Y2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7CisgICAg
aW50IHNoYWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7CisK
KyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xu
LS0tIGVuZCBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7CisK
KyAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRl
clNvdXJjZUxlbmd0aCk7CisKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgICAg
aW50IGNvbXBpbGVTdGF0dXM7CisKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxF
X1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xf
VFJVRSkgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgTE9HKFdlYkdM
LCAiRGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBzdWNjZWVkZWQuIik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJF
cnJvcjogZGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7CisgICAgfQorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVCht
X3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0
dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJP
KSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Cisg
ICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ3VsbEZh
Y2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhH
Q0dMZW51bSBmdW5jKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xEZXB0aE1h
c2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRl
cihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQorewor
ICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbERldGFjaFNoYWRlcihwcm9n
cmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxl
KEdDR0xlbnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsRGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwg
R0NHTHNpemVpIGNvdW50KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cisg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludHB0ciBvZmZzZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSkpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWlu
dCBpbmRleCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGaW5pc2goKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGbHVzaCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CisgICAgOjpnbEdl
dFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhB
dHRyaWJ1dGVTaXplKTsKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUp
OyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5h
dGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOwor
ICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGlu
ZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRh
dGEoKSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBT
SEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5n
dGgpKTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUu
ZGF0YSgpLCBuYW1lTGVuZ3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBp
bmcgYWN0aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4
LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7
CisjZW5kaWYKKworICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKKyAgICBpbmZvLnR5cGUg
PSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdD
R0xpbnQgc3ltYm9sQ291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5
bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywg
JnN5bWJvbENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hhZGVyU3ltYm9s
Q291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDR0x1aW50IHJhd0lu
ZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcFtpbmRleF0gOiAtMTsKKworICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dy
YW0sIHJhd0luZGV4LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dy
YW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNp
emUpOworCisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FD
VElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBH
THNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdMZW51bSB0
eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5p
Zm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBp
ZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcg
b3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xf
VFlQRV9VTklGT1JNLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKKyAgICAKKyNp
Zm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVu
Z3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZv
cm0gJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRm
OCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgCisg
ICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAg
aW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdDR0xpbnQgc3ltYm9s
Q291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5m
aW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHBy
b2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7
CisgICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJv
Z3JhbSk7CisgICAgfQorICAgIAorICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9s
Q291bnRzID0gcmVzdWx0LT52YWx1ZTsKKyAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8
IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBz
eW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsK
KyAgICAKKyAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgs
IGluZm8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNo
YWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xz
aXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9n
cmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKK30KKworc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG5hbWU7CisgICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFt
ZS51dGY4KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygi
d2ViZ2xfIiwgaGV4KG51bWJlciwgTG93ZXJjYXNlKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VN
YXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xU
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1h
cC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8m
IHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGF1
dG8gc3ltYm9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoc3ltYm9sRW50
cnkgPT0gc3ltYm9sTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgYXV0byYgbWFwcGVkTmFtZSA9IHN5bWJvbEVudHJ5LT52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OworICAgIHJldHVybiBTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0
aCgpKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xO
YW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJv
bFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwor
ICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIGZvciAoR0NHTHNpemVp
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBw
ZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsK
KyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52
YWx1ZSgpOworICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRl
ZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgorICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRT
aGFkZXJNYXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVy
TWFwLmVuZCgpKSB7CisgICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7
CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFw
KGxpbmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFw
cGVkTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgICAg
IG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJz
LnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoc3lt
Ym9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkg
YmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCisgICAg
ICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIg
cHJvZ3JhbS4KKyAgICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCisgICAgICAgICAg
ICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwor
ICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFk
ZXJzLmdldCgpKTsKKworICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hl
ZE5hbWUobmFtZSk7CisKKyAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51
bGxwdHIpOworCisgICAgICAgIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVy
YXRlZE5hbWUsIG5hbWUpOworCisgICAgICAgIHJldHVybiBnZW5lcmF0ZWROYW1lOworICAgIH0K
KworICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9
IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGZvciAoY29uc3QgYXV0
byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9s
RW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQorICAgICAgICAgICAgcmV0dXJu
IHN5bWJvbEVudHJ5LmtleTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7CisgICAgCisgICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNo
YWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYg
KG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsK
KyAgICB9CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNo
YWRlcnMgYWZ0ZXIgbGlua2luZy4KKyAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFw
LmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQo
KSkgeworICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOworICAgICAg
ICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlu
a2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5h
bE5hbWUpCisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgICAg
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hh
ZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1l
KQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgIH0KKworICAg
IGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0
aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxl
ZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55
IHNoYWRlciBwcm9ncmFtLgorCisgICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2li
bHlVbnVzZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGNhY2hlZCAhPSBt
X3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZC0+dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK1N0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAo
c2l6ZV90IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4o
U0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTaGFkZXJTb3Vy
Y2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tp
XSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25z
dCBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0
YXRpY19jYXN0PGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7CisgICAg
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZS5jX3N0cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuYW1lOworfQorCitp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkK
KyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJv
bE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAg
TE9HKFdlYkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJu
IDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkp
OworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGly
ZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICByZXR1cm4gOjpnbEdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIFNldCBhbiBhcmJpdHJh
cnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCisgICAgLy8g
YSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIg
dGhlIGVycm9yLgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdl
IGdvdCBOT19FUlJPUi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsK
KyAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJv
ciA9PSBOT19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOworICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBtb3ZlZEFuRXJyb3I7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRFcnJvcigpCit7CisgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUg
c3ludGhldGljIGVycm9yIGxpc3QgaW4gY2FzZQorICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFs
cmVhZHkgdGhlcmUsIHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCisgICAgICAg
IC8vIGdsR2V0RXJyb3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3Ig
Y29kZSBvbmNlLgorICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAg
ICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOworICAgIH0KKworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKKworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBy
ZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmco
bmFtZSkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKwor
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KworICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVi
dWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30K
KworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30KKwor
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVy
RVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRl
cikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1NoYWRl
cihzaGFkZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRl
eHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7
CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworCisgICAgR0NHTHNpemVpIGNvdW50ID0gMDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICBpZiAoY291bnQgPT0gMikKKyAgICAgICAg
bV9saW5rZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0s
IHNoYWRlcnNbMV0pKTsKKworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQgcGFyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3Rvciwg
R0NHTGZsb2F0IHVuaXRzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBm
IHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBp
bnZlcnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKworICAgIFNoYWRlclNvdXJjZUVudHJ5
IGVudHJ5OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9zaGFkZXJTb3Vy
Y2VNYXAuc2V0KHNoYWRlciwgV1RGTW92ZShlbnRyeSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NH
THVpbnQgbWFzaykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3Rl
bmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVu
Y2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NH
TGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2ls
T3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRl
cmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUs
IGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZv
cm0yZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZihs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBh
cnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2Z2
KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGludCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24s
IGFycmF5LmJ1ZlNpemUsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2
MSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbnQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0z
aShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
YXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNp
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9y
bTRpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJh
eSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJy
YXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAx
NikpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRy
YW5zcG9zZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVc2VQcm9ncmFtKHBy
b2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0LCAxPiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRh
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NH
THVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRy
aWIyZihpbmRleCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBp
bmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVy
dGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdCwgMz4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXku
ZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYy
LCBHQ0dMZmxvYXQgdjMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2
Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkg
c3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRl
eCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWln
aHQpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVWZXJ0ZXhBcnJheSgpCit7CisgICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0
ZXhBcnJheU9FUygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVW
ZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQoreworICAgIGdldEV4dGVuc2lvbnMo
KS5kZWxldGVWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit7
CisgICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3Jt
R0xPYmplY3QgYXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmJpbmRWZXJ0ZXhBcnJheU9F
UyhhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEJv
b2xlYW52KHBuYW1lLCB2YWx1ZS5kYXRhKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lKQoreworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dM
U3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmRhdGEp
OworfQorCitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChH
Q0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0NHTGludDY0IHZh
bHVlID0gMDsKKyAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11
c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0
aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAgIC8vIDo6
Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitH
Q0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0g
cG5hbWUsIEdDR0x1aW50IGluZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAg
VU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7CisgICAgLy8gRklYTUUg
MTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRv
IHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRl
eHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KKyAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1l
LCBpbmRleCwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQoreworICAg
IEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVCkKKyAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5D
SUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwor
ICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBH
Q0dMaW50IHZhbHVlID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAm
dmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChBQ1RJ
VkVfQVRUUklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAh
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICAqdmFsdWUg
PSByZXN1bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0
aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkpOworICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYg
c3ltYm9sQ291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFt
KS0+dmFsdWU7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxk
IGEgZmlsdGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcgb2YKKyAgICAvLyBvdXIgaW50ZXJuYWwg
YXR0cmlidXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUg
T3BlbkdMLgorICAgIEdDR0xpbnQgYXR0cmlidXRlQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7CisgICAg
Zm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICBB
Y3RpdmVJbmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwg
aW5mbyk7CisgICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0
dHJpYnV0ZUluZGV4TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gRG8gdGhlIHNh
bWUgZm9yIHVuaWZvcm1zLgorICAgIEdDR0xpbnQgdW5pZm9ybUNvdW50ID0gMDsKKyAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Cisg
ICAgZm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICAgICAg
QWN0aXZlSW5mbyBpbmZvOworICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBp
LCBpbmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVk
VG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAqdmFs
dWUgPSBzeW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBM
T0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEo
KSk7CisKKyAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAx
MjM0NTY3ODlhYmNkZWZBQkNERUZdKyIpOworCisgICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRM
b2c7CisgICAgCisgICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8g
dGhlIHNoYWRlciBzb3VyY2UgdGhhdAorICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBj
b21waWxlcnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKKyAgICAvLyB0aGlzIHdhcm5pbmcg
dG8gdGhlIHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAorICAgIC8v
IGlzIGNhdXNpbmcgaXQuCisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
YW5nbGVXYXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRl
cjUnIGlzIG5vdCBzdXBwb3J0ZWRcbiJfcyB9OworICAgIGludCBzdGFydEZyb20gPSBsb2cuc3Rh
cnRzV2l0aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsK
KyAgICBpbnQgbWF0Y2hlZExlbmd0aCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGludCBzdGFy
dCA9IHJlZ0V4cC5tYXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOworICAgICAg
ICBpZiAoc3RhcnQgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwcm9jZXNz
ZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkp
OworICAgICAgICBzdGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7CisKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hl
ZExlbmd0aCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3lt
Ym9sTmFtZShzaGFkZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7CisgICAgICAgIExPRyhXZWJH
TCwgIkRlbWFuZ2xpbmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBt
YXBwZWRTeW1ib2wudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQo
bWFwcGVkU3ltYm9sKTsKKyAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+
KGxvZy5sZW5ndGgoKSkpOworCisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5n
KHN0YXJ0RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2ViR0ws
ICJVbm1hbmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBH
TGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5m
byhsZW5ndGgpOworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZz
aXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBHQ0dMc2l6ZWkgY291bnQ7CisgICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAm
Y291bnQsIHNoYWRlcnMpOworCisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVy
cywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQorCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xH
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAg
IHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
QVNTRVJUKHNoYWRlcik7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisKKyAgICBjb25zdCBhdXRv
JiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgCisgICAgc3dp
dGNoIChwbmFtZSkgeworICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKKyAgICBjYXNlIFNIQURFUl9U
WVBFOgorICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgJnZhbHVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIElORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIp
Lmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RI
OgorICAgICAgICB2YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX0VOVU0pOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgY29u
c3QgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBpZiAoIWVu
dHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBHTGludCBsZW5n
dGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwg
Jmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisK
KyAgICBHTHNpemVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsK
KyAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0
YSgpKTsKKworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07
CisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8u
ZGF0YSgpLCBzaXplKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFk
ZXIpOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3Vy
Y2U7Cit9CisKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1l
dGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEdDR0xmbG9hdCB2
YWx1ZSA9IDAuZjsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7
CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldFVuaWZvcm1p
dihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5p
Zm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVk
U3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7Cisg
ICAgTE9HKFdlYkdMLCAiOjpnZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1
cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCitHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHZvaWQq
IHBvaW50ZXIgPSAwOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5h
bWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBwaXhlbHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgaWYgKHR5cGUgPT0gSEFMRl9G
TE9BVF9PRVMpCisgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgorCisg
ICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUg
Zm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2lu
ZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVlZAorICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBh
cyB3ZSBkbyBpbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgorICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEFMUEhBOgorICAgICAgICAgICAgLy8g
V2UgYXJlIHVzaW5nIEdMX1JFRCB0byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdl
bGwuCisgICAgICAgICAgICBmb3JtYXQgPSBSRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xf
UkcgdG8gYmFjayBHTF9MVU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAg
ICAgICAgICAgIGZvcm1hdCA9IFJHOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1F
OiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGlu
ZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4K
KyAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvbXByZXNzZWRUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKworUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdWludCBv
ID0gMDsKKyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAg
IHJldHVybiBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVy
KCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwor
ICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVNoYWRl
cigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVS
VEVYX1NIQURFUik7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuVGV4dHVyZXMo
MSwgJm8pOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7CisgICAgcmV0dXJu
IG87Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3Jt
R0xPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8pIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3Qg
Z29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2luZworICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVy
IGl0IGdldHMgZGVsZXRlZC4KKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAw
KTsKKyAgICB9CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3Zl
KHByb2dyYW0pOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
cmVuZGVyYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0
byYga2V5VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRl
eHR1cmU7CisgICAgfSk7CisgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3Ip
Cit7CisgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhl
dGljIGVycm9yIGxpc3QgdG8KKyAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBz
byBhIGNhbGxlciB0byBnZXRFcnJvciB3aWxsIGdldAorICAgIC8vIGFueSBlcnJvcnMgZnJvbSBn
bEVycm9yIGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemluZy4KKyAgICBtb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJy
b3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0
KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQor
ICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQoKQoreworICAgIGZvciAoYXV0byogY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRl
eHQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0
Q2hhbmdlZE5vdGlmaWNhdGlvbigpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9W
ZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1v
ZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkK
K3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZp
cnN0LCBjb3VudCwgcHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKKyAg
ICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQorewor
ICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlz
b3IpOworfQorCisjaWYgSEFWRShPUEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRl
eCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4KGluZGV4KTsKK30KKyNlbmRpZgorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29u
c3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgbGVuZ3RoKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKKyAgICBVTlVTRURfUEFSQU0odXNhZ2UpOworICAgIFVOVVNFRF9QQVJBTShzcmNP
ZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBk
c3RCeXRlT2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdD
R0x1aW50IGxlbmd0aCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oZHN0Qnl0ZU9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY0RhdGEpOworICAgIFVO
VVNFRF9QQVJBTShzcmNPZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCisj
aWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xl
bnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVP
ZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFy
Z2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOworfQorI2Vs
c2UKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xl
bnVtLCBHQ0dMZW51bSwgR0NHTGludHB0ciwgR0NHTGludHB0ciwgR0NHTHNpemVpcHRyKQorewor
fQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+
IGRhdGEpCit7CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgR0NHTHZvaWQq
IHB0ciA9IDo6Z2xNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBH
cmFwaGljc0NvbnRleHRHTDo6TUFQX1JFQURfQklUKTsKKyAgICBpZiAoIXB0cikKKyAgICAgICAg
cmV0dXJuOworICAgIG1lbWNweShkYXRhLmRhdGEsIHB0ciwgZGF0YS5idWZTaXplKTsKKyAgICBp
ZiAoITo6Z2xVbm1hcEJ1ZmZlcih0YXJnZXQpKQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oZGF0YSk7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50
IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dM
aW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmls
dGVyKQoreworICAgIFVOVVNFRF9QQVJBTShzcmNYMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kw
KTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWDEpOworICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGRzdFgwKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTApOworICAgIFVO
VVNFRF9QQVJBTShkc3RYMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAgICBVTlVTRURf
UEFSQU0obWFzayk7CisgICAgVU5VU0VEX1BBUkFNKGZpbHRlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IGxheWVyKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAg
IFVOVVNFRF9QQVJBTShhdHRhY2htZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dHVyZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMpCit7CisgICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQor
eworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50
cyk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVT
RURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3JjKTsKK30KKworI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdM
X0VTXzMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKQoreworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldElu
dGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5V
U0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAg
IFVOVVNFRF9QQVJBTShidWZTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKKyNlbmRp
ZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZCht
X3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisjZWxzZQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSwgR0NHTGVudW0sIEdD
R0xlbnVtLCBHQ0dMU3BhbjxHQ0dMaW50PikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9m
ZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2
ZWwpOworICAgIFVOVVNFRF9QQVJBTSh4b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeW9mZnNl
dCk7CisgICAgVU5VU0VEX1BBUkFNKHpvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAg
ICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURf
UEFSQU0oaGVpZ2h0KTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKG5h
bWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCit7CisgICAgVU5VU0VE
X1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odjApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50
IHYwLCBHQ0dMdWludCB2MSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2
MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7CisgICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAgICBVTlVTRURfUEFSQU0odjEpOworICAgIFVO
VVNFRF9QQVJBTSh2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWlu
dCB2MiwgR0NHTHVpbnQgdjMpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBV
TlVTRURfUEFSQU0odjApOworICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5VU0VEX1BBUkFN
KHYyKTsKKyAgICBVTlVTRURfUEFSQU0odjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShs
b2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRh
dGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBV
TlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
ZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0
cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAg
IFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwor
ICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50
IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VE
X1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh6KTsKKyAgICBVTlVTRURfUEFSQU0odyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVT
RURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBH
Q0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQoreworICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJB
TSh5KTsKKyAgICBVTlVTRURfUEFSQU0oeik7CisgICAgVU5VU0VEX1BBUkFNKHcpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwg
R0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRy
IG9mZnNldCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShz
aXplKTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0cmlkZSk7
CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBH
Q0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAgIFVOVVNFRF9QQVJBTShzdGFy
dCk7CisgICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAg
ICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdD
R0xlbnVtPiBidWZzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xp
bnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQoreworICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBV
TlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xT
cGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7
CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xl
bnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0o
ZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50
IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQoreworICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBV
TlVTRURfUEFSQU0oZGVwdGgpOworICAgIFVOVVNFRF9QQVJBTShzdGVuY2lsKTsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorewor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVR
dWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQoreworICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7
Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRm
b3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVy
eShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQoreworICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQorewor
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisKKyAg
ICByZXR1cm4gMDsKK30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1
ZXJ5T2JqZWN0dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIHJl
dHVybiAwOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTYW1wbGVyKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBV
TlVTRURfUEFSQU0oc2FtcGxlcik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odW5pdCk7CisgICAgVU5VU0VE
X1BBUkFNKHNhbXBsZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1w
bGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURf
UEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2Ft
cGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0o
cGFyYW0pOworfQorCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBs
ZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Cisg
ICAgcmV0dXJuIDAuZjsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFt
ZSkKKworeworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5h
bWUpOworICAgIHJldHVybiAwOworfQorCitHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQorewor
ICAgIFVOVVNFRF9QQVJBTShjb25kaXRpb24pOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisK
KyAgICByZXR1cm4gMDsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzU3luYyhHQ0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
U3luYyhHQ0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKK30KKworR0NH
TGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5
bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIFVOVVNF
RF9QQVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJB
TSh0aW1lb3V0KTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xp
bnQ2NCB0aW1lb3V0KQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFS
QU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsKK30KKworR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5h
bWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
CisgICAgcmV0dXJuIDA7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxh
dGZvcm1HTE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaWQpOworfQorCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9y
bUdMT2JqZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTShpZCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVk
YmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgaWQpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRp
dmVNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShwcmltaXRpdmVNb2RlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQoreworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBH
Q0dMZW51bSBidWZmZXJNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBV
TlVTRURfUEFSQU0odmFyeWluZ3MpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXJNb2RlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
KQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRi
YWNrKCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNm
b3JtRmVlZGJhY2soKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
QnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWlu
dCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dM
c2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJB
TShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShzaXplKTsKK30KKworVmVjdG9yPEdDR0x1aW50
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQoreworICAg
IFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybU5hbWVzKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25z
dCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVmVjdG9yPEdDR0xpbnQ+IHJlc3VsdCh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOworI2lm
IEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCisgICAgQVNTRVJUKHByb2dyYW0p
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5z
aXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHJlc3VsdC5kYXRhKCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
KyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0dDR0x1aW50IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJv
Z3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja05hbWUpOworICAgIHJldHVybiAw
OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1C
bG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJ
bmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVu
aWZvcm1CbG9ja0luZGV4KTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tCaW5kaW5nKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURf
UEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tC
aW5kaW5nKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMo
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJB
TSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGZv
cm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxv
Y2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
cHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICBVTlVT
RURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSAs
IEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtLCBH
Q0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVt
LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
aW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NH
TGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51
bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQorewor
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
Tik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0lu
c3RhbmNlZEFOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48
Y29uc3QgR0NHTHNpemVpPiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQor
eworICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1l
bnRzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTHNpemVpKQoreworICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NH
TGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQoreworICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNh
ZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKK3sK
KyAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIg
fHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOworICAgIFVu
aXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CisgICAgdW5zaWduZWQgc2l6ZSA9IDA7Cisg
ICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CisgICAgICAgIFBpeGVsU3RvcmVQYXJh
bXMgcGFyYW1zOworICAgICAgICBwYXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50Owor
ICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7
CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVk
IGNoYXI+KHNpemUpOworICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwg
c2l6ZSk7CisgICAgfQorICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4oemVy
by5nZXQoKSwgc2l6ZSkpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTEwMyw2
ICszMTc3LDYgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW4KICAgICByZXR1cm4gcmVhZENvbXBv
c2l0ZWRSZXN1bHRzKCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30KIAotI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDZjODFlYTdhODg5NTQwZDUz
ZTA2NWQ0NTM0YjQ2OTU2ZjIwY2ZhMWYuLmJhOWQ1YWY5MGQ3NDg1YTc2NDM1NjkyZGI1NjBhYmJl
OWQ4MTUwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC0yNSw1MyAr
MjUsMTcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoV0VCR0wpCisjaWYgRU5BQkxF
KFdFQkdMKSAmJiAhVVNFKEFOR0xFKQogCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIK
KyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKICNpbmNs
dWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCIKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIK
LSNlbmRpZgotCi0jaWYgVVNFKENBKQotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgotI2Vu
ZGlmCi0KLSNpZiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiQU5HTEVVdGlsaXRpZXMuaCIKLSNlbHNl
Ci0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xP
cGVuR0xDb21tb24uaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIlNj
b3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QuaCIKLSNlbmRpZgotCi0vLyBGSVhNRTogRmlu
ZCBhIGJldHRlciB3YXkgdG8gYXZvaWQgdGhlIG5hbWUgY29uZmxpY3Rpb24gZm9yIE5PX0VSUk9S
LgotI2lmIFBMQVRGT1JNKFdJTikKLSN1bmRlZiBOT19FUlJPUgotI2VsaWYgUExBVEZPUk0oR1RL
KQotLy8gVGhpcyBkZWZpbmUgaXMgZnJvbSB0aGUgWDExIGhlYWRlcnMsIGJ1dCBpdCdzIHVzZWQg
YmVsb3csIHNvIHdlIG11c3QgdW5kZWZpbmUgaXQuCi0jdW5kZWYgVkVSU0lPTgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShDT0NPQSkKLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLU9CSkNfQ0xBU1MgV2Vi
R0xMYXllcjsKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQogI2lmIFVTRShOSUNPU0lBKQog
bmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgR0NHTExheWVyOwpAQCAtODAsOSArNDQsNyBAQCBj
bGFzcyBHQ0dMTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV4dGVuc2lvbnNH
TDsKLSNpZiBVU0UoQU5HTEUpCi1jbGFzcyBFeHRlbnNpb25zR0xBTkdMRTsKLSNlbGlmIFVTRShP
UEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVT
OwogI2VsaWYgVVNFKE9QRU5HTCkKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTDsKQEAgLTk3LDI4
ICs1OSwxMSBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAKIHR5cGVk
ZWYgSGFzaE1hcDxDU3RyaW5nLCB1aW50NjRfdD4gU2hhZGVyTmFtZUhhc2g7CiAKKy8vIEJhc2Ug
Y2xhc3MgZm9yIEdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIE9wZW5HTCBvciBP
cGVuR0wgRVMuCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCA6
IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTAogewogcHVibGljOgogICAgIHZpcnR1YWwgfkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKCk7Ci0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0IG92ZXJyaWRlOwotI2lmIFVTRShBTkdMRSkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdDsKLSAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Q7Ci0gICAgR0NHTGVudW0g
ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICBzdGF0aWMgR0NHTGVudW0gZHJhd2lu
Z0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2lu
Z1RhcmdldCk7Ci0gICAgc3RhdGljIEdDR0xpbnQgRUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOwotICAgIGVudW0gY2xh
c3MgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgewotICAgICAgICAvLyBSZWxlYXNlcyBj
dXJyZW50IGNvbnRleHQgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgY2FsbHMgZG9uZSBp
biB0aGUgdGhyZWFkLgotICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCi0gICAgICAgIC8v
IFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMIGNhbGxzIGRvbmUgaW4gdGhlIHRocmVhZC4KLSAgICAgICAgUmVsZWFzZVRocmVhZFJlc291
cmNlcywKLSAgICAgICAgLy8gUmVsZWFzZXMgYWxsIGdsb2JhbCBzdGF0ZS4gU2hvdWxkIGJlIHVz
ZWQgb25seSBhZnRlciBhbGwgZGVwZW5kaW5nIG9iamVjdHMgaGF2ZQotICAgICAgICAvLyBiZWVu
IHJlbGVhc2VkLgotICAgICAgICBUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzCi0g
ICAgfTsKLSAgICBzdGF0aWMgYm9vbCByZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJl
YWRSZXNvdXJjZUJlaGF2aW9yKTsKLSNlbmRpZgogCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5n
IG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBw
cmVwYXJlVGV4dHVyZSgpOwpAQCAtMTMyLDE1ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBFcXVp
dmFsZW50IHRvIDo6Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBwaXhlbHM9PTAgd2l0aCBubyBhbGxv
Y2F0aW9uLgogICAgIHZvaWQgdGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CiAKLSNpZiAhVVNFKEFOR0xFKQotICAgIC8vIEhlbHBl
ciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXpl
ZCB0byAwLgotICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVk
LgotICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQg
c2V0dGluZy4KICAgICBib29sIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMaW50IGFsaWdubWVudCA9IDQpOwotI2VuZGlmCiAKICAgICBib29sIGlz
R0xFUzJDb21wbGlhbnQoKSBjb25zdCBmaW5hbDsKLQogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg
IC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCiAgICAgLy8KQEAgLTIwNiw5ICsxNDUsNyBAQCBw
dWJsaWM6CiAgICAgR0NHTGludDY0IGdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CiAgICAgR0NHTGludDY0IGdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGlu
ZGV4KSBmaW5hbDsKICAgICBHQ0dMaW50IGdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwotI2lmICFVU0UoQU5HTEUpCiAgICAgdm9pZCBn
ZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAg
ICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwogICAg
IFN0cmluZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3RbMl0sIEdDR0xzaXpl
aSwgY29uc3QgU3RyaW5nJik7CiAgICAgR0NHTGludCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwpAQCAtMjg2LDEwICsyMjMs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCkgZmlu
YWw7CiAgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7Ci0j
aWYgIVVTRShBTkdMRSkKICAgICBib29sIGNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xP
YmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25z
dDsKICAgICBib29sIHByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRl
ciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7Ci0jZW5kaWYKIAogICAg
IHZvaWQgdmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4KSBmaW5hbDsK
ICAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0LCAxPiB2YWx1ZXMpIGZpbmFsOwpAQCAtMzE3LDEwICsyNTIsOCBAQCBwdWJsaWM6
CiAKICAgICAvLyA9PT09PT09PT09IFdlYkdMMiBlbnRyeSBwb2ludHMuCiAKLSNpZiAhVVNFKEFO
R0xFKQogICAgIHZvaWQgYnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNvbnN0IHZvaWQqIGRh
dGEsIEdDR0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxlbmd0aCk7
CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RC
eXRlT2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1
aW50IGxlbmd0aCk7Ci0jZW5kaWYKICAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVt
IHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQs
IEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKSBmaW5hbDsKIAogICAg
IHZvaWQgZ2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0
LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CkBAIC00NDUsOSArMzc4LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIm
KSBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENvbXBvc2l0ZWRSZXN1
bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImKSBmaW5hbDsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQotICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFT
YW1wbGUoKSBmaW5hbDsKLSNlbmRpZgogCiAgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwogICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CkBAIC00NTYsOSAr
Mzg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgcHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50
KTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBkaXNwbGF5V2FzUmVj
b25maWd1cmVkKCk7Ci0jZW5kaWYKIAogICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9v
bCkgZmluYWw7CiAKQEAgLTQ4NCwxMiArNDExLDggQEAgcHVibGljOgogICAgIC8vIGFsbCBtZXRo
b2RzIGl0IGNvbnRhaW5zIG1heSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0ZWQgb24gdGhlCiAgICAg
Ly8gY3VycmVudCBoYXJkd2FyZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnNHTDo6c3VwcG9ydHMoKSB0
bwogICAgIC8vIGRldGVybWluZSB0aGlzLgotI2lmICFVU0UoQU5HTEUpCiAgICAgLy8gVXNlIGNv
dmFyaWFudCByZXR1cm4gdHlwZSBmb3IgT1BFTkdML09QRU5HTF9FUwogICAgIEV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbiYgZ2V0RXh0ZW5zaW9ucygpIGZpbmFsOwotI2Vsc2UKLSAgICBFeHRlbnNp
b25zR0wmIGdldEV4dGVuc2lvbnMoKSBmaW5hbDsKLSNlbmRpZgogCiAgICAgdm9pZCBzaW11bGF0
ZUV2ZW50Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcpIG92ZXJyaWRlOwogCkBA
IC00OTcsMzEgKzQyMCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5
KCkgb3ZlcnJpZGU7CiAKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0g
ICAgR3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBzdGF0
aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYs
IFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4
dCYpOwotCi0jaWYgVVNFKEFOR0xFKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlz
cGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQTEFZOwotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgbG93
UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5cGUsIC0xKTsKLSAgICBj
b25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQZXJmb3JtYW5jZURpc3Bs
YXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwotI2VuZGlmCi0jZW5kaWYK
LQogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgR3JhcGhpY3NDb250ZXh0
R0xJT1N1cmZhY2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47Ci0gICAgRUdMRGlzcGxheSBtX2Rpc3Bs
YXlPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRl
eHRPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBt
X2NvbmZpZ09iaiB7IG51bGxwdHIgfTsKLSNlbmRpZgorCiAgICAgR0NHTHVpbnQgbV90ZXh0dXJl
IHsgMCB9OwogCi1wcml2YXRlOgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGlj
IGVudHJ5IHBvaW50cyB0aGF0IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgLy8gQ2FsbGVk
IG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIG9mIEV4dGVuc2lvbnNHTCB0aGF0
IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBX
QVJOX1VOVVNFRF9SRVRVUk47CkBAIC01NDcsMjQgKzQ1MCw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmID0gSW50UmVj
dCgpKTsKICAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1
aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwog
Ci0jaWYgVVNFKEFOR0xFKQotICAgIGJvb2wgcmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCk7
Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7Ci0gICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7Ci0gICAg
c3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXks
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEU7Ci0jZW5kaWYKLSNpZiBVU0UoQU5HTEUpCi0gICAgLy8gUmV0dXJucyBm
YWxzZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgotICAgIGJvb2wg
d2FpdEFuZFVwZGF0ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgLy8g
UGxhdGZvcm0gc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKLSAgICBz
dGF0aWMgdm9pZCBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKLSNlbmRpZgogCi0j
aWYgIVVTRShBTkdMRSkKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBVbmlxdWVSZWY8c2g6
OlNoYWRlclZhcmlhYmxlPj4gU2hhZGVyU3ltYm9sTWFwOwogCiAgICAgc3RydWN0IFNoYWRlclNv
dXJjZUVudHJ5IHsKQEAgLTYzMSwxMiArNTE3LDggQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRlck5hbWVIYXNoPiBuYW1lSGFzaE1hcEZvclNoYWRl
cnM7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKIAotI2lmIFVTRShBTkdMRSkKLSAgICBmcmllbmQg
Y2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnNH
TEFOR0xFPiBtX2V4dGVuc2lvbnM7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVO
R0xfRVMpCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVTOwogICAgIGZyaWVu
ZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xDb21tb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4
dGVuc2lvbnNHTE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CkBAIC02NDgsOSArNTMwLDcgQEAgcHJp
dmF0ZToKIAogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+PiBtX3ZlcnRleEFycmF5OwogCi0jaWYg
IVVTRShBTkdMRSkKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOwotI2VuZGlmCiAK
ICAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CkBAIC02NTgsNTQgKzUzOCwxNCBAQCBwcml2YXRlOgogICAgIEdDR0x1aW50IG1faW50ZXJtZWRp
YXRlVGV4dHVyZSB7IDAgfTsKICNlbmRpZgogCi0jaWYgIVVTRShBTkdMRSkgJiYgVVNFKE9QRU5H
TF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogICAgIEdDR0x1aW50IG1fZGVwdGhCdWZmZXIgeyAw
IH07CiAgICAgR0NHTHVpbnQgbV9zdGVuY2lsQnVmZmVyIHsgMCB9OwogI2VuZGlmCiAgICAgR0NH
THVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CiAKICAgICBHQ0dMdWludCBtX2ludGVy
bmFsQ29sb3JGb3JtYXQgeyAwIH07Ci0jaWYgVVNFKEFOR0xFKQotICAgIEdDR0x1aW50IG1faW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgeyAwIH07Ci0jZW5kaWYKLSAgICBzdHJ1Y3QgR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZSB7Ci0gICAgICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsK
LSAgICAgICAgR0NHTHVpbnQgYm91bmREcmF3RkJPIHsgMCB9OwotICAgICAgICBHQ0dMZW51bSBh
Y3RpdmVUZXh0dXJlVW5pdCB7IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCB9OwotCi0gICAg
ICAgIHVzaW5nIEJvdW5kVGV4dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCi0gICAgICAgICAg
ICBzdGQ6OnBhaXI8R0NHTHVpbnQsIEdDR0xlbnVtPiwKLSAgICAgICAgICAgIEludEhhc2g8R0NH
TGVudW0+LAotICAgICAgICAgICAgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxH
Q0dMdWludD4sCi0gICAgICAgICAgICBQYWlySGFzaFRyYWl0czxXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+Ci0gICAgICAgID47Ci0gICAgICAgIEJvdW5kVGV4dHVyZU1hcCBib3Vu
ZFRleHR1cmVNYXA7Ci0gICAgICAgIEdDR0x1aW50IGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25z
dCB7IHJldHVybiBib3VuZFRleHR1cmUoYWN0aXZlVGV4dHVyZVVuaXQpOyB9Ci0gICAgICAgIEdD
R0x1aW50IGJvdW5kVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1
cmVVbml0KTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5k
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgR0NHTHVpbnQgY3VycmVudEJv
dW5kVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQp
OyB9Ci0gICAgICAgIEdDR0xlbnVtIGJvdW5kVGFyZ2V0KEdDR0xlbnVtIHRleHR1cmVVbml0KSBj
b25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJl
TWFwLmZpbmQodGV4dHVyZVVuaXQpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5k
VGV4dHVyZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVl
LnNlY29uZDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CiAKLSAgICAgICAgdm9p
ZCBzZXRCb3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQsIEdDR0x1aW50IHRleHR1cmUs
IEdDR0xlbnVtIHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgYm91bmRUZXh0dXJlTWFw
LnNldCh0ZXh0dXJlVW5pdCwgc3RkOjptYWtlX3BhaXIodGV4dHVyZSwgdGFyZ2V0KSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8
R0NHTHVpbnQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgICAgIFRleHR1cmVTZWVkQ291bnQgdGV4dHVyZVNlZWRD
b3VudDsKLSAgICB9OwogCiAgICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBtX3N0YXRlOwogCkBA
IC03MTQsMTYgKzU1NCw2IEBAIHByaXZhdGU6CiAgICAgR0NHTHVpbnQgbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKICAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIgeyAwIH07CiAKLSNpZiBVU0UoQU5HTEUpCi0gICAgLy8gRm9yIHByZXNlcnZlRHJhd2lu
Z0J1ZmZlcjp0cnVlIHdpdGhvdXQgbXVsdGlzYW1wbGluZy4KLSAgICBHQ0dMdWludCBtX3ByZXNl
cnZlRHJhd2luZ0J1ZmZlclRleHR1cmUgeyAwIH07Ci0gICAgLy8gQXR0YWNoZXMgbV90ZXh0dXJl
IHdoZW4gbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIGlzIG5vbi16ZXJvLgotICAgIEdD
R0x1aW50IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPIHsgMCB9OwotICAgIC8vIFF1ZXJpZWQg
YXQgZGlzcGxheSBzdGFydHVwLgotICAgIEVHTGludCBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFy
Z2V0IHsgLTEgfTsKLQotI2VuZGlmCi0KICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNp
emVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0NHTGVudW0+IG1fc3ludGhldGljRXJyb3Jz
OwogCkBAIC03NDQsMjkgKzU3NCw4IEBAIHByaXZhdGU6CiAjaWYgVVNFKENBSVJPKQogICAgIFBs
YXRmb3JtR0xPYmplY3QgbV92YW8geyAwIH07CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIC8vIEJhY2tpbmcgc3RvcmUgZm9yIHRoZSB0aGUgYnVmZmVyIHdoaWNoIGlzIGV2ZW50
dWFsbHkgdXNlZCBmb3IgZGlzcGxheS4KLSAgICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZl
ciA9PSBmYWxzZSwgdGhpcyBpcyB0aGUgZHJhd2luZyBidWZmZXIgYmFja2luZyBzdG9yZS4KLSAg
ICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9PSB0cnVlLCB0aGlzIGlzIGJsaXR0ZWQg
dG8gZHVyaW5nIGRpc3BsYXkgcHJlcGFyZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNl
PiBtX2Rpc3BsYXlCdWZmZXJCYWNraW5nOwotICAgIHZvaWQqIG1fZGlzcGxheUJ1ZmZlclBidWZm
ZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgYm9vbCBtX3N3
aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uIHsgZmFsc2UgfTsKLSAgICBTY29wZWRI
aWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0IG1faGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdDsKLSNl
bmRpZgotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFPiBtX2N2OwotI2VuZGlmCi0jaWYgVVNF
KEFOR0xFKQotICAgIGJvb2wgbV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxpbWl0ID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4UGVuZGluZ0ZyYW1lcyA9IDM7Ci0g
ICAgc2l6ZV90IG1fb2xkZXN0RnJhbWVDb21wbGV0aW9uRmVuY2UgeyAwIH07Ci0gICAgU2NvcGVk
R0xGZW5jZSBtX2ZyYW1lQ29tcGxldGlvbkZlbmNlc1ttYXhQZW5kaW5nRnJhbWVzXTsKLSNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3MzBkNmQzNjdmMWY5NTQ0NWIwYTc5YzE3NGRhODhhM2VlNTFjYjljLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyODg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCi0KLSNpZiBFTkFC
TEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCi0KLSNpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCi0jZWxzZQotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9w
ZW5HTC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
Zy5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0j
aW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpZiBVU0UoTElCRVBP
WFkpCi0jaW5jbHVkZSAiRXBveHlTaGltcy5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNs
dWRlICJPcGVuR0xFU1NoaW1zLmgiCi0jZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlcigpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VG
bGFnOwotICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWRO
YW1lSGFzaDsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10gewotICAgICAgICBzaGFy
ZWROYW1lSGFzaCA9IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OwotICAgIH0p
OwotCi0gICAgcmV0dXJuICpzaGFyZWROYW1lSGFzaDsKLX0KLQotc3RhdGljIHZvaWQgc2V0Q3Vy
cmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkK
LXsKLSAgICAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFz
aDsKLX0KLQotLy8gSGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2Nv
bXBpbGVyIHRvIGRvCi0vLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0
YXRpYyBtZXRob2QsIGJlZm9yZQotLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIKLS8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0
aGUgY3VycmVudCBpbnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KLQotc3RhdGlj
IHVpbnQ2NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5n
dGgpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ1N0cmlu
ZyBuYW1lQXNDU3RyaW5nID0gQ1N0cmluZyhuYW1lKTsKLQotICAgIC8vIExvb2sgdXAgbmFtZSBp
biBvdXIgbG9jYWwgbWFwLgotICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFw
Rm9yU2hhZGVyID0gKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOwotICAgIFNoYWRl
ck5hbWVIYXNoOjppdGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyLT5maW5kKG5hbWVBc0NTdHJpbmcpOwotICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlci0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52
YWx1ZTsKLQotICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOwot
Ci0gICAgLy8gQ29udmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8g
YSA2NC1iaXQgcmVzdWx0Ci0gICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUg
b2Ygb3VyIHRhYmxlLiBPdmVyZmxvdyB3b3VsZAotICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlm
IHdlJ3JlIGFscmVhZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCi0gICAgLy8gd2Un
cmUgaG9waW5nIHRoYXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKLSAgICAv
LyBkb24ndCBoYXZlIHRoYXQgbWFueSBzeW1ib2xzKS4KLQotICAgIHVpbnQ2NF90IHJlc3VsdCA9
IGhhc2hWYWx1ZTsKLSAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhh
c2hNYXBGb3JTaGFkZXItPnNpemUoKSArIDEpOwotCi0gICAgY3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyLT5zZXQobmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChj
b25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCi17Ci0gICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24m
IGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsK
LSAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKSkgewotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRo
U3RlbmNpbEV4dGVuc2lvbik7Ci0gICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2ls
IGlzIHRydWUuCi0gICAgICAgICAgICBhdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgICAgICBzZXRDb250ZXh0
QXR0cmlidXRlcyhhdHRycyk7Ci0gICAgfQotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1f
aXNGb3JXZWJHTDIpIHsKLSAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7Ci0gICAgICAgICAgICBhdHRycy5hbnRpYWxp
YXMgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJDb21w
b3NpdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLQotI2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwg
R0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJ
VEhFUiwgR0xfRkFMU0UpOwotI2VuZGlmCi0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5h
bnRpYWxpYXMpCi0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVk
aWF0ZVRleHR1cmUpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7
Ci0gICAgZ2xGbHVzaCgpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9m
Ym8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgZWxzZQotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8p
OwotICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3N0YXRlLmJvdW5kVGFy
Z2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUo
R0xfVEVYVFVSRTApIDogMCk7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCi0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVy
aW5nUmVzdWx0cygpCi17Ci0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlm
IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewotICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG11c3RSZXN0b3Jl
RkJPID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJl
YWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgICAgICBpZiAobV9zdGF0ZS5ib3Vu
ZERyYXdGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
LSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXV0byByZXN1bHQgPSBy
ZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQot
ewotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50
SGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWln
aHQgPj0gMCk7Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7
Ci0gICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVz
KCk7Ci0KLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NP
Ul9URVNULCBHTF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRo
ZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Ci0gICAgCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9
IHJlc2hhcGVGQk9zKEludFNpemUod2lkdGgsIGhlaWdodCkpOwotCi0gICAgLy8gSW5pdGlhbGl6
ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7MCwgMCwg
MCwgMH0sIGNsZWFyRGVwdGggPSAwOwotICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7Ci0gICAg
R0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RS
VUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFOwotICAgIEdMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZm
ZmZmZmYsIHN0ZW5jaWxNYXNrQmFjayA9IDB4ZmZmZmZmZmY7Ci0gICAgR0xiaXRmaWVsZCBjbGVh
ck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOwotICAgIDo6Z2xHZXRGbG9hdHYoR0xfQ09MT1Jf
Q0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOwotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDAp
OwotICAgIDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Ci0g
ICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKLQot
ICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJzLmRl
cHRoKSB7Ci0gICAgICAgIDo6Z2xHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVh
ckRlcHRoKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7
Ci0gICAgICAgIDo6Z2xHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2sp
OwotICAgICAgICA6OmdsRGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVhck1hc2sgfD0g
R0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAg
ICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5j
aWwpOwotICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKDApOwotICAgICAgICA6OmdsR2V0SW50ZWdl
cnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNp
bE1hc2spKTsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1B
U0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7Ci0gICAgICAg
IDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKLSAgICAgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgMHhmZmZmZmZmZik7Ci0gICAgICAgIGNs
ZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgfQotCi0gICAgOjpnbENsZWFy
KGNsZWFyTWFzayk7Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNv
bG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKLSAgICA6OmdsQ29sb3JNYXNr
KGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7
Ci0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFz
ayk7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xDbGVhclN0
ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
RlJPTlQsIHN0ZW5jaWxNYXNrKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
QkFDSywgc3RlbmNpbE1hc2tCYWNrKTsKLSAgICB9Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8p
Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0KLSAgICBhdXRvIGVycm9yID0gOjpnbEdl
dEVycm9yKCk7Ci0gICAgaWYgKGVycm9yICE9IEdMX05PX0VSUk9SKSB7Ci0gICAgICAgIFJFTEVB
U0VfTE9HKFdlYkdMLCAiRmF0YWw6IE9wZW5HTCBlcnJvciBkdXJpbmcgR3JhcGhpY3NDb250ZXh0
R0wgYnVmZmVyIGluaXRpYWxpemF0aW9uICglZCkuIiwgZXJyb3IpOwotICAgICAgICBmb3JjZUNv
bnRleHRMb3N0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICA6OmdsRmx1c2goKTsK
LX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmco
UGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRT
aGFkZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZl
cnRleFNoYWRlcikpOwotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFn
bWVudFNoYWRlcikpOwotICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVu
dEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwot
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIHNoOjpTaGFkZXJWYXJpYWJsZT4gY29tYmluZWRWYXJ5aW5n
czsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA6IHZlcnRleEVudHJ5LnZhcnlp
bmdNYXApIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBzeW1ib2xOYW1lID0gdmVydGV4U3ltYm9s
LmtleTsKLSAgICAgICAgLy8gVGhlIHZhcnlpbmcgbWFwIGluY2x1ZGVzIHZhcmlhYmxlcyBmb3Ig
ZWFjaCBpbmRleCBvZiBhbiBhcnJheSB2YXJpYWJsZS4KLSAgICAgICAgLy8gV2Ugb25seSB3YW50
IGEgc2luZ2xlIHZhcmlhYmxlIHRvIHJlcHJlc2VudCB0aGUgYXJyYXkuCi0gICAgICAgIGlmIChz
eW1ib2xOYW1lLmVuZHNXaXRoKCJdIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAvLyBEb24ndCBjb3VudCBidWlsdCBpbiB2YXJ5aW5ncy4KLSAgICAgICAgaWYgKHN5bWJvbE5h
bWUgPT0gImdsX0ZyYWdDb29yZCIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciIHx8
IHN5bWJvbE5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgY29uc3QgYXV0byYgZnJhZ21lbnRTeW1ib2wgPSBmcmFnbWVudEVudHJ5LnZhcnlp
bmdNYXAuZmluZChzeW1ib2xOYW1lKTsKLSAgICAgICAgaWYgKGZyYWdtZW50U3ltYm9sICE9IGZy
YWdtZW50RW50cnkudmFyeWluZ01hcC5lbmQoKSkKLSAgICAgICAgICAgIGNvbWJpbmVkVmFyeWlu
Z3MuYWRkKHN5bWJvbE5hbWUsIGZyYWdtZW50U3ltYm9sLT52YWx1ZSk7Ci0gICAgfQotCi0gICAg
c2l6ZV90IG51bVZhcnlpbmdzID0gY29tYmluZWRWYXJ5aW5ncy5zaXplKCk7Ci0gICAgaWYgKCFu
dW1WYXJ5aW5ncykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzdGQ6OnZlY3RvcjxzaDo6
U2hhZGVyVmFyaWFibGU+IHZhcmlhYmxlczsKLSAgICB2YXJpYWJsZXMucmVzZXJ2ZShjb21iaW5l
ZFZhcnlpbmdzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2YXJ5aW5nU3ltYm9sIDog
Y29tYmluZWRWYXJ5aW5ncy52YWx1ZXMoKSkKLSAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2
YXJ5aW5nU3ltYm9sKTsKLQotICAgIEdDR0xpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSAwOwotI2lm
IFVTRShPUEVOR0xfRVMpCi0gICAgOjpnbEdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMs
ICZtYXhWYXJ5aW5nVmVjdG9ycyk7Ci0jZWxzZQotICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdW
ZWN0b3JzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgR0NHTGludCBtYXhWYXJ5aW5nRmxvYXRzID0g
MDsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgJm1heFZh
cnlpbmdGbG9hdHMpOwotICAgICAgICBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1heFZhcnlpbmdGbG9h
dHMgLyA0OwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBzaDo6Q2hlY2tWYXJpYWJsZXNXaXRo
aW5QYWNraW5nTGltaXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJpYWJsZXMpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVj
dCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOwot
ICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOwot
ICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0
ZXhTaGFkZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwotCi0gICAgSGFzaE1hcDxT
dHJpbmcsIHNoOjpHTGVudW0+IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcDsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgZW50cnkgOiB2ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKSB7Ci0gICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZTsKLSAgICAgICAgdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmFkZChTdHJpbmcobWFwcGVkTmFt
ZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSwgZW50cnkudmFsdWUuZ2V0KCkucHJlY2lz
aW9uKTsKLSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRy
eS51bmlmb3JtTWFwKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0g
ZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKLSAgICAgICAgY29uc3QgYXV0byYgdmVydGV4
U3ltYm9sID0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmZpbmQoU3RyaW5nKG1hcHBlZE5hbWUu
Y19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSkpOwotICAgICAgICBpZiAodmVydGV4U3ltYm9s
ICE9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVl
ICE9IGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuYWN0aXZl
VGV4dHVyZVVuaXQgPSB0ZXh0dXJlOwotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQo
cHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAucmVtb3ZlKHByb2dyYW0pOwotICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRT
eW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwot
ICAgIExPRyhXZWJHTCwgIjo6YmluZEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgOjpn
bEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbWFwcGVkTmFtZS51dGY4KCkuZGF0
YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCaW5kQnVmZmVyKHRh
cmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZy
YW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0x1
aW50IGZibzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSBidWZmZXI7Ci0gICAgZWxz
ZQotICAgICAgICBmYm8gPSAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRp
c2FtcGxlRkJPIDogbV9mYm8pOwotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIp
OwotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZC
Tyk7Ci0gICAgaWYgKGZibyAhPSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERy
YXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IGZibzsKLSAgICB9Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0
YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4
dHVyZSwgdGFyZ2V0KTsKLSAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJl
ZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xC
bGVuZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhh
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwot
fSAgICAgICAKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0Is
IHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0g
dXNhZ2UpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMU3Bhbjxjb25zdCB2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVyRGF0
YSh0YXJnZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJ1ZmZl
clN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhKTsKLX0KLQot
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R0NHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLQotICAgIHJldHVybiA6OmdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjbGVhckNvbG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBm
IGIsIEdDR0xjbGFtcGYgYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bENsZWFyKG1hc2spOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyU3RlbmNpbChHQ0dMaW50IHMpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENsZWFyU3RlbmNp
bChzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xi
b29sZWFuIHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29s
ZWFuIGFscGhhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFR1cm4gb24gbmFtZSBtYXBw
aW5nLiBEdWUgdG8gdGhlIHdheSBBTkdMRSBuYW1lIGhhc2hpbmcgd29ya3MsIHdlCi0gICAgLy8g
cG9pbnQgYSBnbG9iYWwgaGFzaG1hcCB0byB0aGUgbWFwIG93bmVkIGJ5IHRoaXMgY29udGV4dC4K
LSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBtX2NvbXBpbGVyLmdldFJl
c291cmNlcygpOwotICAgIFNoSGFzaEZ1bmN0aW9uNjQgcHJldmlvdXNIYXNoRnVuY3Rpb24gPSBB
TkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb247Ci0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0
aW9uID0gbmFtZUhhc2hGb3JTaGFkZXI7Ci0KLSAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVy
cykKLSAgICAgICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1l
SGFzaD4oKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBG
b3JTaGFkZXJzLmdldCgpKTsKLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291
cmNlcyk7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9u
cy0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7Ci0KLSAgICBBTkdMRVJl
c291cmNlcy5IYXNoRnVuY3Rpb24gPSBwcmV2aW91c0hhc2hGdW5jdGlvbjsKLSAgICBtX2NvbXBp
bGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyKG51bGxwdHIpOwotCi0gICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNl
Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xh
dGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwotICAgIGNv
bnN0IGNoYXIqIHRyYW5zbGF0ZWRTaGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5k
YXRhKCk7Ci0gICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVy
Q1N0cmluZy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBvcmlnaW5hbCBz
aGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1c
biIsIGdldFNoYWRlclNvdXJjZShzaGFkZXIpLnV0ZjgoKS5kYXRhKCkpOwotICAgIExPRyhXZWJH
TCwgIi0tLSBiZWdpbiB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCB0
cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tIiwgdHJhbnNsYXRlZFNoYWRlclB0cik7Ci0KLSAg
ICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFu
c2xhdGVkU2hhZGVyTGVuZ3RoKTsKLSAgICAKLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIp
OwotICAgIAotICAgIGludCBjb21waWxlU3RhdHVzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJp
dihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAgICBTaGFkZXJT
b3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAg
Ly8gUG9wdWxhdGUgdGhlIHNoYWRlciBsb2cKLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6
Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAg
ICBpZiAobGVuZ3RoKSB7Ci0gICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgICAgIFZlY3Rv
cjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKLSAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hh
ZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICAgICAgUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICAgICAgZW50cnkubG9nID0gZ2V0
VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsK
LSAgICB9Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyAhPSBHTF9UUlVFKSB7Ci0gICAgICAgIGVu
dHJ5LmlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IHNoYWRlciB0
cmFuc2xhdG9yIHByb2R1Y2VkIGEgc2hhZGVyIHRoYXQgT3BlbkdMIHdvdWxkIG5vdCBjb21waWxl
LiIpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVy
KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBIYXNoTWFwPFBsYXRmb3JtR0xPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotCi0gICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2hh
ZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKLQotICAgIGNvbnN0IENTdHJp
bmcmIHNoYWRlclNvdXJjZUNTdHJpbmcgPSBlbnRyeS5zb3VyY2UudXRmOCgpOwotICAgIGNvbnN0
IGNoYXIqIHNoYWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOwotICAg
IGludCBzaGFkZXJTb3VyY2VMZW5ndGggPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmxlbmd0aCgpOwot
Ci0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuJXNc
bi0tLSBlbmQgZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4iLCBzaGFkZXJTb3VyY2VQdHIpOwot
Ci0gICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZzaGFk
ZXJTb3VyY2VMZW5ndGgpOwotCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLQotICAg
IGludCBjb21waWxlU3RhdHVzOwotCi0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElM
RV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKLQotICAgIGlmIChjb21waWxlU3RhdHVzID09IEdM
X1RSVUUpIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkRpcmVjdCBjb21waWxhdGlvbiBvZiBzaGFkZXIgc3VjY2VlZGVkLiIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVudHJ5LmlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAi
RXJyb3I6IGRpcmVjdCBjb21waWxhdGlvbiBvZiBzaGFkZXIgZmFpbGVkLiIpOwotICAgIH0KLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBU1NFUlQo
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChh
dHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGJvcmRlcik7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBU1NFUlQobV9zdGF0
ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewot
ICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEN1bGxG
YWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMo
R0NHTGVudW0gZnVuYykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRGVwdGhN
YXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsK
LSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFt
U3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwotICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJv
Z3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJs
ZShHQ0dMZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbERpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3Qs
IEdDR0xzaXplaSBjb3VudCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwot
ICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5
cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNl
dCkpKTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xFbmFibGUoY2FwKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVp
bnQgaW5kZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRmluaXNoKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRmx1c2goKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRnJhbWVi
dWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUs
IGxldmVsKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJv
bnRGYWNlKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwotICAgIDo6Z2xH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4
QXR0cmlidXRlU2l6ZSk7Ci0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXpl
KTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWlu
YXRpb24uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsK
LSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBp
bmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5k
YXRhKCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwg
U0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVu
Z3RoKSk7Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1l
LmRhdGEoKSwgbmFtZUxlbmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBw
aW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRl
eCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkp
OwotI2VuZGlmCi0KLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Ci0gICAgaW5mby50eXBl
ID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBH
Q0dMaW50IHN5bWJvbENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVT
eW1ib2xDb3VudChwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX0FUVFJJQlVURVMs
ICZzeW1ib2xDb3VudCk7Ci0gICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgfQotICAgIAotICAgIEFjdGl2ZVNoYWRlclN5bWJv
bENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAgICBHQ0dMdWludCByYXdJ
bmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5k
ZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5k
ZXhNYXBbaW5kZXhdIDogLTE7Ci0KLSAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9n
cmFtLCByYXdJbmRleCwgaW5mbyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOwotICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1T
aXplKTsKLQotICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4VW5pZm9ybVNpemUpOyAvLyBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCi0gICAg
R0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0g
dHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVu
aWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAg
aWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3RyaW5n
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9M
X1RZUEVfVU5JRk9STSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7Ci0gICAgCi0j
aWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxl
bmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSB1bmlm
b3JtICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0
ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotICAgIAot
ICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAg
IGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBHQ0dMaW50IHN5bWJv
bENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAu
ZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChw
cm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291bnQp
OwotICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHBy
b2dyYW0pOwotICAgIH0KLSAgICAKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJv
bENvdW50cyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXgg
PCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCkpID8g
c3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhdIDogLTE7
Ci0gICAgCi0gICAgcmV0dXJuIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJhd0luZGV4
LCBpbmZvKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHNpemVpIG1heENvdW50LCBHQ0dM
c2l6ZWkqIGNvdW50LCBQbGF0Zm9ybUdMT2JqZWN0KiBzaGFkZXJzKQotewotICAgIGlmICghcHJv
Z3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50
LCBjb3VudCwgc2hhZGVycyk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIYXNoZWROYW1l
KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBuYW1lOwotICAgIHVpbnQ2NF90IG51bWJlciA9IG5hbWVIYXNoRm9yU2hhZGVyKG5h
bWUudXRmOCgpLmRhdGEoKSwgbmFtZS5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
IndlYmdsXyIsIGhleChudW1iZXIsIExvd2VyY2FzZSkpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFN0
cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNl
TWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9s
VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRv
JiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBh
dXRvIHN5bWJvbEVudHJ5ID0gc3ltYm9sTWFwLmZpbmQobmFtZSk7Ci0gICAgaWYgKHN5bWJvbEVu
dHJ5ID09IHN5bWJvbE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgIGF1dG8mIG1hcHBlZE5hbWUgPSBzeW1ib2xFbnRyeS0+dmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZTsKLSAgICByZXR1cm4gU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5n
dGgoKSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
TmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1i
b2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0NHTHNpemVpIGNvdW50ID0gMDsK
LSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07Ci0gICAgZ2V0QXR0YWNoZWRT
aGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICBmb3IgKEdDR0xzaXpl
aSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7
Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUu
dmFsdWUoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0
ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KLSAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2Vk
U2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRl
ck1hcC5lbmQoKSkgewotICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVl
OwotICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1h
cHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAgICAg
ICBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVy
cy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHN5
bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5
IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAotICAg
ICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVy
IHByb2dyYW0uCi0gICAgICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICAg
ICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsK
LSAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hh
ZGVycy5nZXQoKSk7Ci0KLSAgICAgICAgYXV0byBnZW5lcmF0ZWROYW1lID0gZ2VuZXJhdGVIYXNo
ZWROYW1lKG5hbWUpOwotCi0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihu
dWxscHRyKTsKLQotICAgICAgICBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLnNldChnZW5l
cmF0ZWROYW1lLCBuYW1lKTsKLQotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkTmFtZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAg
PSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAgICAgIGlmIChuYW1lID09IHN5bWJv
bEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWUuY19zdHIoKSkKLSAgICAgICAgICAgIHJldHVy
biBzeW1ib2xFbnRyeS5rZXk7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0K
LVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBHQ0dMc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdOwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAm
Y291bnQsIHNoYWRlcnMpOwotICAgIAotICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5T
aGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlm
IChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7
Ci0gICAgfQotCi0gICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBz
aGFkZXJzIGFmdGVyIGxpbmtpbmcuCi0gICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1h
cC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5k
KCkpIHsKLSAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKLSAgICAg
ICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxp
bmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2lu
YWxOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgICAg
ICBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNo
YWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1l
LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTog
dGhleSBtYXkgYmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGls
ZWQsCi0gICAgICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFu
eSBzaGFkZXIgcHJvZ3JhbS4KLQotICAgICAgICBjb25zdCBhdXRvJiBjYWNoZWQgPSBtX3Bvc3Np
Ymx5VW51c2VkQXR0cmlidXRlTWFwLmZpbmQobmFtZSk7Ci0gICAgICAgIGlmIChjYWNoZWQgIT0g
bV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBj
YWNoZWQtPnZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdLCBzaXplX3QgY291bnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBmb3Ig
KHNpemVfdCBzeW1ib2xUeXBlID0gMDsgc3ltYm9sVHlwZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+
KFNIQURFUl9TWU1CT0xfVFlQRV9WQVJZSU5HKTsgKytzeW1ib2xUeXBlKSB7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgU2hhZGVyU291
cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcnNb
aV0pOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29u
c3QgU2hhZGVyU3ltYm9sTWFwJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChz
dGF0aWNfY2FzdDxlbnVtIEFOR0xFU2hhZGVyU3ltYm9sVHlwZT4oc3ltYm9sVHlwZSkpOwotICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewotICAg
ICAgICAgICAgICAgIGlmIChuYW1lID09IHN5bWJvbEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5h
bWUuY19zdHIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQot
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0p
Ci0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybiAtMTsKLQotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1i
b2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwotICAg
IExPRyhXZWJHTCwgIjo6Z2xHZXRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgp
KTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRp
cmVjdChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAtMTsKLQotCi0gICAgcmV0dXJuIDo6Z2xHZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7Ci0KLSAgICAvLyBTZXQgYW4gYXJiaXRy
YXJ5IGxpbWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgotICAgIC8v
IGEgcHJvYmxlbSBkcml2ZXIgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIG5ldmVyIGNsZWFy
IHRoZSBlcnJvci4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdvdWxkIGp1c3QgbG9vcCB1bnRpbCB3
ZSBnb3QgTk9fRVJST1IuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7
Ci0gICAgICAgIEdDR0xlbnVtIGVycm9yID0gZ2xHZXRFcnJvcigpOwotICAgICAgICBpZiAoZXJy
b3IgPT0gTk9fRVJST1IpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9zeW50aGV0aWNF
cnJvcnMuYWRkKGVycm9yKTsKLSAgICAgICAgbW92ZWRBbkVycm9yID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbW92ZWRBbkVycm9yOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RXJyb3IoKQotewotICAgIGlmICghbV9zeW50aGV0aWNFcnJvcnMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhl
IHN5bnRoZXRpYyBlcnJvciBsaXN0IGluIGNhc2UKLSAgICAgICAgLy8gdGhhdCBlcnJvciBpcyBh
bHJlYWR5IHRoZXJlLCBzaW5jZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgYm90aAotICAgICAg
ICAvLyBnbEdldEVycm9yIGFuZCBnZXRFcnJvciBpcyB0byBvbmx5IHJlcG9ydCBlYWNoIGVycm9y
IGNvZGUgb25jZS4KLSAgICAgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0g
ICAgICAgIHJldHVybiBtX3N5bnRoZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9P
UEVSQVRJT047Ci0KLSAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
cmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5n
KG5hbWUpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZmZXIpOwotfQotCi1HQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7
Ci0KLSAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1l
YnVmZmVyKQotewotICAgIGlmICghZnJhbWVidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNGcmFtZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Ci19
Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZl
ckVYVChyZW5kZXJidWZmZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFzaGFk
ZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNTaGFk
ZXIoc2hhZGVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
VGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQot
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0
ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdD
R0xmbG9hdCB3aWR0aCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQot
ewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLQotICAgIEdDR0xzaXplaSBjb3VudCA9IDA7Ci0gICAgUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyB9OwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9n
cmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAgaWYgKGNvdW50ID09IDIpCi0gICAgICAg
IG1fbGlua2VkU2hhZGVyTWFwLnNldChwcm9ncmFtLCBzdGQ6Om1ha2VfcGFpcihzaGFkZXJzWzBd
LCBzaGFkZXJzWzFdKSk7Ci0KLSAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50IHBhcmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3Is
IEdDR0xmbG9hdCB1bml0cykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1w
ZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwg
aW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBTaGFkZXJTb3VyY2VFbnRy
eSBlbnRyeTsKLQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291
cmNlTWFwLnNldChzaGFkZXIsIFdURk1vdmUoZW50cnkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdD
R0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0g
ZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0
ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3Rl
bmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNp
bE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6
cGFzcykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNp
bE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0
ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXpl
LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xV
bmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlm
b3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2Yo
bG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
YXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZs
b2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xV
bmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQg
djEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikp
OwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3Jt
M2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0z
aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xp
bnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdDR0xpbnQgdjMpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm00
aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bnQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZv
cm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJy
YXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA5KSk7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVu
aWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA5LCB0cmFuc3Bvc2UsIGFy
cmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUg
MTYpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVXNlUHJvZ3JhbShw
cm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9n
cmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0K
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdCwgMT4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkuZGF0
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdD
R0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0
cmliMmYoaW5kZXgsIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
LCAyPiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQg
aW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZl
cnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDM+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5
LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2
MiwgR0NHTGZsb2F0IHYzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2Miwg
djMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gYXJyYXkpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5k
ZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkoKQotewotICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuY3JlYXRlVmVy
dGV4QXJyYXlPRVMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
VmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICBnZXRFeHRlbnNpb25z
KCkuZGVsZXRlVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQot
ewotICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuaXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9y
bUdMT2JqZWN0IGFycmF5KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5iaW5kVmVydGV4QXJyYXlP
RVMoYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCb29sZWFu
dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+IHZhbHVlKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRC
b29sZWFudihwbmFtZSwgdmFsdWUuZGF0YSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSkKLXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICA6OmdsR2V0QnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZS5kYXRh
KTsKLX0KLQotR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjQo
R0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdDR0xpbnQ2NCB2
YWx1ZSA9IDA7Ci0gICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBt
dXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5p
dGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KLSAgICAvLyA6
OmdsR2V0SW50ZWdlcjY0dihwbmFtZSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQot
R0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwotICAgIC8vIEZJWE1F
IDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0
byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250
ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCi0gICAgLy8gOjpnbEdldEludGVnZXI2NGlfdihwbmFt
ZSwgaW5kZXgsIHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAg
ICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQpCi0gICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVO
Q0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsK
LSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
R0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwg
JnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoQUNU
SVZFX0FUVFJJQlVURVMgPT0gcG5hbWUgfHwgQUNUSVZFX1VOSUZPUk1TID09IHBuYW1lKTsKLSAg
ICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3No
YWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQg
IT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgKnZhbHVl
ID0gcmVzdWx0LT52YWx1ZS5jb3VudEZvclR5cGUocG5hbWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuc2V0KHByb2dyYW0sIEFj
dGl2ZVNoYWRlclN5bWJvbENvdW50cygpKTsKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMm
IHN5bWJvbENvdW50cyA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3Jh
bSktPnZhbHVlOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIGFjdGl2ZSBhdHRyaWJ1dGVzLCBidWls
ZCBhIGZpbHRlcmVkIGNvdW50LCBhbmQgYSBtYXBwaW5nIG9mCi0gICAgLy8gb3VyIGludGVybmFs
IGF0dHJpYnV0ZXMgaW5kZXhlcyB0byB0aGUgcmVhbCB1bmZpbHRlcmVkIGluZGV4ZXMgaW5zaWRl
IE9wZW5HTC4KLSAgICBHQ0dMaW50IGF0dHJpYnV0ZUNvdW50ID0gMDsKLSAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEFDVElWRV9BVFRSSUJVVEVTLCAmYXR0cmlidXRlQ291bnQpOwotICAg
IGZvciAoR0NHTGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKLSAgICAgICAg
QWN0aXZlSW5mbyBpbmZvOwotICAgICAgICBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGks
IGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxB
dHRyaWJ1dGVJbmRleE1hcC5hcHBlbmQoaSk7Ci0gICAgfQotICAgIAotICAgIC8vIERvIHRoZSBz
YW1lIGZvciB1bmlmb3Jtcy4KLSAgICBHQ0dMaW50IHVuaWZvcm1Db3VudCA9IDA7Ci0gICAgOjpn
bEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfVU5JRk9STVMsICZ1bmlmb3JtQ291bnQpOwot
ICAgIGZvciAoR0NHTGludCBpID0gMDsgaSA8IHVuaWZvcm1Db3VudDsgKytpKSB7Ci0gICAgICAg
IEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwg
aSwgaW5mbyk7Ci0gICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJl
ZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLmFwcGVuZChpKTsKLSAgICB9Ci0gICAgCi0gICAgKnZh
bHVlID0gc3ltYm9sQ291bnRzLmNvdW50Rm9yVHlwZShwbmFtZSk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcnNbMl0sIEdDR0xzaXplaSBjb3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCi17Ci0gICAg
TE9HKFdlYkdMLCAiT3JpZ2luYWwgU2hhZGVySW5mb0xvZzpcbiVzIiwgbG9nLnV0ZjgoKS5kYXRh
KCkpOwotCi0gICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiByZWdFeHAoIndlYmdsX1sw
MTIzNDU2Nzg5YWJjZGVmQUJDREVGXSsiKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgcHJvY2Vzc2Vk
TG9nOwotICAgIAotICAgIC8vIEFOR0xFIGluc2VydHMgYSAiI2V4dGVuc2lvbiIgbGluZSBpbnRv
IHRoZSBzaGFkZXIgc291cmNlIHRoYXQKLSAgICAvLyBjYXVzZXMgYSB3YXJuaW5nIGluIHNvbWUg
Y29tcGlsZXJzLiBUaGVyZSBpcyBubyBwb2ludCBzaG93aW5nCi0gICAgLy8gdGhpcyB3YXJuaW5n
IHRvIHRoZSB1c2VyIHNpbmNlIHRoZXkgZGlkbid0IHdyaXRlIHRoZSBjb2RlIHRoYXQKLSAgICAv
LyBpcyBjYXVzaW5nIGl0LgotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGFuZ2xlV2FybmluZyB7ICJXQVJOSU5HOiAwOjE6IGV4dGVuc2lvbiAnR0xfQVJCX2dwdV9zaGFk
ZXI1JyBpcyBub3Qgc3VwcG9ydGVkXG4iX3MgfTsKLSAgICBpbnQgc3RhcnRGcm9tID0gbG9nLnN0
YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IGFuZ2xlV2FybmluZy5nZXQoKS5sZW5ndGgoKSA6IDA7
Ci0gICAgaW50IG1hdGNoZWRMZW5ndGggPSAwOwotCi0gICAgZG8gewotICAgICAgICBpbnQgc3Rh
cnQgPSByZWdFeHAubWF0Y2gobG9nLCBzdGFydEZyb20sICZtYXRjaGVkTGVuZ3RoKTsKLSAgICAg
ICAgaWYgKHN0YXJ0ID09IC0xKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcHJvY2Vz
c2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgc3RhcnQgLSBzdGFydEZyb20p
KTsKLSAgICAgICAgc3RhcnRGcm9tID0gc3RhcnQgKyBtYXRjaGVkTGVuZ3RoOwotCi0gICAgICAg
IGNvbnN0IFN0cmluZyYgbWFuZ2xlZFN5bWJvbCA9IGxvZy5zdWJzdHJpbmcoc3RhcnQsIG1hdGNo
ZWRMZW5ndGgpOwotICAgICAgICBjb25zdCBTdHJpbmcmIG1hcHBlZFN5bWJvbCA9IG1hcHBlZFN5
bWJvbE5hbWUoc2hhZGVycywgY291bnQsIG1hbmdsZWRTeW1ib2wpOwotICAgICAgICBMT0coV2Vi
R0wsICJEZW1hbmdsaW5nOiAlcyB0byAlcyIsIG1hbmdsZWRTeW1ib2wudXRmOCgpLmRhdGEoKSwg
bWFwcGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5k
KG1hcHBlZFN5bWJvbCk7Ci0gICAgfSB3aGlsZSAoc3RhcnRGcm9tIDwgc3RhdGljX2Nhc3Q8aW50
Pihsb2cubGVuZ3RoKCkpKTsKLQotICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmlu
ZyhzdGFydEZyb20sIGxvZy5sZW5ndGgoKSAtIHN0YXJ0RnJvbSkpOwotCi0gICAgTE9HKFdlYkdM
LCAiVW5tYW5nbGVkIFNoYWRlckluZm9Mb2c6XG4lcyIsIHByb2Nlc3NlZExvZy50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKTsKLX0K
LQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
R0xpbnQgbGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9f
TE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotICAgIFZlY3RvcjxHTGNoYXI+IGlu
Zm8obGVuZ3RoKTsKLSAgICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAm
c2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgR0NHTHNpemVpIGNvdW50OwotICAgIFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyc1syXTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwg
JmNvdW50LCBzaGFkZXJzKTsKLQotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRl
cnMsIGNvdW50LCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6Omds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAg
ICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlcmkoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQotewotICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotCi0gICAgY29uc3QgYXV0
byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIAotICAgIHN3
aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIERFTEVURV9TVEFUVVM6Ci0gICAgY2FzZSBTSEFERVJf
VFlQRToKLSAgICAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsICZ2YWx1ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgIGlmIChyZXN1
bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRp
Y19jYXN0PGludD4ocmVzdWx0LT52YWx1ZS5pc1ZhbGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJTkZPX0xPR19MRU5HVEg6Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZW5kKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVy
KS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdU
SDoKLSAgICAgICAgdmFsdWUgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5W
QUxJRF9FTlVNKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIGNv
bnN0IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgaWYgKCFl
bnRyeS5pc1ZhbGlkKQotICAgICAgICByZXR1cm4gZW50cnkubG9nOwotCi0gICAgR0xpbnQgbGVu
Z3RoID0gMDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgs
ICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAot
Ci0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7
Ci0gICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRh
dGEoKSk7Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9
OwotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZv
LmRhdGEoKSwgc2l6ZSkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291
cmNlOwotfQotCi1HQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMZmxvYXQg
dmFsdWUgPSAwLmY7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIHZhbHVlOwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCAmdmFs
dWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQot
ewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldFVuaWZv
cm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRVbmlmb3Jt
aXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTHVpbnQ+IHZhbHVlKQotewotICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBl
ZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOwot
ICAgIExPRyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0
dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0
YSgpKTsKLX0KLQotR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x2b2lk
KiBwb2ludGVyID0gMDsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBu
YW1lLCAmcG9pbnRlcik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xzaXplaXB0cj4ocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGludCB4b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4gcGl4ZWxzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmICFVU0UoT1BFTkdMX0VTKQotICAgIGlmICh0eXBlID09IEhBTEZf
RkxPQVRfT0VTKQotICAgICAgICB0eXBlID0gR0xfSEFMRl9GTE9BVF9BUkI7Ci0jZW5kaWYKLQot
ICAgIGlmIChtX3VzaW5nQ29yZVByb2ZpbGUpICB7Ci0gICAgICAgIC8vIFRoZXJlIGFyZSBzb21l
IGZvcm1hdCB2YWx1ZXMgdXNlZCBpbiBXZWJHTCB0aGF0IGFyZSBkZXByZWNhdGVkIHdoZW4gdXNp
bmcgYSBjb3JlIHByb2ZpbGUsIHNvIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gYWRhcHQgdGhlbSwg
YXMgd2UgZG8gaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoKS4KLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBBTFBIQToKLSAgICAgICAgICAgIC8v
IFdlIGFyZSB1c2luZyBHTF9SRUQgdG8gYmFjayBHTF9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3
ZWxsLgotICAgICAgICAgICAgZm9ybWF0ID0gUkVEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdM
X1JHIHRvIGJhY2sgR0xfTFVNSU5BTkNFX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCi0g
ICAgICAgICAgICBmb3JtYXQgPSBSRzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhN
RTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxp
bmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUu
Ci0gICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDb21wcmVzc2VkVGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBpbWFnZVNpemUsIGRhdGEuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29tcHJlc3NlZFRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLVBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQg
byA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIo
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsK
LSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2xDcmVhdGVTaGFk
ZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZF
UlRFWF9TSEFERVIpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlblRleHR1cmVz
KDEsICZvKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwotICAgIHJldHVy
biBvOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBt
X3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91
bmREcmF3RkJPKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90
IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRl
ciBpdCBnZXRzIGRlbGV0ZWQuCi0gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwg
MCk7Ci0gICAgfQotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92
ZShwcm9ncmFtKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZl
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1
dG8mIGtleVZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0
ZXh0dXJlOwotICAgIH0pOwotICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4dHVyZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9y
KQotewotICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRo
ZXRpYyBlcnJvciBsaXN0IHRvCi0gICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywg
c28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKLSAgICAvLyBhbnkgZXJyb3JzIGZyb20g
Z2xFcnJvciBiZWZvcmUgdGhlIGVycm9yIHdlIGFyZSBzeW50aGVzaXppbmcuCi0gICAgbW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVy
cm9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9z
dCgpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkK
LSAgICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlY3ljbGVDb250ZXh0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRv
VmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBt
b2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQp
Ci17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVt
IG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQs
IEdDR0xzaXplaSBwcmltY291bnQpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50
c0luc3RhbmNlZEFOR0xFKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7Ci0g
ICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKLXsK
LSAgICBnZXRFeHRlbnNpb25zKCkudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZp
c29yKTsKLX0KLQotI2lmIEhBVkUoT1BFTkdMXzQpICYmIEVOQUJMRShXRUJHTDIpCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQgaW5k
ZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFByaW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNv
bnN0IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1
aW50IGxlbmd0aCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzYWdlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Jj
T2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
ZHN0Qnl0ZU9mZnNldCwgY29uc3Qgdm9pZCogc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBH
Q0dMdWludCBsZW5ndGgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGRzdEJ5dGVPZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShzcmNEYXRhKTsKLSAgICBV
TlVTRURfUEFSQU0oc3JjT2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLX0KLQot
I2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dM
ZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRl
T2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKLX0KLSNl
bHNlCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dM
ZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIsIEdDR0xpbnRwdHIsIEdDR0xzaXplaXB0cikKLXsK
LX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJE
YXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lk
PiBkYXRhKQotewotI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdDR0x2b2lk
KiBwdHIgPSA6OmdsTWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwg
R3JhcGhpY3NDb250ZXh0R0w6Ok1BUF9SRUFEX0JJVCk7Ci0gICAgaWYgKCFwdHIpCi0gICAgICAg
IHJldHVybjsKLSAgICBtZW1jcHkoZGF0YS5kYXRhLCBwdHIsIGRhdGEuYnVmU2l6ZSk7Ci0gICAg
aWYgKCE6OmdsVW5tYXBCdWZmZXIodGFyZ2V0KSkKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRhdGEpOwotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTik7Ci0jZW5kaWYKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc3JjWDApOwotICAgIFVOVVNFRF9QQVJBTShzcmNZ
MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gxKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTEpOwot
ICAgIFVOVVNFRF9QQVJBTShkc3RYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFkwKTsKLSAgICBV
TlVTRURfUEFSQU0oZHN0WDEpOwotICAgIFVOVVNFRF9QQVJBTShkc3RZMSk7Ci0gICAgVU5VU0VE
X1BBUkFNKG1hc2spOwotICAgIFVOVVNFRF9QQVJBTShmaWx0ZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCBsYXllcikKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAg
ICBVTlVTRURfUEFSQU0oYXR0YWNobWVudCk7Ci0gICAgVU5VU0VEX1BBUkFNKHRleHR1cmUpOwot
ICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxheWVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQotewotICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZl
cihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
LXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVu
dHMpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNyYyk7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5H
TF9FU18zKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKLXsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRJ
bnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBkYXRhLmJ1ZlNp
emUsIGRhdGEuZGF0YSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVO
VVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAg
ICBVTlVTRURfUEFSQU0oYnVmU2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0
b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotI2Vsc2UKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0sIEdDR0xlbnVtLCBH
Q0dMZW51bSwgR0NHTFNwYW48R0NHTGludD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKLXsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpv
ZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxl
dmVsKTsKLSAgICBVTlVTRURfUEFSQU0oeG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHlvZmZz
ZXQpOwotICAgIFVOVVNFRF9QQVJBTSh6b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGhlaWdodCk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShu
YW1lKTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwKQotewotICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWlu
dCB2MCwgR0NHTHVpbnQgdjEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0odjApOwotICAgIFVOVVNFRF9QQVJBTSh2MSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQg
djAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHYxKTsKLSAgICBV
TlVTRURfUEFSQU0odjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIsIEdDR0x1aW50IHYzKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFSQU0odjEpOwotICAgIFVOVVNFRF9QQVJB
TSh2Mik7Ci0gICAgVU5VU0VEX1BBUkFNKHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NH
THVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURf
UEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewot
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
bG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9j
YXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShk
YXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4
MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
dHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwot
ICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJB
TShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWlu
dCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQotewot
ICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNF
RF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0oeik7Ci0gICAgVU5VU0VEX1BBUkFNKHcpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1
aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50LCA0PiB2YWx1ZXMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwg
R0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKLXsKLSAgICBV
TlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFS
QU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHopOwotICAgIFVOVVNFRF9QQVJBTSh3KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgs
IEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0
ciBvZmZzZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0o
c2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShzdHJpZGUp
OwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwg
R0NHTHVpbnQgZW5kLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
cnQpOwotICAgIFVOVVNFRF9QQVJBTShlbmQpOwotICAgIFVOVVNFRF9QQVJBTShjb3VudCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBH
Q0dMZW51bT4gYnVmcykKLXsKLSAgICBVTlVTRURfUEFSQU0oYnVmcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dM
aW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHZhbHVlcykKLXsKLSAgICBV
TlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAg
VU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIp
OwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFN
KGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGlu
dCBkcmF3YnVmZmVyLCBHQ0dMZmxvYXQgZGVwdGgsIEdDR0xpbnQgc3RlbmNpbCkKLXsKLSAgICBV
TlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAg
VU5VU0VEX1BBUkFNKGRlcHRoKTsKLSAgICBVTlVTRURfUEFSQU0oc3RlbmNpbCk7Ci19Ci0KLVBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkp
OwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0
Zm9ybUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVl
cnkoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsK
LSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRR
dWVyeU9iamVjdHVpKFBsYXRmb3JtR0xPYmplY3QgcXVlcnksIEdDR0xlbnVtIHBuYW1lKQotewot
ICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlU2FtcGxlcigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewot
ICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kU2FtcGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVuaXQpOwotICAgIFVOVVNF
RF9QQVJBTShzYW1wbGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Ft
cGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCBwYXJhbSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW0pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgcGFyYW0pCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHBhcmFtKTsKLX0KLQotR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1w
bGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQot
ewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwot
ICAgIHJldHVybiAwLmY7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5h
bWUpCi0KLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHBu
YW1lKTsKLSAgICByZXR1cm4gMDsKLX0KLQotR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZlbmNlU3luYyhHQ0dMZW51bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKLXsK
LSAgICBVTlVTRURfUEFSQU0oY29uZGl0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1N5bmMoR0NHTHN5bmMgc3luYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMoR0NHTHN5bmMgc3luYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci19Ci0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGllbnRXYWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0x1aW50NjQgdGltZW91dCkKLXsKLSAgICBVTlVT
RURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKLSAgICBVTlVTRURfUEFS
QU0odGltZW91dCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dM
aW50NjQgdGltZW91dCkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BB
UkFNKGZsYWdzKTsKLSAgICBVTlVTRURfUEFSQU0odGltZW91dCk7Ci19Ci0KLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBu
YW1lKQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUp
OwotICAgIHJldHVybiAwOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBs
YXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGlkKTsKLX0KLQotR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZv
cm1HTE9iamVjdCBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVl
ZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpZCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0
aXZlTW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJpbWl0aXZlTW9kZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKLXsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywg
R0NHTGVudW0gYnVmZmVyTW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHZhcnlpbmdzKTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyTW9kZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZv
JikKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVk
YmFjaygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5z
Zm9ybUZlZWRiYWNrKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVp
bnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NH
THNpemVpcHRyIHNpemUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci19Ci0KLVZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHVuaWZvcm1OYW1lcykKLXsKLSAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1OYW1lcyk7
Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8R0NHTGludD4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lKQotewot
ICAgIFZlY3RvcjxHQ0dMaW50PiByZXN1bHQodW5pZm9ybUluZGljZXMuc2l6ZSgpLCAwKTsKLSNp
ZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQotICAgIEFTU0VSVChwcm9ncmFt
KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMu
c2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCByZXN1bHQuZGF0YSgpKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1HQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBy
b2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tOYW1lKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3Jt
QmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2Nr
SW5kZXgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1
bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrQmluZGluZykKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2Nr
QmluZGluZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxz
KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFS
QU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIFVOVVNFRF9QQVJBTShm
b3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBwYXJhbXMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0g
LCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhT
dWJJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSwg
R0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
bXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikK
LXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51
bSwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NH
TGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQs
IEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwg
R0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVu
dW0sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWks
IEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48
Y29uc3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsK
LSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkK
LXsKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVS
QVRJT04pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVt
ZW50c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xzaXplaSkKLXsKLSAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdD
R0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29u
c3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsKLSAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04p
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VT
YWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCB1bnBhY2tBbGlnbm1lbnQpCi17
Ci0gICAgQVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAy
IHx8IHVucGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKLSAgICBV
bmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOwotICAgIHVuc2lnbmVkIHNpemUgPSAwOwot
ICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgewotICAgICAgICBQaXhlbFN0b3JlUGFy
YW1zIHBhcmFtczsKLSAgICAgICAgcGFyYW1zLmFsaWdubWVudCA9IHVucGFja0FsaWdubWVudDsK
LSAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQs
IHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsIHBhcmFtcywgJnNpemUsIG51bGxwdHIsIG51bGxwdHIp
OwotICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgemVybyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25l
ZCBjaGFyPihzaXplKTsKLSAgICAgICAgaWYgKCF6ZXJvKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAs
IHNpemUpOwotICAgIH0KLSAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHpl
cm8uZ2V0KCksIHNpemUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcAppbmRleCBlNjZlMDBhZGIyODc1YWRmNjlhMTk3ZmNjNjky
MzE2ZGE2Zjk2ZTZlLi4yZjc3NDUyYTEzNjQyODgyM2Y2OTliYzI0MTM5YTVkMTgyZDZjMmEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcApAQCAt
MjgsOSArMjgsMTMgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKIAorI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCisjZWxzZQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgiCisjZW5kaWYKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJl
ZE1hbmFnZXIoKQpAQCAtNTYsNyArNjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlcjo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6YWRk
Q29udGV4dChHcmFwaGljc0NvbnRleHRHTFR5cGUqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwogICAgIGlmICghY29udGV4dCkKQEAgLTY2LDcgKzcwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQKICAgICBtX2NvbnRleHRzLmFwcGVuZChjb250ZXh0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
cjo6cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTFR5cGUqIGNvbnRleHQpCiB7CiAgICAg
aWYgKCFtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKQogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKaW5kZXggMGVmODZkYzZk
ZTdmMjFkNWU4ZTkxMjBlOWEzMmIwYThiMWYxZjczMS4uZmI1YzI4Yzk4ZDE4ZDg5OTUzOGQ3OTZl
YmMyMTg4YTdmNGM1OTQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TE1hbmFnZXIuaApAQCAtMzYsMTUgKzM2LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29u
c3QgdW5zaWduZWQgTWF4Q29udGV4dHMgPSAxNjsKIAorI2lmIFVTRShBTkdMRSkKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxzZQogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w7CisjZW5kaWYKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKICAg
ICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsK
IHB1YmxpYzoKKyNpZiBVU0UoQU5HTEUpCisgICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUeXBl
ID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCisgICAgdXNpbmcgR3JhcGhpY3NDb250
ZXh0R0xUeXBlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYKKwogICAgIHN0YXRp
YyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXImIHNoYXJlZE1hbmFnZXIoKTsKICAgICAK
LSAgICB2b2lkIGFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKLSAgICB2b2lk
IHJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lkIGFkZENv
bnRleHQoR3JhcGhpY3NDb250ZXh0R0xUeXBlKik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KEdy
YXBoaWNzQ29udGV4dEdMVHlwZSopOwogICAgIAogICAgIHZvaWQgcmVjeWNsZUNvbnRleHRJZk5l
Y2Vzc2FyeSgpOwogICAgIGJvb2wgaGFzVG9vTWFueUNvbnRleHRzKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0cy5zaXplKCkgPj0gTWF4Q29udGV4dHM7IH0KQEAgLTU5LDcgKzY5LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIoKSA9IGRl
ZmF1bHQ7CiAKLSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqPiBtX2NvbnRleHRz
OworICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRHTFR5cGUqPiBtX2NvbnRleHRzOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAppbmRl
eCAwNTc1NDQ0OGI5MDNlMTQ5OTNlZDMxYjBjYmQ2MWU4Njk0YTllZTk5Li45NzZlM2FiZTViYjNh
YzQwYWY4ZjIwYzllZTRlZThhMjU1M2IwYTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtODcsMTIgKzg3LDEwIEBAIFJlZlB0cjxHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
cjo6Y3JlYXRlKEdyCiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6On5HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIoKSA9IGRlZmF1bHQ7CiAKIEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyQmFzZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCi0vLyBGSVhNRTogQmVsb3cgZnVu
Y3Rpb25hbGl0eSBzaG91bGQgYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgotCiBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
R0w+IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZWQgPSBmYWxzZTsKQEAgLTEyNSwzMTQgKzEyMyw3IEBAIFJlZlB0cjxHcmFwaGljc0NvbnRleHRH
TD4gY3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4
CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQot
ewotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0ZXMud2Vi
R0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7Ci0jZW5k
aWYKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBMYXllciA9
IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7Ci0jZW5k
aWYKLSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0g
ICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hh
bmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJl
bmRlciBpbnRvLgotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1l
dGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0g
ICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
Z2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOwotCi0gICAgLy8gQ3JlYXRlIGFuIEZC
Ty4KLSAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0g
ICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fY29tcG9zaXRvclRleHR1cmUpOwot
ICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKLQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0
dXJlKTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdl
dCwgMCk7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KLSAgICBB
U1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAg
IGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmREcmF3
RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICBn
bDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAg
ICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KLSAgICAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9mYm87Ci0gICAgICAg
IGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAg
IGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQot
Ci0gICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0jZWxzZQotR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcykK
LXsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTExheWVyPigqdGhpcyk7Ci0jZWxzZQotICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtl
VW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOwotI2VuZGlmCi0K
LSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAg
YXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdl
ZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVy
IGludG8uCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6
OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gRkJPLgot
ICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOwotCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUp
OwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1
cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIEFTU0VS
VChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYg
KGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8g
PSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIDo6Z2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBp
ZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICA6
OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9
IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgotICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0KLSNpZiAhVVNFKE9QRU5H
TF9FUykKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwotCi0g
ICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7Ci0gICAgICAg
IG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMu
MiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBvdXB1
dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgotICAgICAgICAvLyBPcGVuR0wgdmVyc2lvbiAzLjIg
dXNlcyBHTFNMIHZlcnNpb24gMS41MC4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0
QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKLQotICAgICAgICAvLyBGcm9tIHZlcnNp
b24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQgYSBW
QU8gZm9yIHJlbmRlcmluZy4KLSAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRlZCBhbmQg
Ym91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJlTWFwcGVy
LCBXZWJHTCwgZXRjKS4gVGhpcyBpcwotICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRpb246IHRo
ZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdp
bGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCi0gICAgICAgIEdDR0xp
bnQgY3VycmVudFZBTyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlZFUlRF
WF9BUlJBWV9CSU5ESU5HKTsKLSAgICAgICAgaWYgKCFjdXJyZW50VkFPKSB7Ci0gICAgICAgICAg
ICBtX3ZhbyA9IGNyZWF0ZVZlcnRleEFycmF5KCk7Ci0gICAgICAgICAgICBiaW5kVmVydGV4QXJy
YXkobV92YW8pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRm9yIGxvd2Vy
IHZlcnNpb25zIHJlcXVlc3QgdGhlIGNvbXBhdGliaWxpdHkgb3V0cHV0IHRvIHRoZSBzaGFkZXIg
Y29tcGlsZXIuCi0gICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNM
X0NPTVBBVElCSUxJVFlfT1VUUFVUKTsKLQotICAgICAgICAvLyBHTF9QT0lOVF9TUFJJVEUgaXMg
bmVlZGVkIGluIGxvd2VyIHZlcnNpb25zLgotICAgICAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQ
UklURSk7Ci0gICAgfQotI2Vsc2UKLSAgICAvLyBBZGp1c3QgdGhlIHNoYWRlciBzcGVjaWZpY2F0
aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIEdMRVMzIChpLmUuIFdlYkdMMiBzdXBwb3J0KSB3YXMg
cmVxdWVzdGVkLgotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9jb21waWxlciA9IEFOR0xFV2Vi
S2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCAoYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3Jh
cGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMikgPyBTSF9XRUJHTDJfU1BFQyA6IFNI
X1dFQkdMX1NQRUMpOwotI2Vsc2UKLSAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2Uo
U0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMX1NQRUMpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIC8v
IEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291
cmNlczsKLSAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLQot
ICAgIEFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX0FUVFJJQlMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1h
eFZhcnlpbmdWZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFY
X1ZBUllJTkdfVkVDVE9SUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMpOwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVu
R0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0gICAgR0NH
TGludCByYW5nZVsyXSB7IH07Ci0gICAgR0NHTGludCBwcmVjaXNpb24gPSAwOwotICAgIGdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01FTlRfU0hB
REVSLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNp
b24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVsw
XSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwotCi0gICAgbV9jb21waWxlci5zZXRSZXNvdXJj
ZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19
Ci0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0woKQotewotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKLSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmICht
X2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29t
cG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0
QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAg
IGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwot
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAg
ICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7Ci0gICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVGQk8pOwotICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpIHsKLSNpZiAhVVNFKEFOR0xFKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgICAgICBp
ZiAobV9kZXB0aEJ1ZmZlcikKLSAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
bV9kZXB0aEJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKG1fc3RlbmNpbEJ1ZmZlcikKLSAgICAgICAg
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgot
ICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbDo6RGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLSAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsK
LSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotICAgIGlmIChtX3ZhbykKLSAgICAgICAgZGVsZXRl
VmVydGV4QXJyYXkobV92YW8pOwotI2VuZGlmCi19Ci0jZWxzZQotR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAg
ICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxl
dGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxldGVUZXh0dXJl
cygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0cmlidXRl
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMp
IHsKLSAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkgewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmICht
X2RlcHRoQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoQnVmZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIDo6Z2xEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotI2Vu
ZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxldGVWZXJ0
ZXhBcnJheShtX3Zhbyk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0jaWYgVVNF
KE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3Rh
dHVzKCkKLXsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBs
aWFudCgpIGNvbnN0Ci17Ci0jaWYgVVNFKEFOR0xFKQotICAgIHJldHVybiBtX2lzRm9yV2ViR0wy
OwotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAjaWYgVVNFKE5J
Q09TSUEpCiAgICAgcmV0dXJuICZtX25pY29zaWFMYXllci0+Y29udGVudExheWVyKCk7CkBAIC00
NDEsMzggKzEzMiw4IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiAh
VVNFKEFOR0xFKQotRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpIHsKLSNpZiBV
U0UoT1BFTkdMX0VTKQotICAgICAgICAvLyBnbEdldFN0cmluZ2kgaXMgbm90IGF2YWlsYWJsZSBv
biBHTEVTMi4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xP
cGVuR0xFUz4odGhpcywgIGZhbHNlKTsKLSNlbHNlCi0gICAgICAgIC8vIEZyb20gT3BlbkdMIDMu
MiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJlIHdlIG11c3QgdXNlIGdsR2V0
U3RyaW5naS4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xP
cGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKTsKLSNl
bmRpZgotICAgIH0KLSAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKLX0KLSNlbmRpZgotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGlu
ZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50ID09IFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVyZSkKLSAgICAgICAgbV9mYWls
TmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZUZvckRpc3BsYXkoKQotewotfQotCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBs
ZSgpCiB7CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpZiAoYXV0byBwaXhlbEJ1ZmZlciA9IHJl
YWRDb21wb3NpdGVkUmVzdWx0cygpKQpAQCAtNDgyLDExICsxNDMsNiBAQCBSZWZQdHI8TWVkaWFT
YW1wbGU+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9N
ZWRpYVNhbXBsZQogfQogI2VuZGlmCiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQotewotICAgIHJldHVy
biByZWFkUmVuZGVyaW5nUmVzdWx0cygpOwotfQotCiAjaWYgRU5BQkxFKFZJREVPKQogYm9vbCBH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlh
UGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0NHTGVudW0g
b3V0cHV0VGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgK
aW5kZXggZTQ2NjJiNjgzZWE0NWI2ZjE5NjZiMzE5NzMzOTMzMDNhYWY4NjA5NS4uZDFhYzBlYjdj
MGFkYTJmZjg4ZjE3OWRiOWNkNGVjMGEwNWU3NmNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaApAQCAtMjcsMTggKzI3LDM0IEBACiAKICNpZiBFTkFC
TEUoV0VCR0wpCiAKKyNpZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5oIgorI2Vsc2UKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
IHsKKyNpZiBVU0UoQU5HTEUpCit1c2luZyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJC
YXNlID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCit1c2luZyBHcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXJCYXNlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYK
KworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDog
cHVibGljIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2UgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyPiBjcmVhdGUoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIH5HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIoKTsKIAorICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlckJhc2Ugb3ZlcnJpZGVzLgorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCBmaW5hbDsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVyZUZyb21N
ZWRpYShNZWRpYVBsYXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGZp
bmFsOwogI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFT
YW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5k
aWYKKwogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcihXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlckFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKaW5kZXggMDg1Mzlh
N2Q5Mjk4MTE0NWRjMDYwMDFiNTc0Y2E4YzlhNzFmODk1NS4uY2IxOTEwNGI4OWYzMmU3NTVjODFi
NGY4NmE2NWVhZGE5ZmQ4NDY5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAKICNpbmNsdWRl
ICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgorI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyLmgiCiAKICNpZiBVU0UoTklDT1NJQSkKICNpbmNsdWRlICJOaWNvc2lhR0NHTEFOR0xF
TGF5ZXIuaCIKQEAgLTQwLDcgKzQyLDEwNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybURpc3BsYXkoKSBjb25zdAorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAg
ICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCit7CisjaWYgRU5BQkxFKFdFQkdMMikK
KyAgICBtX2lzRm9yV2ViR0wyID0gYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3JhcGhpY3ND
b250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsKKyNlbmRpZgorI2lmIFVTRShOSUNPU0lBKQor
ICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcj4o
KnRoaXMpOworI2Vsc2UKKyAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFw
cGVyR0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlzKTsKKyNlbmRpZgorICAgIGJvb2wgc3VjY2VzcyA9
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vz
cyk7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKyAgICBhdHRyaWJ1dGVzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9u
LgorCisgICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dCgpOworICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAgZ2w6Okdl
blRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFy
Z2V0LCBtX3RleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6
OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVy
ZVRhcmdldCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgIGdsOjpHZW5GcmFtZWJ1
ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBtX2Zibyk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgZ2w6OkdlblRl
eHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4
dHVyZVRhcmdldCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYo
dGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGds
OjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVy
ZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgZ2w6
OkdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGdsOjpCaW5kVGV4
dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsK
KworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCAwKTsKKyNlbmRpZgorCisgICAg
Ly8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFs
aWFzKSB7CisgICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVh
ZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVu
Y2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgorICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9z
dGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyAgICBnbDo6Q2xlYXJDb2xvcigw
LCAwLCAwLCAwKTsKK30KKworR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMQU5HTEUoKQoreworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAg
ICBpZiAobV90ZXh0dXJlKQorICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBvc2l0b3JU
ZXh0dXJlKQorICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1
cmUpOworI2VuZGlmCisKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygp
OworCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIGdsOjpEZWxldGVS
ZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAo
YXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbDo6
RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwor
ICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsK
KyAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgZ2w6OkRlbGV0
ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgZ2w6
OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKyAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7
CisjZW5kaWYKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJ
QSkKICAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtRGlzcGxheSgpOwpAQCAtNDks
NyArMTQ5LDcgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnMKICNlbmRpZgogfQogCi1QbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9y
bUNvbmZpZygpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJ
QSkKICAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtQ29uZmlnKCk7CkBAIC01OCw3
ICsxNTgsMjggQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGxhdGZvcm1Db25maWcoKSBjb25zdAogI2VuZGlmCiB9CiAKLWJvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCitib29s
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisjaWYgVVNF
KE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgp
OworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hlY2tHUFVTdGF0
dXMoKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNldENvbnRleHRWaXNp
YmlsaXR5KGJvb2wpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFy
ZUZvckRpc3BsYXkoKQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc2hh
cGVEaXNwbGF5QnVmZmVyQmFja2luZygpCiB7CiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRy
aWJ1dGVzKCk7CiAgICAgY29uc3QgYXV0byBzaXplID0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKTsKQEAgLTgyLDggKzIwMywxMyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMo
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNv
dXJjZXMoKQoreworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogeworICAgIHJldHVybiByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXIuY3BwCmluZGV4IGY0NGM3YTA5MzRhYTBiMmUzMjRhYjM4MzhiODg4ZGJk
MTA3YjBhYzcuLjE3ZjI5NDQ2MmMxMTcxNWMzYWNjOGJiYzZiYWZlYjY4NDQ3OWY1NDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwCkBAIC0zMyw3
ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wmIGNvbnRleHQpCitUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OlRleHR1
cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTEFOR0xFJiBjb250ZXh0
KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7CiAgICAgYXV0byBzaGFyaW5nQ29udGV4dCA9
IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dM
Q29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0NHTFBsYXRmb3JtTGF5ZXIuaAppbmRleCBjNzRlNzU1NDIxZTBjMTRkNjcxN2JkZjliMDYzYTQ3
ZDg4NjRmMmNkLi5lM2VlZDZiYjllMzY2NjI2OTM3MzVjMmNjZDEwY2UxYjdlNmQ2ZTNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oCkBAIC0yMSw3ICsy
MSw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgIVVT
RShOSUNPU0lBKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCkBAIC0zNCw3ICszNCw3IEBA
IGNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk7CiBjbGFzcyBUZXh0dXJlTWFw
cGVyR0NHTFBsYXRmb3JtTGF5ZXIgOiBwdWJsaWMgUGxhdGZvcm1MYXllciB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9y
bUxheWVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7CisgICAgVGV4dHVyZU1hcHBlckdDR0xQ
bGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUmKTsKICAgICB2aXJ0dWFsIH5UZXh0
dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoKTsKIAogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAg
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRleHQ7CisgICAgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRSYgbV9jb250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUNvbnRleHQ+IG1f
Z2xDb250ZXh0OwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGly
ZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dEdMRGlyZWN0MkQuY3BwCmluZGV4IDEyMTUwYjFkNTBlNWJjODkzNzRlYWE4MTFlMjMy
YjNjYzUwZjMxNTEuLjNiNGI3NTgwMjdmNjk2NGUwMDllYjJlNTcyMGQ0YTNjMWJjY2VkYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRHTERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFn
ZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNT
aXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMR0w6
OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IElu
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VTaXplLmlzRW1w
dHkoKSB8fCBjYW52YXNTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tCmluZGV4IDk1NDRi
NTFjMjc4ZGY1NjllYTRhYjBiZmVmN2VmNzQ0YWM1MmM3MzUuLjZkNzcwN2Q0MGMzMmYyODQyOWMz
ZDMyNDUxNWE1Y2M2OTc3NjFiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KQEAgLTMwLDcgKzMwLDcgQEAKIAogI2ltcG9ydCAiQ29t
bW9uVk0uaCIKICNpbXBvcnQgIkZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5oIgotI2ltcG9ydCAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMQU5H
TEUuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNo
ZWNrcy5oIgogI2ltcG9ydCAiVGhyZWFkR2xvYmFsRGF0YS5oIgpAQCAtNzcsMTMgKzc3LDEzIEBA
IHZvaWQgUmVsZWFzZVdlYlRocmVhZEdsb2JhbFN0YXRlKCkKICAgICAvLyBJbiBzaW5nbGUtdGhy
ZWFkZWQgZW52aXJvbm1lbnRzIHdlIGRvIG5vdCBuZWVkIHRvIHVuc2V0IHRoZSBjb250ZXh0LCBh
cyB0aGVyZSBzaG91bGQgbm90IGJlIGFjY2VzcyBmcm9tCiAgICAgLy8gbXVsdGlwbGUgdGhyZWFk
cy4KICAgICBBU1NFUlQoV2ViVGhyZWFkSXNFbmFibGVkKCkpOwotICAgIHVzaW5nIFJlbGVhc2VU
aHJlYWRSZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OlJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOworICAgIHVzaW5nIFJlbGVhc2VUaHJlYWRS
ZXNvdXJjZUJlaGF2aW9yID0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6UmVsZWFz
ZVRocmVhZFJlc291cmNlQmVoYXZpb3I7CiAgICAgLy8gRm9yIHdlYiB0aHJlYWQsIGp1c3QgcmVs
ZWFzZSB0aGUgY29udGV4dCBhcyB3ZSBrbm93IHdlIHdpbGwgc2VlIGNhbGxzIHRvIGl0IGFnYWlu
LgogICAgIC8vIEZvciBub24td2ViIHRocmVhZHMsIGUuZy4gdGhpcmQtcGFydHkgY2xpZW50IHRo
cmVhZHMsIHdlIGRvbid0IGtub3cgaWYgd2UgZXZlciBzZWUgYW5vdGhlciBjYWxsIGZyb20gdGhl
CiAgICAgLy8gdGhyZWFkLCBzbyB3ZSBhbHNvIHJlbGVhc2UgdGhlIHRocmVhZCByZXNvdXJjZXMu
CiAgICAgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgcmVsZWFzZUJlaGF2aW9yID0KICAg
ICAgICAgV2ViVGhyZWFkSXNDdXJyZW50KCkgPyBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlv
cjo6UmVsZWFzZUN1cnJlbnRDb250ZXh0IDogUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6
OlJlbGVhc2VUaHJlYWRSZXNvdXJjZXM7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlbGVhc2VUaHJlYWRSZXNvdXJjZXMocmVsZWFzZUJlaGF2aW9yKTsKKyAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKHJlbGVh
c2VCZWhhdmlvcik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCmluZGV4IGFjOTU5
NTIwYTJlM2RmYWQ5ZmNkODJiMzkyZjEwYTlhNWE2MDQ4NDAuLjg0YjJlNjg0NWQwNzQ5Y2RhYTFl
NzhiODUzMGQ4ZjhlYTVhMGUwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcApAQCAtMjM2
LDcgKzIzNiw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50UGl4ZWxCdWZm
ZXJUb0ltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yCiAgICAgICAgICAgICAvLyBIZXJl
IHdlIGRvIG5vdCB0cnkgdG8gcGxheSBiYWNrIHBlbmRpbmcgY29tbWFuZHMgZm9yIGltYWdlQnVm
ZmVyLiBDdXJyZW50bHkgdGhpcyBjYWxsIGlzIG9ubHkgbWFkZSBmb3IgZW1wdHkKICAgICAgICAg
ICAgIC8vIGltYWdlIGJ1ZmZlcnMgYW5kIHRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gYWRkIGRpc3Bs
YXkgbGlzdHMuCiAgICAgICAgICAgICBpZiAocGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMs
IFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdl
QnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMOjpw
YWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGlt
YWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmNsZWFy
UmVjdCh7IEludFBvaW50KCksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpIH0pOwogICAgICAg
ICAgICAgLy8gVW5mb3J0dW5hdGVseSAiZmx1c2giIGltcGxlbWVudGF0aW9uIGluIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQgb3ZlcmxvYWRzIG9yZGVyaW5nIGFuZCBlZmZlY3RzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFdlYkdMUmVuZGVyaW5n
UmVzb3VyY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcAppbmRleCA1YTZjZTY1ZTc0
NDdkMjRlMWU3NzM2MGYyZDhjZmU2NGVhODhiMzJhLi4wZGE3Yjk1ZDE0ZTlhZGZjZGQzNjY5Mzk5
MzNkODAwZjAwYmY4ZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJj
ZXNSZXF1ZXN0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0wuaCIKICNpbmNsdWRlICJTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5j
bHVkZSA8d3RmL1NlY29uZHMuaD4KIApAQCAtNTYsNyArNTYsNyBAQCB2b2lkIFNjb3BlZFdlYkdM
UmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6ZnJlZVdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzKCkK
ICAgICBpZiAoc19yZXF1ZXN0cykKICAgICAgICAgcmV0dXJuOwogICAgIHJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW10gewotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFzZVRocmVhZFJlc291cmNlcyhXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I6
OlRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMpOworICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OlJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpUZXJt
aW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTsKICAgICB9KTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="470561"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445399</attachid>
            <date>2021-11-30 02:12:27 -0800</date>
            <delta_ts>2021-11-30 06:55:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233522-20211130121223.patch</filename>
            <type>text/plain</type>
            <size>577654</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0OWExZjE0ZjBmMTZk
YmY2OGVhMjAyMzRhNTMzMTgwNjVkZWNjMC4uMjE1NTY3ZjY2Nzk1YzNhMzAyYWE5YWZiZTJiNmQ3
MGQ1OGIwYzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNTAgQEAKKzIwMjEtMTEtMjkgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTCBzaG91bGQgaGF2ZSBBTkdMRS1zcGVjaWZpYyBzdWJjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNTIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUsIHJlbmFtZSBhbGwgcmVsZXZhbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgc3ltYm9s
cyB0byB0aGlzLgorICAgICAgICBMZWF2ZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZWlyIHJl
c3BlY3RpdmUgZmlsZXMgZm9yIGVhc2Ugb2YgcmV2aWV3LiBBbHNvLAorICAgICAgICBzb21lIG9m
IHRoZSBzeW1ib2xzIG1pZ2h0IGJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgc3Vi
Y2xhc3NlcyAoR3JhcGhpY3NDb250ZXh0R0xDb2NvYQorICAgICAgICBhbmQgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyIEFOR0xFIGZsYXZvcikuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgbm93IG1lYW5zICJHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRlZCB3aXRo
IE9wZW5HTCBhbmQgT3BlbkdMRVMiLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUg
bWVhbnMgIkdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVudGVkIHdpdGggQU5HTEUiLgorCisgICAg
ICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGludG8gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwLCB0aGVzZSBub3cgcmVmZXIgdG8KKyAgICAgICAganVzdCB0aGUg
T3BlbkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAgRHVwbGljYXRlICJyZW5kZXJpbmcgcmVz
dWx0IiBhbmQgImNvbXBvc2l0aW5nIHJlc3VsdCIgZnVuY3Rpb25zIGZyb20gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisgICAgICAgIGludG8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAu
IFRoZXNlIGFyZSBmYWlybHkgcmVwZXRpdGl2ZSBmdW5jdGlvbnMgdGhhdCBtb3N0IGxpa2VseSB3
aWxsCisgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGZvciBBTkdMRSBiYWNrZW5kLCBzbyB0
aGUgaW50ZXJpbSBkdXBsaWNhdGVkIGNvZGUgc2hvdWxkIG5vdCBiZSBhIGJpZyBpc3N1ZS4KKwor
ICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0cnlpbmcgdG8gcmVkdWNlIHRoZSBpZmRlZiB1
c2UgaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wsIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAg
V2ViR0wgZWFzaWVyIHRvIG1haW50YWluIGNvcnJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
U3RhdGU6OmN1cnJlbnRCb3VuZFRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xTdGF0ZTo6Ym91bmRUZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMU3RhdGU6OmN1cnJlbnRCb3VuZFRhcmdldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpib3VuZFRhcmdldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFN0YXRlOjpzZXRCb3VuZFRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFO
R0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25z
R0xBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5n
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkVHTERy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFs
aWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJl
VGV4dHVyZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1ZmZlclN1YkRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb3B5QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRJbnRl
cm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3RvcmFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4U3ViSW1hZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNv
bXBpbGVTaGFkZXJEaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZyb250RmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2
ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRB
Y3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNp
bE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTNpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1ZlcnRl
eEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpnZXRJbnRlZ2VyNjQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJvZ3JhbUluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTaGFkZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVjeWNsZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmVuZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Omdl
dFF1ZXJ5T2JqZWN0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpl
bmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZyYWdEYXRhTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTF1aSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTR1aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtMnVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM3Vpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtTWF0cml4MngzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDN4MmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6dW5pZm9ybU1hdHJpeDN4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZmZXJ1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhckJ1
ZmZlcmZpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0
ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1w
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kU2FtcGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpzYW1w
bGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVs
dGlEcmF3QXJyYXlzQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Ondh
aXRBbmRVcGRhdGVPbGRlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9y
UGFpbnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHNJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1
YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2ls
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZyb250RmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hh
ZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBp
eGVsU3RvcmVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEJvb2xlYW52KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0
aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZElu
Zm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
eW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a05hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlP
YmplY3R1aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5z
Zm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRCdWZmZXJCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
bnZhbGlkYXRlRnJhbWVidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xdWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MngzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgy
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkk0dWkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQnVmZmVyaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNRdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFNhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ondh
aXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURy
YXdBcnJheXNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
QU5HTEUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBwYWludFRvQ2FudmFzIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgdG8KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wuIEl0IHdhcyBhIGdlbmVyaWMgc3Rh
dGljIGZ1bmN0aW9uIGFuZCBkaWQgbm90CisgICAgICAgIGhhdmUgYW55IGRlcGVuZGVuY3kgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtl
Q29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YWxsb2NhdGVBbmRCaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXNDVik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrR1BVU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJl
YWRSZXNvdXJjZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q1ZDb2NvYTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
VmFyeWluZ3NQYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSGFzaGVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdSYW5nZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
YW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmVuY2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1N5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsaWVudFdhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp3YWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3luY2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2ggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlckRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlSGFzaGVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJv
bE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
b2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9w
U2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMmkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZsb2F0dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJp
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50
aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVm
ZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM3VpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDR4MmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTRpKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliSVBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNR
dWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmVnaW5RdWVyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5kUXVlcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NhbXBsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRl
cmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2kpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1
bWVUcmFuc2Zvcm1GZWVkYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUlu
ZGljZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbToKKwogMjAyMS0x
MS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdQ
VVAgR3JhcGhpY3NDb250ZXh0R0wgY3JlYXRpb24gZmFpbHVyZSBjYW5ub3QgYmUgZGV0ZWN0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNGFkOTI5ODVjOTBkNDgxYmQzZjc2MzRmODEzOWRmZjYyN2ZjYzA3ZC4uOTQy
OTcxYjNhOTQ1MGE2ZjE0MDJkM2Q5ZDRhODg4ZjNkZWYxOGY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0xMS0yOSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBoYXZlIEFOR0xFLXNwZWNpZmlj
IHN1YmNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICBGdW5jdGlvbiBwYWludFRvQ2FudmFzIHdhcyBtb3ZlZCB0
byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvU2Nv
cGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVlV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXMpOgorICAgICAgICBVc2Ugc3RhdGljIGZ1bmN0aW9ucyBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuCisKIDIwMjEtMTEtMjkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHUFVQIEdyYXBoaWNzQ29udGV4dEdMIGNyZWF0aW9uIGZhaWx1
cmUgY2Fubm90IGJlIGRldGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDgwZDhkNGNiMzU0
MzkxYTQ1MGI2MjYwZmY2OWFhNjAyYmQwMThmNTYuLjZmMjMzYWU4MGJlYmFhNWY0M2JkZDhmODc5
MDQ5MDhjZDc1ZmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCiAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiY2Y3MzNmNDcxNGU1YWQyODlm
YjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5iZjg5NTYxODJiZmMyMjEzZTU0YmFjMzMwNDk0NWUzYjZi
MjI0ZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEzMTMsNiArMTMxMyw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMU3RhdGUu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJGYWN0b3J5LmgKQEAgLTE0MDUsNiArMTQwNiw3IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0FOR0xF
SGVhZGVycy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVVdGlsaXRpZXMuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCmluZGV4IDFhZjA5NWY5ZDljYmYwOTRjNTlhYjBhNzRhNGM1NTliMDU4MDExODYuLjE1
ZDI3MTdiNzIzNTgyYzdhN2ZlOTkyZjA1NWZiZTNlNzdkZGZjZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCkBAIC0zMzcsNyArMzM3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N2
L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggN2I2ZDU2MTQ2
OTkyY2VhNDM3Yjg5YjRlNGNmMTY0MmU0NzcyNDA0Ny4uZDQwMDZhOWZlMjAyNGVjMmQ1MzE4YWIz
OTQ1ZmI0YWJkYWU5M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMzYsNyArMjEzNiw2IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL2lzby9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2lzby9JU09TY2hlbWVUeXBlQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNv
L0lTT1RyYWNrRW5jcnlwdGlvbkJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09WVFRD
dWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5h
Z2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggMmQwMzEyNDIwYTkzY2MyOGJjY2RhNzVlOTkyOTQ5ODk1MjBj
MjU2Yy4uZjQyNTI0MDQxM2ExMTA4ODMyYmY0NDhiMmUwMjhmMGRkOGMyYzBlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CkBAIC00MDEsNyArNDAxLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxp
dGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKLXBsYXRmb3Jt
L2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlQXBwbGllci5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2VBcHBsaWVyLm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGQ5
ZmYwMjc0YTdiMzc1YjljYjQ3ZDNhNjgzZDUwM2Q4MDUwNWQ2Li41MmVjM2YzNmJlZTAyNmE2YTlk
MTE2YjE1MzQ1NTBkMTZiZjdlODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzYxLDEyICsyMzYxLDE0IEBACiAJCTdBRjlC
MjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpT
VlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJl
Z2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJ
N0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAzMzlEMjU0OTcyMDEw
MEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhDMUFDIC8qIEdy
YXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29j
b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMTAz
MzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjYwOTRERDI3MEM0
NEJEMDA2NDgzNUMgLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0
aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFj
ZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNl
U3dhcENoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0I3MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQ
VVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdCNzMxMUZBMjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1
ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0I4RUQ1RjAyNkYwQzEzRDAwOEFDMDIzIC8qIENWVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjhFRDVFRDI2RjBDMTIzMDA4QUMwMjMg
LyogQ1ZVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3QjkwNDE3MDI1NTAxMTQyMDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZF
OTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCOTVDRkVEMjc1NEZGN0Mw
MDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk1Q0ZFQzI3NTRGRjdDMDAwMDYwQ0UgLyogR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0NoZWNrc01hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCNjgwQjgy
NUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JEREEzMUYyNzRGQTAyMTAwMzg2NTlF
IC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlEQTUwMDM4NjU5RSAvKiBHcmFwaGljc0Nv
bnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTExMzQ1LDggKzExMzQ3LDggQEAKIAkJN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVG
IC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRU
UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBBMThDRkI1RjMw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8qIEdyYXBoaWNz
Q29udGV4dEdMQ1ZBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjEwMzM5QzI1NDk3
MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFw
aGljc0NvbnRleHRHTENWQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xD
VkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTAzMzlEMjU0OTcyMDEw
MEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNz
Q29udGV4dEdMQ1YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IxNjE5MTAyNzE5
ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4MEM3MCAvKiBH
cmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1NSw2ICsxMTM1Nyw4IEBACiAJ
CTdCOEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDVlV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QjhFRDVFRjI2RjBDMTIzMDA4QUMwMjMgLyogQ1ZVdGlsaXRpZXMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDVlV0aWxpdGllcy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkUyNTUwMTEwOTAwNkVFQjhDIC8qIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdC
OTVDRkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBH
cmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEltYWdl
RXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0QTQ3MjUzNzc2
QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNjIsNiArMjQwNjYsNyBAQAogCQkJCTZFMjdGMjQz
MjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCiAJCQkJNkUyN0Yy
NDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCiAJCQkJNkUyN0Yy
NDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwICovLAorCQkJ
CTdCOTVDRkVDMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggKi8s
CiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0dGluZy5j
cHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0
dGluZy5oICovLAogCQkJKTsKQEAgLTI4NTgzLDYgKzI4NTg4LDcgQEAKIAkJCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8sCiAJCQkJ
N0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCisJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2
ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5
IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyog
R3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzAwMTAsOCArMzAwMTYsOCBAQAogCQkJCTdC
OEVENUVEMjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5oICovLAogCQkJCTdCOEVENUVG
MjZGMEMxMjMwMDhBQzAyMyAvKiBDVlV0aWxpdGllcy5tbSAqLywKIAkJCQk3QjEwMzM5RDI1NDk3
MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oICovLAotCQkJCTdCMTAzMzlBMjU0
OTcyMDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICovLAotCQkJCTdC
MTAzMzlDMjU0OTcyMDEwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCAqLywK
KwkJCQk3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29h
LmNwcCAqLywKKwkJCQk3QjEwMzM5QzI1NDk3MjAxMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hLmggKi8sCiAJCQkJQ0QyN0FFNEUyMkE5ODY4NzAwOTQ3RkY5IC8qIEltYWdlUm90
YXRpb25TZXNzaW9uVlQuaCAqLywKIAkJCQlDRDI3QUU0RjIyQTk4Njg3MDA5NDdGRjkgLyogSW1h
Z2VSb3RhdGlvblNlc3Npb25WVC5tbSAqLywKIAkJCQkwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQg
LyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLApAQCAtMzQyNTYsMTQgKzM0MjYyLDE2IEBA
CiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNDI5OTRGQTI3MENGRTQ4MDAzMjI5OEIgLyogR3JhcGhpY3NDb250
ZXh0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3MDIzQTk2OTcz
MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCOTVD
RkVEMjc1NEZGN0MwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkREQTMxRjI3NEZBMDIxMDAzODY1OUUg
LyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IxMDMzOUUy
NTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFkZXJzICovLAot
CQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGlj
c0NvbnRleHRHTENWQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCQjM0QTQ4MjUzNzc2Q0Ew
MDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8qIEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0
MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0Eu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYzIwNDVjOWQ0ZWM1M2IzYjU5MTVmYTVmNzRk
YzY1ZDUzYzNmZmEyZi4uNzFhMzhhZjA2YjM1OTEyNjNjNzQ0MmJkYjY4NTBlNmY2MzQ1NTlmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRHTC5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0
cnVlIHVwb24gc3VjY2Vzcy4KICAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwg
Y29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wg
ZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCBzb3VyY2VJ
bWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxp
Z25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNh
bnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogcHJvdGVjdGVkOgogICAgIGludCBtX2N1cnJl
bnRXaWR0aCB7IDAgfTsKICAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xT
dGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUwNWU4YTVkZTdiMmY0YTA1NjJkMWM2Yjg0ODNiNGQ3ZTljZWUx
ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTFN0YXRlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50
ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJh
aXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdyYXBoaWNzQ29udGV4dEdM
U3RhdGUgeworICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsKKyAgICBHQ0dMdWludCBi
b3VuZERyYXdGQk8geyAwIH07CisgICAgR0NHTGVudW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgIHVzaW5nIEJvdW5kVGV4dHVyZU1hcCA9
IEhhc2hNYXA8R0NHTGVudW0sCisgICAgICAgIHN0ZDo6cGFpcjxHQ0dMdWludCwgR0NHTGVudW0+
LAorICAgICAgICBJbnRIYXNoPEdDR0xlbnVtPiwKKyAgICAgICAgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czxHQ0dMdWludD4sCisgICAgICAgIFBhaXJIYXNoVHJhaXRzPFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj4KKyAgICA+OworICAgIEJvdW5kVGV4dHVyZU1h
cCBib3VuZFRleHR1cmVNYXA7CisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0KKyAgICBHQ0dM
dWludCBib3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOwor
ICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gYm91
bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgR0NHTGVudW0gYm91bmRUYXJnZXQo
R0NHTGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9y
ID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICBpZiAoaXRlcmF0
b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
LT52YWx1ZS5zZWNvbmQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQgc2V0
Qm91bmRUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0LCBHQ0dMdWludCB0ZXh0dXJlLCBHQ0dM
ZW51bSB0YXJnZXQpCisgICAgeworICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0KHRleHR1cmVV
bml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKKyAgICB9CisKKyAgICB1c2lu
ZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIEludEhhc2g8R0NH
THVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47Cisg
ICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OworfTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVu
c2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA3ODlmZTZiNTA2ODRiODZlNmYwZmI1ZWUxYWMz
OTg5OTU1NzkxMWM2Li40ZDQ1MzIwMjkxOGQzNzU2ZjhjNzVhM2EwMzczNDY4Mzk2NDBmZDRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNp
b25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0yOSwxMSArMjksMTEgQEAKICNpbmNsdWRlICJF
eHRlbnNpb25zR0xBTkdMRS5oIgogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TEFOR0xFLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9uc0dMQU5HTEU6OkV4
dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0KQorRXh0ZW5z
aW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIGNv
bnRleHQpCiAgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKICAg
ICAsIG1fY29udGV4dChjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5kZXggMGE2MWVm
YzA5NmMxY2ZlY2E5OTkzZjllY2FmMWFjNzcyYjg1YTY2ZS4uYzk3OGUyZjlmNjRiOWY2MTVjM2Iz
YTg1YzQzYTNjYTA1NGVkNzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0zMiwxMyArMzIs
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CiAKIGNsYXNzIEV4dGVuc2lvbnNH
TEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRp
YXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMuCi0gICAgZXhw
bGljaXQgRXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICAv
LyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUgaW1wbGVtZW50YXRpb25zLgorICAgIGV4cGxpY2l0IEV4dGVuc2lvbnNHTEFO
R0xFKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqKTsKICAgICB2aXJ0dWFsIH5FeHRlbnNpb25zR0xB
TkdMRSgpOwogCiAgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCkBAIC02NCw4ICs2NCw4IEBA
IHByaXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRlbnNpb25zOwog
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogCi0gICAgLy8gV2VhayBw
b2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCi0gICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFjayB0byBHcmFw
aGljc0NvbnRleHRHTEFOR0xFLgorICAgIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIG1fY29udGV4
dDsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFdlYkdMIDEuMC1yZWxhdGVkIGZsb2F0aW5nLXBvaW50
IHJlbmRlcmFiaWxpdHkgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gZW5hYmxlZC4KICAgICBib29sIG1f
d2ViZ2xDb2xvckJ1ZmZlckZsb2F0UkdCIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0
R0xBTkdMRS5jcHAKaW5kZXggZmE2MDU0Y2Y5NWQxMmM5NTc3ZDE0OGJjZDQwNDBkZmEyYjdhNTA5
Yy4uM2UzZDJlNjgzNWUzYmY0ODA1Y2ZlMmIwNjAyNTZkNjNjYTA4NGU4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCiAK
ICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCkBAIC00MCwxOSArNDAsMTQgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIu
aD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElP
TikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNlbmRpZgogCiAvLyBUaGlzIG9uZSBkZWZpbml0aW9u
IHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwgd2hpY2gKQEAgLTc2LDggKzcx
LDcgQEAgc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXgKIH0KICNlbmRpZgogCi0KLUdDR0xlbnVtIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCitHQ0dM
ZW51bSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgp
CiB7CiAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQgPT0gLTEpCiAgICAgICAg
IEVHTF9HZXRDb25maWdBdHRyaWIocGxhdGZvcm1EaXNwbGF5KCksIHBsYXRmb3JtQ29uZmlnKCks
IEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCk7CkBAIC05Myw3ICs4Nyw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdl
dFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQorR0NHTGVudW0g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZv
ckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKIHsKICAgICBzd2l0Y2ggKGRy
YXdpbmdUYXJnZXQpIHsKICAgICBjYXNlIFRFWFRVUkVfMkQ6CkBAIC0xMDUsNyArOTksNyBAQCBH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRRdWVyeUZvckRyYXdpbmdUYXJnZQogICAgIHJldHVybiAtMTsKIH0KIAotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRGb3JEcmF3
aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChH
Q0dMZW51bSBkcmF3aW5nVGFyZ2V0KQogewogICAgIHN3aXRjaCAoZHJhd2luZ1RhcmdldCkgewog
ICAgIGNhc2UgVEVYVFVSRV8yRDoKQEAgLTExNyw3ICsxMTEsNyBAQCBHQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZvckRyYXdpbmdU
YXJnZXQoRwogICAgIHJldHVybiAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHJl
bGVhc2VCZWhhdmlvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVsZWFzZVRocmVh
ZFJlc291cmNlcyhSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvciByZWxlYXNlQmVoYXZpb3Ip
CiB7CiAgICAgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKQEAgLTE2MSw3ICsx
NTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlVGhyZWFkUmVzb3Vy
Y2VzKFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aQogICAgIHJldHVybiBFR0xfUmVsZWFzZVRo
cmVhZCgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRz
KCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkgfTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRy
eUNyZWF0ZShmb3JtYXQsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwpAQCAtMTg3LDE0
ICsxODEsMTQgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogICAgIHJldHVybiBwaXhlbEJ1ZmZl
cjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1dGVz
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKIHsK
ICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBjb250ZXh0QXR0cmlidXRlcygpLmFscGhhID8g
R0xfUkdCQTggOiBHTF9SR0I4OwogCiAgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwocGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgYXV0byBh
dHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53
aWR0aCgpOwpAQCAtMjc0LDcgKzI2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11c3RSZXN0b3Jl
RkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0
ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YXR0YWNo
RGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgYXV0byBhdHRycyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTMwMCw3ICsyOTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50
ZXJuYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZFNjaXNzb3Io
R0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNj
b3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKQEAgLTMzMSw3ICszMjUsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlYwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTMzOSwxNCArMzMzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAgICAgZ2w6OlJlbmRl
cmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDR0xlbnVtIHBu
YW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBn
bDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgdmFsdWUuYnVmU2l6ZSwgbnVsbHB0ciwg
dmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25U
eXBlLCBHQ0dMU3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0NHTGVu
dW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NHTFNwYW48R0NHTGludCwg
Mj4gcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNTQsNyArMzQ4LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRl
clR5cGUsIEdDR0wKICAgICBnbDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUs
IHByZWNpc2lvblR5cGUsIHJhbmdlLmRhdGEsIHByZWNpc2lvbik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGlu
dCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTHZvaWQ+IHBpeGVscykKIHsKICAgICBpZiAoIW1faXNGb3JXZWJHTDIpCiAgICAgICAgIGlu
dGVybmFsZm9ybWF0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uc0dMQU5HTEUmPihnZXRFeHRlbnNp
b25zKCkpLmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwg
Zm9ybWF0LCB0eXBlKTsKQEAgLTM2NCwxMiArMzU4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
ZW51CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3Vu
ZFRleHR1cmUoKSk7CiAgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFr
ZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQpLCAwKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzc5LDEyICszNzMsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0wK
ICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2Uy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5
b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewog
ICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBi
b3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRh
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDEyICszODcsMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwsIEcKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBtYWtl
R0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNldCksIDApKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xz
aXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3LDEyICs0MDEsMTIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVp
IGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2
b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xhbXBm
IHpGYXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRo
UmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogICAgIGdsOjpEZXB0aFJh
bmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oekZhcikp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFt
cGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyRGVwdGgoR0NHTGNs
YW1wZiBkZXB0aCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC00MjgsMjQgKzQyMiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiAgICAgZ2w6OkNsZWFyRGVwdGhmKHN0YXRp
Y19jYXN0PGZsb2F0PihkZXB0aCkpOwogfQogCi1FeHRlbnNpb25zR0wmIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK0V4dGVuc2lvbnNHTCYgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFtX2V4dGVuc2lvbnMpCiAgICAg
ICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+KHRoaXMpOwog
ICAgIHJldHVybiAqbV9leHRlbnNpb25zOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkblBpeGVs
cyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRh
KQogewogICAgIHJlYWRuUGl4ZWxzSW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGRhdGEuYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgZGF0YS5kYXRhLCBm
YWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxzKEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgcmVhZG5QaXhlbHNJbXBsKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgcmVpbnRlcnByZXRfY2FzdDxHQ0dMdm9pZCo+KG9mZnNldCksIHRydWUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsc0ltcGwoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpKiBsZW5ndGgsIEdD
R0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9pZCogZGF0YSwgYm9vbCBy
ZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
cmVhZG5QaXhlbHNJbXBsKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSogbGVuZ3RoLCBHQ0dMc2l6ZWkqIGNvbHVtbnMsIEdDR0xzaXpl
aSogcm93cywgR0NHTHZvaWQqIGRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZmZXJPYmplY3Qp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDgyLDkgKzQ3Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxz
SW1wbChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpCiAjZW5kaWYKIH0KIAotLy8g
VGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uIGZvbGxvdywgcG9y
dGVkIHRvIHVzZSBBTkdMRS4KKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2YWxpZGF0
ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCiB7
CiAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwogICAgIC8v
IEZJWE1FOiBTaW5jZSB0aGUgY29uc3RydWN0b3JzIG9mIHZhcmlvdXMgcGxhdGZvcm1zIGFyZSBu
b3Qgc2hhcmVkLCB3ZSBpbml0aWFsaXplIHRoaXMgaGVyZS4KQEAgLTUyMiw3ICs1MTYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBj
aGFyKiBwYWNrZWREZXB0aFN0ZW5jaQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpw
cmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQogICAgICAgICBy
ZXR1cm47CkBAIC01MzMsNyArNTI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlcGFyZVRleHR1cmUoKQogICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwoKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlVGV4dHVyZUltcGwoKQogewogICAgIEFTU0VSVCghbV9s
YXllckNvbXBvc2l0ZWQpOwogCkBAIC01NzYsNyArNTcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKICNlbmRpZgogfQogCi1zdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHMoKQorc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVSZWFkRnJhbWVi
dWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5ib3VuZFJlYWRG
Qk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpAQCAtNTg3LDcg
KzU4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cygpCiAgICAgcmV0dXJuIHJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlc2hh
cGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRX
aWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1cm47CkBAIC02
NzMsNyArNjY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4Miw3
ICs2NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJlKEdD
R0xlbnVtIHRleHR1cmUpCiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRl
cik7CkBAIC02OTIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0
YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KICAgICBnbDo6
QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1
aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC03MDEsNyArNjk1LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHUKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGlu
ZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzAzLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmUKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpi
aW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC03
MzAsNyArNzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogICAgIH0KIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBy
ZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNzM5LDcgKzczMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0CiB9CiAK
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTc0OCw3ICs3NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVy
ZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dAogICAgIGdsOjpCaW5kVGV4
dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBm
IGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJs
ZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1
ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03NTYsNyArNzUwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NH
TGMKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2Rl
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTc2NCw3ICs3NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51
bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2Rl
QWxwaGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNzczLDcgKzc2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5k
RXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtCiB9CiAKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdD
R0xlbnVtIGRmYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJsZW5kRnVuYyhH
Q0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3NzUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVu
dW0gZGZhY3RvcikKICAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBz
cmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFs
cGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dM
ZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVt
IGRzdEFscGhhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc4OSw3ICs3ODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQgogICAgIGds
OjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBz
aXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03OTcsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBH
Q0cKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNv
bnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArNzk5LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xT
cGFuPGNvbnN0IEdDR0x2b2kKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODEzLDcgKzgwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJT
dWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2
b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRCdWZmZXJTdWJEYXRh
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lkPiBk
YXRhKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTgyNSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZm
ZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZQogICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51
bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0
LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwg
R0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3
cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODMzLDE0ICs4MjcsMTQgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdl
dCwgR0NHTGVudW0gd3IKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3Jp
dGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGlu
dD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0SW50ZXJuYWxmb3JtYXRp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0aXZSb2J1c3RB
TkdMRSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgZGF0YS5idWZTaXplLCBudWxscHRy
LCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxl
cywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODQ4LDcgKzg0
Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBA
IC04NTcsNyArODUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKICAgICBtX3N0YXRlLnRl
eHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2
ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZl
bHMsIEdDCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3Jk
ZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZv
aWQ+IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UzRChHQ0dM
ZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxz
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTg3NCwxMiArODY4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
M0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbnRlcm5hCiAgICAgZ2w6OlRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnVmU2l6ZSwgcGl4ZWxz
LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVs
LCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIHRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihvZmZzZXQp
LCAwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50
IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnRleFN1YkltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50
IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2
b2lkPiBwaXhlbHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtODg3LDEyICs4ODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmYKICAg
ICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cy5idWZTaXplLCBwaXhlbHMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0
LCBpbnQgeW9mZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0ZXhTdWJJbWFn
ZTNEKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQs
IGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNl
dCkKIHsKICAgICB0ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bh
bihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ob2Zmc2V0KSwgMCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51
bSB0YXJnZXQsIGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDEyICs4OTQsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEcKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlM0RSb2J1
c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhLmJ1ZlNpemUsIGRhdGEuZGF0YSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xz
aXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dM
aW50cHRyIG9mZnNldCkKIHsKICAgICBjb21wcmVzc2VkVGV4SW1hZ2UzRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXpl
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KG9mZnNldCks
IDApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xT
cGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhv
ZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEzLDEyICs5MDcsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1YkltYWdlM0RS
b2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuYnVmU2l6ZSwgZGF0YS5k
YXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xp
bnRwdHIgb2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5
b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7CiAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlM0QodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZv
cm1hdCwgaW1hZ2VTaXplLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KG9mZnNldCksIDApKTsKIH0KIAotVmVjdG9yPEdDR0xpbnQ+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNv
bnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKK1Zl
Y3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtcyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1J
bmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8R0NHTGludD4gcmVzdWx0KHVu
aWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpAQCAtOTI5LDcg
KzkyMyw3IEBAIFZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9nCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0NHTGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwpAQCAt
OTM3LDcgKzkzMSw3IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gZ2w6OkNoZWNrRnJh
bWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBH
Q0dMY2xhbXBmIGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQ29sb3IoR0NH
TGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk0NSw3
ICs5MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdDR0xj
bGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmCiAgICAgZ2w6OkNsZWFyQ29sb3Iociwg
ZywgYiwgYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xi
aXRmaWVsZCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjbGVhcihHQ0dMYml0
ZmllbGQgbWFzaykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC05NTQsNyArOTQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NjIsNyArOTU2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NH
TGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dM
Ym9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzAsNyArOTY0LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwgR0NHTGJvb2xl
YW4gZ3JlZW4sIEdDR0wKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29tcGls
ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtOTg4LDcgKzk4Miw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGls
ZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
IHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtOTk3LDcgKzk5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVT
aGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkNvbXBpbGVTaGFk
ZXIoc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2Uy
RERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVy
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzk5OSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIyLDcgKzEwMTYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyVGFyZ2V0LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDM5LDcgKzEwMzMsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoZnJhbWVi
dWZmZXJUYXJnZXQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDcsNyArMTA0MSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkN1
bGxGYWNlKG1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1
bmMoR0NHTGVudW0gZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVwdGhGdW5j
KEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA1NSw3ICsxMDQ5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiAgICAgZ2w6OkRlcHRoRnVuYyhmdW5jKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFu
IGZsYWcpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlcHRoTWFzayhHQ0dMYm9vbGVh
biBmbGFnKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
cHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogICAgIGdsOjpEZXB0aE1hc2soZmxhZyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNo
YWRlcik7CkBAIC0xMDczLDcgKzEwNjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMTwogICAg
IGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODEsNyArMTA3NSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpEaXNh
YmxlKGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODksNyArMTA4Myw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHQ0dMdWludCBpbmRleCkKICAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51
bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpIGNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEwOTgsNyArMTA5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpCiAg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRyYXdF
bGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZW5h
YmxlKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xMTE1LDcgKzExMDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgIGdsOjpFbmFibGUoY2FwKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NH
THVpbnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTExNyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQog
ICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZmluaXNoKCkKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Zmx1c2goKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMzks
NyArMTEzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKICAgICBn
bDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dM
ZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Nyw3ICsxMTQxLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVy
ZSwgR0NHTGludCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51
bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTU2
LDcgKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dAogICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE2NCw3ICsx
MTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDR0xlbnVt
IG1vZGUpCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3Miw3ICsx
MTY2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NH
TGVudW0gdGFyZ2V0KQogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICBpZiAo
IXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBA
IC0xMTk3LDEyICsxMTkxLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJp
YihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwgaW5mbyk7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7
CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURf
VkFMVUUpOwpAQCAtMTIyOCwxMiArMTIyMiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
Y3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVu
aWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5m
byYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaW5k
ZXgsIGluZm8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hl
ZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdD
R0xzaXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVj
dCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0dMcwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpZiAoIXByb2dy
YW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsMTIgKzEyNTEsMTIgQEAgaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFMKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0QXR0cmliTG9jYXRp
b25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3Qo
KQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTEyODMsNyArMTI3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJuIG1vdmVkQW5F
cnJvcjsKIH0KIAotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkK
K0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEVycm9yKCkKIHsKICAgICBpZiAo
IW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBOZWVkIHRvIG1vdmUg
dGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCkBA
IC0xMjk5LDcgKzEyOTMsNyBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMzA3LDcg
KzEzMDEsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dM
ZW51bSBuYW1lKQogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMxNSw3
ICsxMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2RlKTsKIH0KIAot
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNCdWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKQEAgLTEzMjYsNyArMTMyMCw3IEBAIEdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKICAg
ICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xMzM0
LDcgKzEzMjgsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFi
bGVkKEdDR0xlbnVtIGNhcCkKICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXApOwogfQogCi1H
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGZyYW1lYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewogICAgIGlm
ICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzNDUsNyArMTMz
OSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVy
KFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgcmV0dXJuIGdsOjpJc0ZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCitHQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQog
ewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTM1Niw3
ICsxMzUwLDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGdsOjpJc1Byb2dyYW0ocHJv
Z3JhbSk7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRl
cmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVy
YnVmZmVyKQogewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CkBAIC0xMzY3LDcgKzEzNjEsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZQogICAgIHJl
dHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAotR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
KQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKQEAgLTEzNzgsNyArMTM3Miw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2w6
OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQorR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
IHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEzODks
NyArMTM4Myw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1
cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIHJldHVybiBnbDo6SXNUZXh0dXJlKHRl
eHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEzOTcsNyArMTM5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiAgICAgZ2w6OkxpbmVXaWR0aCh3aWR0aCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bGlua1Byb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTQwNiw3ICsxNDAwLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE0MTQsNyArMTQwOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogICAgIGds
OjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFj
dG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQyMiw3ICsxNDE2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5p
dHMpCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdD
R0xib29sZWFuIGludmVydCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2FtcGxlQ292
ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzAsNyArMTQyNCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFt
cGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVyCiAgICAgZ2w6OlNhbXBsZUNvdmVyYWdlKHZhbHVl
LCBpbnZlcnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDcgKzE0MzIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDRwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xNDUxLDcgKzE0
NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogICAgIGdsOjpTaGFkZXJTb3VyY2Uoc2hh
ZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NH
TGludCByZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0
ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NTks
NyArMTQ1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdD
R0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtCiAgICAgZ2w6OlN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCBy
ZWYsIEdDR0x1aW50IG1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxG
dW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdD
R0x1aW50IG1hc2spCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDYxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLAogICAg
IGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3
NSw3ICsxNDY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2so
R0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwg
R0NHTHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsNyArMTQ3Nyw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0g
ZmFjZSwgR0NHTHVpbnQgbWFzaykKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBt
YXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xl
bnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBH
Q0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNDkxLDcgKzE0ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtCiAg
ICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51
bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZh
aWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDk5LDcgKzE0OTMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNl
LCBHQ0dMZW51bSBmYWlsLCBHQwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWls
LCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQ
YXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNyw3ICsxNTAxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTUsNyArMTUwOSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1
bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MjMsNyArMTUxNyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMZmxvYXQgdjApCiAgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNTMxLDcgKzE1MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAg
IGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBhcnJheS5kYXRhKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTUzOSw3ICsxNTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5p
Zm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0yZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NF
UlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CkBAIC0xNTQ4LDcgKzE1NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpV
bmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTU2LDcgKzE1NTAsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHYwLCBHQ0dMZmxvYQogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xNTY1LDcgKzE1NTksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbAogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5i
dWZTaXplIC8gMywgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Myw3ICsxNTY3LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB2MCwgR0NHTGZsb2EKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2
Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTE1ODIsNyArMTU3Niw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTFNwYW48Y29uc3QgR0NHTGZsCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9jYXRpb24sIGFy
cmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50
IHYwKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE1OTAsNyArMTU4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogICAgIGdsOjpVbmlmb3JtMWkobG9j
YXRpb24sIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk4LDcgKzE1OTIsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbgogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplLCBh
cnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBH
Q0dMaW50IHYxKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2MDYsNyArMTYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAg
Z2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMaW50PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybTJpdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBhcnJheSkKIHsKICAgICBB
U1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCkBAIC0xNjE1LDcgKzE2MDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbgogICAgIGds
OjpVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NH
TGludCB2MSwgR0NHTGludCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNjIzLDcgKzE2MTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGlu
dCB2MQogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFy
cmF5KQogewogICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7CiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKQEAgLTE2MzIsNyArMTYyNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGluCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBh
cnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdD
R0xpbnQgdjMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm00aShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYz
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE2NDAsNyArMTYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxCiAgICAgZ2w6OlVuaWZv
cm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtNGl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQogewogICAgIEFT
U0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTE2NDksNyArMTY0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGluCiAgICAgZ2w6
OlVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE2NTcsNyArMTY1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJh
CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9z
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJyYXkpCiB7CiAgICAgQVNTRVJU
KCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTY2Niw3ICsxNjYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJy
YXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKIHsKICAgICBBU1NFUlQoIShhcnJheS5idWZT
aXplICUgMTYpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTY3NSw3ICsx
NjY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmEKICAgICBnbDo6VW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dXNlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4Myw3ICsxNjc3LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAg
Z2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0xNjkzLDcgKzE2ODcsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtKQogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgdjApCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjFm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwMSw3ICsxNjk1LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xm
bG9hdCB2MCkKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdCwgMT4gYXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTcwOSw3ICsxNzAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBH
Q0cKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
Ojp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTcxNyw3ICsxNzExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBnbDo6VmVy
dGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0LCAyPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0
cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDI+IGFycmF5
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE3MjUsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHCiAgICAgZ2w6OlZlcnRl
eEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEs
IEdDR0xmbG9hdCB2MikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNzMzLDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZgog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQsIDM+IGFycmF5KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3NDEsNyArMTczNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
CiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4
LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTc0OSw3ICsxNzQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGYKICAgICBnbDo6VmVydGV4
QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDQ+IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0
ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4g
YXJyYXkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTc1Nyw3ICsxNzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0cKICAgICBnbDo6
VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkg
c3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51
bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50
cHRyIG9mZnNldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNzY1LDcgKzE3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsCiAgICAg
Z2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0
cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zm
c2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJ
UG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dM
c2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwg
R0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc3Myw3
ICsxNzY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBv
aW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwKICAgICBnbDo6VmVydGV4QXR0cmli
SVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2
aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE3ODEsNyArMTc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZp
ZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDCiAgICAgZ2w6
OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCitQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5KCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE3OTQsNyAr
MTc4OCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVZlcnRleEFycmF5KCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xP
YmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgw
Niw3ICsxODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4
QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICAgICAgZ2w6OkRlbGV0ZVZlcnRleEFy
cmF5c09FUygxLCAmYXJyYXkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQorR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFy
cmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTE4
MTgsNyArMTgxMiw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Zl
cnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRl
eEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4MjgsNyAr
MTgyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQ
bGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgICAgICBnbDo6QmluZFZlcnRleEFycmF5T0VTKGFy
cmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NH
TGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xi
b29sZWFuPiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xODM2LDcgKzE4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+CiAg
ICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIHZhbHVlLmJ1ZlNpemUsIG51bGxw
dHIsIHZhbHVlLmRhdGEpOwogfQogCi1HQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCitHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg0NSw3ICsxODM5LDcgQEAgR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGZsb2F0
PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0RmxvYXR2KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NTMsNyArMTg0Nyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNw
YW48R0NHTGZsb2F0PiB2YWx1CiAgICAgZ2w6OkdldEZsb2F0dlJvYnVzdEFOR0xFKHBuYW1lLCB2
YWx1ZS5idWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0KICAgICAKLUdDR0xpbnQ2NCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQorR0NH
TGludDY0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFt
ZSkKIHsKICAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCkBAIC0xODYyLDcgKzE4NTYsNyBAQCBHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKLUdDR0xpbnQ2NCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aShHQ0dM
ZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpCiB7CiAg
ICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMTg3MSw3ICsxODY1LDcgQEAgR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwog
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xODgyLDcgKzE4NzYsNyBAQCBHQ0dM
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKEdDR0xlbnVtIHRhcgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UHJv
Z3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBH
Q0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTg5
MSw3ICsxODg1LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3Jh
bWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bQogICAgIHJldHVybiB2YWx1ZTsK
IH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9n
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJp
bmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1hbmdsZWRJbmZv
TG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBT
dHJpbmcmIGxvZykKIHsKICAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CiAgICAgVU5VU0VEX1BB
UkFNKGNvdW50KTsKQEAgLTE5MTEsNyArMTkwNSw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0s
CiAgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwogfQogCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRQcm9ncmFtSW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBAIC0x
OTM0LDcgKzE5MjgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dy
YW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4gZ2V0VW5tYW5n
bGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7CiB9
CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCkBAIC0xOTQzLDcgKzE5MzcsNyBAQCBHQ0dMaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5h
bWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNoYWRlcmkoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEFTU0VSVChzaGFkZXIpOwog
ICAgIEdDR0xpbnQgdmFsdWUgPSAwOwpAQCAtMTk1Myw3ICsxOTQ3LDcgQEAgR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwg
R0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVN0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK1N0
cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCkBAIC0xOTczLDEyICsxOTY3
LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhz
aGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKIH0KIAotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCkKK1N0
cmluZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9i
amVjdCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotR0NHTGZsb2F0IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUpCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VGV4UGFy
YW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9h
dCB2YWx1ZSA9IDAuZjsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMTk4Nyw3
ICsxOTgxLDcgQEAgR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJh
bWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG4KICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmkoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQog
ewogICAgIEdDR0xpbnQgdmFsdWUgPSAwOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CkBAIC0xOTk2LDcgKzE5OTAsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbQogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
TGZsb2F0PiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
TGZsb2F0PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yMDA1LDcgKzE5OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvYwog
ICAgIGdsOjpHZXRVbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6
ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDE0LDcgKzIwMDgsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvYwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2Nh
dGlvbiwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyMyw3ICsyMDE3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG8KICAgICBnbDo6R2V0VW5pZm9ybXVpdlJvYnVzdEFO
R0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZS5kYXRhKTsKIH0K
IAotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCkBA
IC0yMDMzLDcgKzIwMjcsNyBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogICAgIHJldHVybiBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAK
LUdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0ciBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdD
R0xlbnVtIHBuYW1lKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtMjA0Myw3ICsyMDM3LDcgQEAgR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0wK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDUzLDcgKzIwNDcsNyBAQCBQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogICAgIHJldHVybiBv
OwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNy
ZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTIwNjMsNyArMjA1Nyw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICByZXR1cm4gbzsK
IH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJv
Z3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVBy
b2dyYW0oKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjA3MSw3ICsyMDY1LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIGdsOjpDcmVhdGVQcm9ncmFt
KCk7CiB9CiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgxLDcgKzIwNzUsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogICAgIHJldHVy
biBvOwogfQogCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDg5LDcgKzIwODMsNyBAQCBQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIoR0NH
TGVudW0gdHlwZSkKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVO
VF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7CiB9CiAK
LVBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUo
KQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpjcmVhdGVUZXh0dXJl
KCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTIxMDAsNyArMjA5NCw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBvOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMTA4LDcgKzIxMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgZ2w6OkRlbGV0ZUJ1ZmZl
cnMoMSwgJmJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVi
dWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAgICBnbDo6RGVs
ZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMTMzLDcgKzIxMjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6RGVsZXRlUHJv
Z3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5k
ZXJidWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjE0MSw3ICsyMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogICAgIGds
OjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMTQ5LDcgKzIxNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgZ2w6OkRlbGV0ZVNo
YWRlcihzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2MSw3ICsyMTU1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9y
bUdMT2JqZWN0IHRleHR1cmUpCiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFs
bCh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6
ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnN5
bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQgdG8gbW92ZSB0
aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCiAgICAgLy8g
cHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2ls
bCBnZXQKQEAgLTIxNzAsMjUgKzIxNjQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiAgICAgbV9zeW50aGV0aWNFcnJv
cnMuYWRkKGVycm9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VD
b250ZXh0TG9zdCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmZvcmNlQ29udGV4dExv
c3QoKQogewogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykp
CiAgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnJlY3ljbGVDb250ZXh0KCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250ZXh0KCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWRO
b3RpZmljYXRpb24oKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkaXNwYXRjaENvbnRl
eHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMpKQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5n
ZWROb3RpZmljYXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkg
Y291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNp
emVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDAsNyArMjE5NCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwg
R0NHTGludCBmaXJzdCwKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NH
THNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVp
IHByaW1jb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0VsZW1lbnRzSW5z
dGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxMiw3ICsyMjA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVt
IG1vZGUsIEdDR0xzaXplaSBjb3UKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4
LCBHQ0dMdWludCBkaXZpc29yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQogewogICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMjMsNyArMjIx
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3Io
R0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAgICAgICAgIGdsOjpWZXJ0ZXhBdHRyaWJE
aXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCi1HQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCitHQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTIyMzIsNyArMjIyNiw3IEBAIEdD
R0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3JtQmxvY2tJbmRl
eChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1TdHJpbmcg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkKK1N0cmluZyBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7CiAgICAgQVNT
RVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yMjUyLDcg
KzIyNDYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogICAgIHJldHVybiBTdHJpbmcoYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVu
aWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9j
a0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0yMjYzLDcgKzIyNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAog
CiAvLyBRdWVyeSBGdW5jdGlvbnMKIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjcmVhdGVRdWVyeSgpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMjczLDcgKzIyNjcsNyBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAgICAgcmV0dXJuIG5hbWU7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkK
IHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
MjgxLDcgKzIyNzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeQogICAgIGdsOjpCZWdpblF1
ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
bmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmVu
ZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yMjg5LDcgKzIyODMsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiAgICAgZ2w6OkVuZFF1ZXJ5
KHRhcmdldCk7CiB9CiAKLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVy
eU9iamVjdHVpKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0x1aW50IEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBu
YW1lKQogewogICAgIEdDR0x1aW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQpAQCAtMjMwMCw3ICsyMjk0LDcgQEAgR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWkoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lKQogCiAv
LyBUcmFuc2Zvcm0gRmVlZGJhY2sgRnVuY3Rpb25zCiAKLVBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAt
MjMxMCw3ICsyMzA0LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHJldHVybiBuYW1lOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9y
bUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRi
YWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTIzMTgsNyArMjMxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtCiAgICAgZ2w6OkRl
bGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwogfQogCi1HQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0
Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9y
bUZlZWRiYWNrKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKQEAgLTIzMjYsNyArMjMyMCw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJh
bnNmCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNr
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRi
YWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMzM0LDcgKzIz
MjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJh
Y2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMTwogICAgIGdsOjpCaW5kVHJhbnNmb3JtRmVl
ZGJhY2sodGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhH
Q0dMZW51bSBwcmltaXRpdmVNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTIzNDIsNyArMjMzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2RlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCiB7CiAgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM1MCw3ICsy
MzQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQogICAgIGdsOjpFbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZm
ZXJNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZh
cnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsMTMgKzIzNTksMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0KICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFt
LCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3MuZGF0YSgpLCBi
dWZmZXJNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdDR0xzaXplaSBidWZTaXplID0gMDsKLSAgICBn
bDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CisgICAgZ2w6OkdldFBy
b2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpUUkFOU0ZPUk1fRkVFREJB
Q0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZTaXplKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTIzODcsNyArMjM4MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyCiAgICAgaW5mby50eXBlID0gdHlwZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmJpbmRC
dWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTIzOTUsNyArMjM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsCiAgICAg
Z2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dM
aW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBH
Q0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQg
bWFzaywgR0NHTGVudW0gZmlsdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpibGl0
RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwg
R0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RY
MSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDAz
LDcgKzIzOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZm
ZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTAogICAgIGdsOjpCbGl0RnJhbWVi
dWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRz
dFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1l
bnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NHTGludCBsYXll
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxMSw3ICsyNDA1LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bQogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmVMYXllcih0YXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNw
YW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQogewogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MTksNyArMjQxMyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0YXJnZXQsIGF0
dGFjaG1lbnRzLmJ1ZlNpemUsIGF0dGFjaG1lbnRzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI3LDcgKzI0MjEsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3BhbgogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFy
Z2V0LCBhdHRhY2htZW50cy5idWZTaXplLCBhdHRhY2htZW50cy5kYXRhLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihH
Q0dMZW51bSBzcmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRCdWZmZXIoR0NH
TGVudW0gc3JjKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI0MzUsNyArMjQyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogICAgIGdsOjpSZWFkQnVmZmVyKHNyYyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y29weVRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQs
IEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTIsNyArMjQ0Niw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZl
clRhcmdldCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEZy
YWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIC0x
OwpAQCAtMjQ2MCw3ICsyNDU0LDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMKICAgICByZXR1
cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDY4LDcgKzI0NjIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0x1aW50IHYwKQogICAgIGdsOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkoR0NHTGludCBsb2NhdGlvbiwgR0NH
THVpbnQgdjAsIEdDR0x1aW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlm
b3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSkKIHsKICAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDc2LDcg
KzI0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtMnVpKGxv
Y2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM3VpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWkoR0NHTGludCBs
b2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDg0LDcgKzI0
NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludAogICAgIGdsOjpVbmlmb3JtM3VpKGxvY2F0
aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1
aW50IHYyLCBHQ0dMdWludCB2MykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9y
bTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyLCBHQ0dMdWludCB2MykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNDkyLDcgKzI0ODYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWlu
dAogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWlu
dD4gZGF0YSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yNTAwLDcgKzI0OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdQogICAgIGds
OjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+IGRhdGEpCiB7CiAgICAgQVNTRVJUKCEoZGF0YS5idWZTaXplICUgMikpOwogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTA5LDcgKzI1MDMsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMdQogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8g
MiwgZGF0YS5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTN1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVm
U2l6ZSAlIDMpKTsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjUxOCw3ICsy
NTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHUKICAgICBnbDo6VW5pZm9ybTN1aXYobG9j
YXRpb24sIGRhdGEuYnVmU2l6ZSAvIDMsIGRhdGEuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0x1aW50PiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp1bmlmb3Jt
NHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKIHsK
ICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA0KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKQEAgLTI1MjcsNyArMjUyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1CiAg
ICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBkYXRhLmJ1ZlNpemUgLyA0LCBkYXRhLmRhdGEp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRy
aXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1MzYsNyArMjUzMCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDNmdihsb2Nh
dGlvbiwgZGF0YS5idWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA2KSk7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1NDUsNyArMjUzOSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlvbiwgZGF0YS5i
dWZTaXplIC8gNiwgdHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkK
IHsKICAgICBBU1NFUlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKQEAgLTI1NTQsNyArMjU0OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwg
dHJhbnNwb3NlLCBkYXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NF
UlQoIShkYXRhLmJ1ZlNpemUgJSA4KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
QEAgLTI1NjMsNyArMjU1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVu
aWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgZGF0YS5idWZTaXplIC8gOCwgdHJhbnNwb3NlLCBk
YXRhLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnVu
aWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKICAgICBBU1NFUlQoIShkYXRhLmJ1
ZlNpemUgJSAxMikpOwogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCkBAIC0yNTcyLDcg
KzI1NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdAogICAgIGdsOjpVbmlmb3JtTWF0cml4
M3g0ZnYobG9jYXRpb24sIGRhdGEuYnVmU2l6ZSAvIDEyLCB0cmFuc3Bvc2UsIGRhdGEuZGF0YSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gZGF0YSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewogICAgIEFTU0VSVCghKGRhdGEuYnVmU2l6ZSAlIDEy
KSk7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTI1ODEsNyArMjU3NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDNmdihsb2Nh
dGlvbiwgZGF0YS5idWZTaXplIC8gMTIsIHRyYW5zcG9zZSwgZGF0YS5kYXRhKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGluZGV4
LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1ODksNyArMjU4Myw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRl
eCwgR0NHTGludCB4LCBHQ0dMaW50CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShpbmRleCwgeCwg
eSwgeiwgdyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
Ykk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTcsNyArMjU5MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aXYoaW5kZXgs
IHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVp
bnQgeiwgR0NHTHVpbnQgdykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6dmVydGV4QXR0
cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQg
eiwgR0NHTHVpbnQgdykKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNjA1LDcgKzI1OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdQog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludCwgND4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTI2MTMsNyArMjYwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMuZGF0YSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xl
bnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBH
Q0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjYyMSw3ICsyNjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEcKICAgICBnbDo6
RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+
IGJ1ZnMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjYyOSw3ICsyNjIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiAgICAgZ2w6OkRyYXdCdWZm
ZXJzKGJ1ZnMuYnVmU2l6ZSwgYnVmcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZl
ciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVy
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzNyw3ICsyNjMxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdD
R0xpbnQgZHJhd2J1ZmZlciwKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIsIGRyYXdidWZm
ZXIsIHZhbHVlcy5kYXRhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFu
PGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNs
ZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NDUsNyArMjYzOSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFs
dWVzLmRhdGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IHZhbHVlcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2xlYXJCdWZm
ZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiB2YWx1ZXMpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjY1Myw3ICsyNjQ3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZl
ciwKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlcy5kYXRh
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50
IHN0ZW5jaWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNsZWFyQnVmZmVyZmkoR0NH
TGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGlu
dCBzdGVuY2lsKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI2NjEsNyArMjY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsCiAgICAg
Z2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmRlbGV0ZVF1ZXJ5KFBs
YXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjY2OSw3ICsyNjYzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKICAgICBnbDo6
RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQorR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQog
ewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKQEAgLTI2NzcsNyArMjY3MSw3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiAgICAgcmV0dXJuIGdsOjpJc1F1
ZXJ5KHF1ZXJ5KTsKIH0KIAotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKK1BsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTI2ODcsNyArMjY4MSw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVlKTsKIH0KIAot
UGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigp
CitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNyZWF0ZVNhbXBsZXIo
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtMjY5Nyw3ICsyNjkxLDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlcikKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNzA1LDcgKzI2OTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKICAgICBnbDo6RGVs
ZXRlU2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwpAQCAtMjcxMyw3ICsyNzA3LDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiAgICAgcmV0
dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5p
dCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjEsNyArMjcxNSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MjksNyArMjcyMyw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIs
IHBuYW1lLCBwYXJhbSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBs
ZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdD
R0xmbG9hdCBwYXJhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2FtcGxlclBhcmFt
ZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
IHBhcmFtKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI3MzcsNyArMjczMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNh
bXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVuCiAgICAgZ2w6
OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKLUdDR0xmbG9h
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lKQogewogICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDAuZjsKICAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQpAQCAtMjc0Nyw3ICsyNzQxLDcgQEAgR0NHTGZsb2F0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2Jq
ZWN0IHNhbXBsZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
ciwgR0NHTGVudW0gcG5hbWUpCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFNh
bXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUp
CiB7CiAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKQEAgLTI3NTcsNyArMjc1MSw3IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwKICAgICByZXR1
cm4gdmFsdWU7CiB9CiAKLUdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5
bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCitHQ0dMc3luYyBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0
ZmllbGQgZmxhZ3MpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0yNzY1LDcgKzI3NTksNyBAQCBHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYQog
ICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQogCi1HQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCitHQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc1N5bmMoR0NHTHN5bmMgc3luYykKIHsK
ICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0yNzczLDcgKzI3NjcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMoc3luYyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3lu
YykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6ZGVsZXRlU3luYyhHQ0dMc3luYyBzeW5j
KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTI3ODEsNyArMjc3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5
bmMoR0NHTHN5bmMgc3luYykKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0KIAotR0NHTGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMs
IEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQorR0NHTGVudW0gR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZp
ZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOwpAQCAtMjc4OSw3ICsyNzgz
LDcgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdD
R0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGEKICAgICByZXR1cm4gZ2w6OkNsaWVudFdhaXRT
eW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50
NjQgdGltZW91dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6d2FpdFN5bmMoR0NHTHN5
bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMaW50NjQgdGltZW91dCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNzk3LDcgKzI3
OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbgogICAgIGdsOjpXYWl0U3luYyhzeW5jLCBm
bGFncywgdGltZW91dCk7CiB9CiAKLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lKQorR0NHTGludCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpnZXRTeW5jaShHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSkKIHsK
ICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQpA
QCAtMjgwNyw3ICsyODAxLDcgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUpCiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNr
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjgxNSw3ICsyODA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFu
c2Zvcm1GZWVkYmFjaygpCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgy
Myw3ICsyODE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNm
b3JtRmVlZGJhY2soKQogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgz
MSw3ICsyODI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlclJh
bmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFAKICAgICBnbDo6QmluZEJ1ZmZl
clJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0KIAotVmVjdG9y
PEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVz
KQorVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbmlmb3JtSW5k
aWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlm
b3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCkBAIC0yODQ0LDE0ICsyODM4LDE0IEBAIFZlY3RvcjxHQ0dMdWludD4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJv
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBwYXJhbXMpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1
aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJsb2NraXZSb2J1
c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcy5idWZTaXpl
LCBudWxscHRyLCBwYXJhbXMuZGF0YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0FycmF5
c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NH
TFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7CiAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg1OSw3
ICsyODUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3QXJyYXlz
QU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QKICAgICBnbDo6TXVsdGlEcmF3QXJy
YXlzQU5HTEUobW9kZSwgZmlyc3RzLmRhdGEsIGNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xT
cGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGlu
c3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291
bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkg
ZHJhd2NvdW50KQogewogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI4NjcsNyArMjg2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTCiAgICAg
Z2w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0cy5kYXRhLCBjb3Vu
dHMuZGF0YSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2Rl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2Rl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkKIHsKICAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yODgwLDcgKzI4
NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0FO
R0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbgogICAgIGdsOjpNdWx0aURyYXdFbGVtZW50
c0FOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBwb2ludGVycy5kYXRhKCksIGRyYXdjb3Vu
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBj
b3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMs
IEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7
CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg5
Myw3ICsyODg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bXVsdGlEcmF3RWxl
bWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0cKICAgICBnbDo6TXVsdGlEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudHMuZGF0YSwgdHlwZSwgcG9pbnRlcnMu
ZGF0YSgpLCBpbnN0YW5jZUNvdW50cy5kYXRhLCBkcmF3Y291bnQpOwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQorYm9vbCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogewogICAgIHNp
emVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVDb21wbGV0aW9u
RmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKQEAg
LTI5MTQsNiArMjkwOCw5NSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0QW5k
VXBkYXRlT2xkZXN0RnJhbWUoKQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50
Rm9yVGVzdGluZyBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JU
ZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3BsYXlXYXNS
ZWNvbmZpZ3VyZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChl
dmVudCA9PSBTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmc6OkdQVVN0YXR1c0ZhaWx1cmUpIHsKKyAg
ICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjppc0dMRVMyQ29tcGxpYW50KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVuZGVyaW5nUmVz
dWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBwYWlu
dFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1h
Z2VCdWZmZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVh
ZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuOworICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RGTW92ZSgqcGl4
ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0
KCkpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBSZWFk
aW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3
aGljaCBpcyBsb3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVk
QWxwaGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byByZXN1bHRzID0g
cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOworICAgIGlmIChyZXN1bHRzICYmICFy
ZXN1bHRzLT5zaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChyZXN1bHRzLT5mb3Jt
YXQoKS5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgcmVzdWx0cy0+Zm9ybWF0
KCkucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICAgICAgLy8gRklYTUU6
IE1ha2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9ucyBzdXBwb3J0IG5lZ2F0aXZlIHJvd0J5dGVzIGFu
ZCBpbi1wbGFjZSBjb252ZXJzaW9ucy4KKyAgICAgICAgY29uc3QgYXV0byBzaXplID0gcmVzdWx0
cy0+c2l6ZSgpOworICAgICAgICBjb25zdCBzaXplX3Qgcm93U3RyaWRlID0gc2l6ZS53aWR0aCgp
ICogNDsKKyAgICAgICAgdWludDhfdCogdG9wID0gcmVzdWx0cy0+ZGF0YSgpLmRhdGEoKTsKKyAg
ICAgICAgdWludDhfdCogYm90dG9tID0gdG9wICsgKHNpemUuaGVpZ2h0KCkgLSAxKSAqIHJvd1N0
cmlkZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdGVtcChuZXcgdWludDhf
dFtyb3dTdHJpZGVdKTsKKyAgICAgICAgZm9yICg7IHRvcCA8IGJvdHRvbTsgdG9wICs9IHJvd1N0
cmlkZSwgYm90dG9tIC09IHJvd1N0cmlkZSkgeworICAgICAgICAgICAgbWVtY3B5KHRlbXAuZ2V0
KCksIGJvdHRvbSwgcm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweShib3R0b20sIHRvcCwg
cm93U3RyaWRlKTsKKyAgICAgICAgICAgIG1lbWNweSh0b3AsIHRlbXAuZ2V0KCksIHJvd1N0cmlk
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3N0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRSZW5kZXJpbmdS
ZXN1bHRzRm9yUGFpbnRpbmcoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJl
dHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWlu
dGluZygpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlYWRDb21w
b3NpdGVkUmVzdWx0cygpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp0
ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKQoreworICAgIHJldHVybiBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRlMzBiY2JjNDc3NDViYjhiNDIxNTI3YmZkMzQ5YmFkNjc3YmQwNjcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdMKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSU9T
dXJmYWNlU3dhcENoYWluLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0
LmgiCisjZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29zaWEgeworY2xh
c3MgR0NHTExheWVyOworfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RXh0ZW5zaW9uc0dMOworY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CitjbGFzcyBIb3N0V2luZG93
OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNzIFBpeGVsQnVm
ZmVyOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQ
bGF0Zm9ybUxheWVyOworI2VuZGlmCisKKy8vIEJhc2UgY2xhc3MgZm9yIEdyYXBoaWNzQ29udGV4
dEdMIGNvbnRleHRzIHRoYXQgdXNlIEFOR0xFLgorY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpOworCisgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7CisgICAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0OworICAgIEdD
R0xlbnVtIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgc3RhdGljIEdDR0xlbnVt
IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVt
IGRyYXdpbmdUYXJnZXQpOworICAgIHN0YXRpYyBHQ0dMaW50IEVHTERyYXdpbmdCdWZmZXJUZXh0
dXJlVGFyZ2V0Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KTsKKyAgICBl
bnVtIGNsYXNzIFJlbGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yIHsKKyAgICAgICAgLy8gUmVs
ZWFzZXMgY3VycmVudCBjb250ZXh0IGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgY2FsbHMg
ZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCisgICAg
ICAgIC8vIFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEUgY2FsbHMgZG9uZSBpbiB0aGUgdGhyZWFkLgorICAgICAgICBSZWxlYXNlVGhyZWFk
UmVzb3VyY2VzLAorICAgICAgICAvLyBSZWxlYXNlcyBhbGwgZ2xvYmFsIHN0YXRlLiBTaG91bGQg
YmUgdXNlZCBvbmx5IGFmdGVyIGFsbCBkZXBlbmRpbmcgb2JqZWN0cyBoYXZlCisgICAgICAgIC8v
IGJlZW4gcmVsZWFzZWQuCisgICAgICAgIFRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJj
ZXMKKyAgICB9OworICAgIHN0YXRpYyBib29sIHJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoUmVsZWFz
ZVRocmVhZFJlc291cmNlQmVoYXZpb3IpOworCisgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9u
LCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAgdm9pZCBwcmVw
YXJlVGV4dHVyZSgpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlvbiB3aXRob3V0
IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBpbmcuCisgICAgaW50IGdldEF0
dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2luZyB0aHJvdWdo
IEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0KTsK
KworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09
MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8vIEdyYXBoaWNz
Q29udGV4dEdMIG92ZXJyaWRlcy4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdCBm
aW5hbDsKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkgZmluYWw7Cisg
ICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikgZmluYWw7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZv
cm1HTE9iamVjdCwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgZmluYWw7Cisg
ICAgdm9pZCBiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmlu
YWw7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBibGVuZENvbG9yKEdD
R0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFt
cGYgYWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKSBm
aW5hbDsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBH
Q0dMZW51bSBtb2RlQWxwaGEpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jKEdDR0xlbnVtIHNm
YWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpIGZpbmFsOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkgZmluYWw7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpcHRyLCBHQ0dMZW51bSB1c2FnZSkgZmluYWw7CisgICAgdm9pZCBidWZm
ZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEsIEdD
R0xlbnVtIHVzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZp
bmFsOworICAgIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0
KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKSBmaW5hbDsKKyAgICB2
b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFt
cGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgZmluYWw7CisgICAgdm9pZCBjbGVhckRlcHRoKEdD
R0xjbGFtcGYgZGVwdGgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDR0xpbnQgcykg
ZmluYWw7CisgICAgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBn
cmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpIGZpbmFsOworICAgIHZv
aWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGNvcHlU
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlUZXhTdWJJbWFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dM
aW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0gbW9kZSkgZmlu
YWw7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykgZmluYWw7CisgICAgdm9pZCBk
ZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykgZmluYWw7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdD
R0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikgZmluYWw7CisgICAgdm9pZCBkZXRhY2hT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCwgUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9p
ZCBkaXNhYmxlKEdDR0xlbnVtIGNhcCkgZmluYWw7CisgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpIGZpbmFsOworICAgIHZvaWQgZHJhd0FycmF5cyhHQ0dM
ZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpIGZpbmFsOworICAgIHZv
aWQgZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZW5hYmxlKEdDR0xlbnVt
IGNhcCkgZmluYWw7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBp
bmRleCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsKKyAgICB2b2lkIGZsdXNoKCkg
ZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCwgR0NHTGludCBsZXZlbCkgZmluYWw7CisgICAgdm9pZCBmcm9udEZhY2UoR0NH
TGVudW0gbW9kZSkgZmluYWw7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJn
ZXQpIGZpbmFsOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICBib29sIGdldEFj
dGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwg
QWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgZmluYWw7CisgICAgYm9vbCBn
ZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xzaXplaSogY291bnQsIFBs
YXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpOworICAgIEdDR0xpbnQgZ2V0QXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIGdl
dEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpIGZp
bmFsOworICAgIEdDR0xpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZpbmFsOworICAg
IHZvaWQgZ2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVl
KSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkgZmlu
YWw7CisgICAgdm9pZCBnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGlu
dD4gdmFsdWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjQoR0NHTGVudW0gcG5h
bWUpIGZpbmFsOworICAgIEdDR0xpbnQ2NCBnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBuYW1lLCBH
Q0dMdWludCBpbmRleCkgZmluYWw7CisgICAgR0NHTGludCBnZXRQcm9ncmFtaShQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgU3RyaW5nIGdldFVubWFu
Z2xlZEluZm9Mb2coUGxhdGZvcm1HTE9iamVjdFsyXSwgR0NHTHNpemVpLCBjb25zdCBTdHJpbmcm
KTsKKyAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTaGFkZXJpKFBsYXRmb3Jt
R0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5m
b0xvZyhQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25UeXBlLCBHQ0dM
U3BhbjxHQ0dMaW50LCAyPiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSBmaW5hbDsKKyAgICBT
dHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIFN0cmlu
ZyBnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkgZmluYWw7CisgICAgR0NHTGZsb2F0IGdldFRleFBh
cmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NH
TGludCBnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZp
bmFsOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkgZmluYWw7CisgICAgdm9p
ZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBnZXRVbmlmb3JtdWl2
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NH
THVpbnQ+IHZhbHVlKSBmaW5hbDsKKyAgICBHQ0dMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0
Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIGZpbmFsOworICAgIEdDR0xzaXplaXB0
ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKSBm
aW5hbDsKKyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKSBmaW5h
bDsKKyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAgICBHQ0dMYm9v
bGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIEdDR0xib29s
ZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBp
c1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBp
c1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RleHR1
cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBsaW5lV2lkdGgoR0NHTGZsb2F0
KSBmaW5hbDsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIGZpbmFs
OworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5p
dHMpIGZpbmFsOworICAgIHZvaWQgcmVhZG5QaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCByZWFkblBp
eGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBm
aW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSBm
aW5hbDsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29s
ZWFuIGludmVydCkgZmluYWw7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgc2hh
ZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIHZv
aWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2sp
IGZpbmFsOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dM
ZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBz
dGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSBmaW5hbDsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2Vw
YXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykgZmluYWw7CisgICAgdm9pZCBzdGVu
Y2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKSBmaW5h
bDsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZh
aWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykgZmluYWw7CisgICAgdm9pZCB0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+
IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7
CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCkgZmluYWw7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXpl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCBjb21wcmVz
c2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQg
Ym9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7Cisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhv
ZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0
KSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5hbDsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgpIGZpbmFsOwor
ICAgIHZvaWQgdW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xpbnQgeCkgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCB1
bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdikg
ZmluYWw7CisgICAgdm9pZCB1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB4LCBH
Q0dMaW50IHkpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zZihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6KSBmaW5h
bDsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0PiB2KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZv
cm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikgZmluYWw7
CisgICAgdm9pZCB1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgsIEdDR0xm
bG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpIGZpbmFs
OworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtNGl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpIGZpbmFsOworICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0
Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgeCkgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMT4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHkp
IGZpbmFsOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQg
eikgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xmbG9hdCwgMz4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6LCBHQ0dMZmxvYXQgdykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gdmFsdWVzKSBmaW5hbDsKKyAg
ICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwg
R0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwg
R0NHTGludHB0ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnQoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAg
dm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgZmluYWw7CisgICAgdm9pZCBkcmF3
QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBj
b3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxlbWVudHNJ
bnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgZmluYWw7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKSBmaW5h
bDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgZmluYWw7CisgICAg
dm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQg
YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOworICAgIHZvaWQgY29weUJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdD
R0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRy
KSBmaW5hbDsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3Jj
WDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQg
ZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIp
IGZpbmFsOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgbGF5ZXIpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZUZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRz
KSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgZmluYWw7CisgICAgdm9p
ZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykgZmluYWw7CisgICAgdm9pZCBnZXRJbnRlcm5hbGZv
cm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVz
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xz
aXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKSBmaW5hbDsKKyAgICB2
b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykgZmluYWw7CisgICAgdm9pZCB0ZXhJbWFn
ZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdD
R0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0
aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9p
ZD4gcGl4ZWxzKSBmaW5hbDsKKyAgICB2b2lkIHRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGlu
dCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZz
ZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQpIGZpbmFsOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkgZmluYWw7Cisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBH
Q0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkgZmluYWw7CisgICAg
R0NHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0xdWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjApIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybTJ1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9y
bTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50
IHYyKSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVp
bnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpIGZpbmFsOworICAg
IHZvaWQgdW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVp
bnQ+KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xT
cGFuPGNvbnN0IEdDR0x1aW50PikgZmluYWw7CisgICAgdm9pZCB1bmlmb3JtM3VpdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4pIGZpbmFsOworICAgIHZvaWQgdW5p
Zm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+KSBmaW5h
bDsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7Cisg
ICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHVu
aWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkgZmluYWw7CisgICAgdm9pZCB1bmlmb3Jt
TWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpIGZpbmFsOworICAgIHZvaWQgdW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aShH
Q0dMdWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3
KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xT
cGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykgZmluYWw7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6
LCBHQ0dMdWludCB3KSBmaW5hbDsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50
IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKSBmaW5hbDsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0
LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0
ciBvZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NH
TGVudW0+IGJ1ZnMpIGZpbmFsOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZm
ZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKSBm
aW5hbDsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2
b2lkIGNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQnVm
ZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0
aCwgR0NHTGludCBzdGVuY2lsKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVF1
ZXJ5KCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5
KSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkp
IGZpbmFsOworICAgIHZvaWQgYmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xP
YmplY3QgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KSBm
aW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUpIGZpbmFsOworICAgIEdDR0x1aW50IGdldFF1ZXJ5T2JqZWN0dWkoUGxhdGZv
cm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOworICAgIFBsYXRmb3JtR0xP
YmplY3QgY3JlYXRlU2FtcGxlcigpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlU2FtcGxlcihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU2FtcGxlcihQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpIGZpbmFsOworICAgIHZvaWQgYmluZFNhbXBsZXIoR0NH
THVpbnQgdW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKSBmaW5hbDsKKyAgICB2b2lkIHNh
bXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUs
IEdDR0xpbnQgcGFyYW0pIGZpbmFsOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmYoUGxhdGZv
cm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSBmaW5h
bDsKKyAgICBHQ0dMZmxvYXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBz
YW1wbGVyLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CisgICAgR0NHTGludCBnZXRTYW1wbGVyUGFy
YW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsK
KyAgICBHQ0dMc3luYyBmZW5jZVN5bmMoR0NHTGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQg
ZmxhZ3MpIGZpbmFsOworICAgIEdDR0xib29sZWFuIGlzU3luYyhHQ0dMc3luYykgZmluYWw7Cisg
ICAgdm9pZCBkZWxldGVTeW5jKEdDR0xzeW5jKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBjbGllbnRX
YWl0U3luYyhHQ0dMc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQp
IGZpbmFsOworICAgIHZvaWQgd2FpdFN5bmMoR0NHTHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywg
R0NHTGludDY0IHRpbWVvdXQpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0U3luY2koR0NHTHN5bmMs
IEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVRyYW5z
Zm9ybUZlZWRiYWNrKCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQ
bGF0Zm9ybUdMT2JqZWN0IGlkKSBmaW5hbDsKKyAgICBHQ0dMYm9vbGVhbiBpc1RyYW5zZm9ybUZl
ZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpIGZpbmFsOworICAgIHZvaWQgYmluZFRyYW5zZm9y
bUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkgZmluYWw7Cisg
ICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpIGZp
bmFsOworICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpIGZpbmFsOworICAg
IHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBmaW5hbDsKKyAgICB2b2lkIHBhdXNlVHJh
bnNmb3JtRmVlZGJhY2soKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZVRyYW5zZm9ybUZlZWRiYWNr
KCkgZmluYWw7CisgICAgdm9pZCBiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1
aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikgZmluYWw7CisgICAgdm9pZCBiaW5k
QnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpIGZpbmFsOworICAg
IFZlY3RvcjxHQ0dMdWludD4gZ2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKSBmaW5hbDsKKyAgICBWZWN0
b3I8R0NHTGludD4gZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpIGZp
bmFsOworICAgIEdDR0x1aW50IGdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKSBmaW5hbDsKKyAgICBTdHJp
bmcgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBmaW5hbDsKKyAgICB2b2lkIHVuaWZvcm1CbG9ja0Jp
bmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRl
eCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykgZmluYWw7CisgICAgdm9pZCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJ
bmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykgZmluYWw7Cisg
ICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dM
c2l6ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIG11bHRpRHJhd0FycmF5c0luc3Rh
bmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywg
R0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXpl
aT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworICAgIHZv
aWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
b2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtdWx0aURy
YXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBv
ZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6
ZWkgZHJhd2NvdW50KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZUJ1ZmZl
cigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKSBmaW5h
bDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBmaW5hbDsKKyAgICBQbGF0
Zm9ybUdMT2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGZpbmFsOworICAgIFBsYXRmb3JtR0xP
YmplY3QgY3JlYXRlU2hhZGVyKEdDR0xlbnVtKSBmaW5hbDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IGNyZWF0ZVRleHR1cmUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBmaW5h
bDsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKKyAgICB2b2lk
IGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBzeW50aGVz
aXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgYm9vbCBtb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKSBmaW5hbDsKKyAgICBFeHRlbnNpb25zR0wmIGdldEV4dGVuc2lv
bnMoKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2
ZW50Rm9yVGVzdGluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsKKyAgICB2b2lk
IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAg
IHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CisgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCk7Cisg
ICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOworICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5k
ZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworCisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CisjZW5kaWYKKyAgICB1bnNp
Z25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKTsKKworICAgIGNvbnN0ZXhwciBzdGF0
aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQ
TEFZOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZl
RGlzcGxheVR5cGUgbG93UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5
cGUsIC0xKTsKKyAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQ
ZXJmb3JtYW5jZURpc3BsYXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwor
I2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xFKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJs
aWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICAvLyBDYWxs
ZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRo
YXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2Vy
J3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKKyAgICAvLyBpbiBwYXJ0
aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBv
cgorICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMg
b2YgdGhlIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQgdmFsaWRhdGVE
ZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKKyAg
ICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgdm9pZCByZWFkblBpeGVsc0ltcGwo
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpKiBsZW5ndGgsIEdDR0xzaXplaSogY29sdW1ucywgR0NHTHNpemVpKiByb3dzLCBHQ0dMdm9p
ZCogZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCk7CisKKyAgICAvLyBEaWQg
dGhlIG1vc3QgcmVjZW50IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUgaW4gYW4gYWNj
ZXB0YWJsZSBzdGF0ZT8KKyAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsKKworICAgIGJv
b2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcHJlcGFyZVRleHR1cmVJ
bXBsKCk7CisgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IElu
dFJlY3QmID0gSW50UmVjdCgpKTsKKyAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZl
cklmTmVlZGVkKEdDR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpOworCisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIGFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZm
ZXJCYWNraW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CisgICAgc3RhdGljIGJv
b2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXksIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wpOworI2VuZGlmCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBjb250
ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgorICAgIGJvb2wgd2FpdEFuZFVwZGF0
ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgLy8gUGxhdGZvcm0gc3Bl
Y2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICBzdGF0aWMgdm9pZCBw
bGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKKworICAgIEdDR0x1aW50IG1fdGV4dHVy
ZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2ludGVybmFsQ29sb3JGb3JtYXQg
eyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCB7IDAgfTsK
KyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OworICAgIEdDR0x1aW50IG1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyIHsgMCB9OworICAgIC8vIEZvciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6
dHJ1ZSB3aXRob3V0IG11bHRpc2FtcGxpbmcuCisgICAgR0NHTHVpbnQgbV9wcmVzZXJ2ZURyYXdp
bmdCdWZmZXJUZXh0dXJlIHsgMCB9OworICAgIC8vIEF0dGFjaGVzIG1fdGV4dHVyZSB3aGVuIG1f
cHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSBpcyBub24temVyby4KKyAgICBHQ0dMdWludCBt
X3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyB7IDAgfTsKKyAgICAvLyBRdWVyaWVkIGF0IGRpc3Bs
YXkgc3RhcnR1cC4KKyAgICBFR0xpbnQgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCB7IC0x
IH07CisgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgorICAgIExp
c3RIYXNoU2V0PEdDR0xlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKyAgICBib29sIG1faXNGb3JX
ZWJHTDIgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3VudCB7IDAgfTsK
KyAgICBib29sIG1fZmFpbE5leHRTdGF0dXNDaGVjayB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Vz
ZUZlbmNlU3luY0ZvckRpc3BsYXlSYXRlTGltaXQgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKKyAgICBzaXplX3QgbV9vbGRlc3RGcmFt
ZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKKyAgICBTY29wZWRHTEZlbmNlIG1fZnJhbWVDb21wbGV0
aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOworICAgIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUg
bV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5HTEU+IG1fZXh0ZW5z
aW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJm
YWNlU3dhcENoYWluIG1fc3dhcENoYWluOworICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsg
bnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsg
bnVsbHB0ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWdP
YmogeyBudWxscHRyIH07CisgICAgLy8gQmFja2luZyBzdG9yZSBmb3IgdGhlIHRoZSBidWZmZXIg
d2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5LgorICAgIC8vIFdoZW4gcHJlc2Vy
dmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBkcmF3aW5nIGJ1ZmZlciBiYWNr
aW5nIHN0b3JlLgorICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IHRydWUsIHRo
aXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJlLgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IG1fZGlzcGxheUJ1ZmZlckJhY2tpbmc7CisgICAgdm9pZCogbV9kaXNw
bGF5QnVmZmVyUGJ1ZmZlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBib29sIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24geyBmYWxzZSB9
OworICAgIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgbV9oaWdoUGVyZm9ybWFuY2VH
UFVSZXF1ZXN0OworI2VuZGlmCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIEdD
R0x1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm1l
ZGlhdGVUZXh0dXJlIHsgMCB9OworI2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisgICAgc3RkOjp1
bmlxdWVfcHRyPE5pY29zaWE6OkdDR0xMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKKyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIEV4
dGVuc2lvbnNHTEFOR0xFOworI2lmIFVTRShOSUNPU0lBKQorICAgIGZyaWVuZCBjbGFzcyBOaWNv
c2lhOjpHQ0dMTGF5ZXI7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgZnJpZW5kIGNs
YXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyNlbmRpZgorfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXggY2NjYjU3MjRhNGNk
OTJmZjBiZjhlNzM4M2M1ZDlmZTY4OWQ3N2I4Ni4uNGQ1OWNiMTJjNWU0NDc1MzdkZTBhZWUyMTBk
ZTAwMmNiZDc5ZmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKQEAgLTEw
Niw3ICsxMDYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJh
Y3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFBpeGVs
QnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50VG9DYW52YXMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRl
cywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVCghcGl4ZWxCdWZmZXIuc2l6
ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcAppbmRleCBmNzlmMjJlMzEzZWExMTczODljNWY0MDlkZDBmNDk0YWUxNWFlYjkz
Li5hZjRjMTdkNTFmYTU5ZjQ2ODhkZjQzOTY1MzUxOGY1Y2EwZGFhZjIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFn
ZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50
VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0
QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRH
TDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJj
ZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJU
KCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBpZiAoY2FudmFzU2l6ZS5pc0Vt
cHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRHTENvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLmgKaW5kZXggMjU1NWZmMDgzMjhlMzQ2
OWNkN2E0YTI5N2RiZWY3OTBmNjMwNTI4OC4uZTQwOTVhMmIxOWUyNGQxZGI4MDljMTgyZjY0MzJi
ZGMwY2I3ODZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApAQCAtMjcsMTIgKzI3
LDE4IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKICNpbmNsdWRl
ICJJT1N1cmZhY2UuaCIKIAorI2lmIEVOQUJMRShWSURFTykKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMQ29jb2Eg
OiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgeworY2xhc3MgV0VCQ09SRV9FWFBPUlQg
R3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMQ29jb2E+IGNyZWF0
ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAgfkdyYXBoaWNz
Q29udGV4dEdMQ29jb2EoKTsKQEAgLTQ5LDE0ICs1NSwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwogI2VuZGlmCiAK
LSAgICAvLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBvdmVycmlkZXMuCisgICAgLy8gR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRSBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0IG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGNvcHlU
ZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBmbGlwWSkgZmluYWw7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pCisgICAgR3JhcGhpY3ND
b250ZXh0R0xDViogYXNDVigpIGZpbmFsOworI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlKCkgZmluYWw7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHN0ZDo6dW5pcXVl
X3B0cjxHcmFwaGljc0NvbnRleHRHTENWQ29jb2E+IG1fY3Y7CisjZW5kaWYKKyAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29u
dGV4dEdMQ29jb2EubW0KaW5kZXggMTFiYTEyMmI3YTM3ZmE3MTc2ZGM1Mzc1NDA3MmM3N2VjYjIx
OWUzOS4uMDI5Y2MzZmFlNDdmODcwMjNjNWMzMDIyNWUwMjU5YTA0MWYwZDY2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0
R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9H
cmFwaGljc0NvbnRleHRHTENvY29hLm1tCkBAIC00OCw3ICs0OCw3IEBACiAjZW5kaWYKIAogI2lm
IEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCIKICNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGUuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgcGxhdGZvcm1Jc0FO
R0xFQXZhaWxhYmxlKCkKIC8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpID09IHRy
dWUgY2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGluIHNpbmdsZS10aHJlYWRlZCBtYW5u
ZXIuCiAvLyBJbiBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSA9PSBmYWxzZSBjYXNlIHRo
aXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGJ1dCBhbHdheXMg
c2VxdWVudGlhbGx5CiAvLyBhbmQgaXQgYWx3YXlzIGNvbnRhaW5zIG51bGxwdHIgYW5kIG51bGxw
dHIgaXMgYWx3YXlzIHdyaXR0ZW4gdG8gaXQuCi1zdGF0aWMgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGN1cnJlbnRDb250ZXh0Oworc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUqIGN1cnJl
bnRDb250ZXh0OwogCiBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKQog
ewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFR0xEaXNwbGF5IGluaXRpYWxpemVFR0xEaXNw
bGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAgfQogCiAg
ICAgTE9HKFdlYkdMLCAiQXR0ZW1wdGluZyB0byB1c2UgQU5HTEUncyAlcyBiYWNrZW5kLiIsIGF0
dHJzLnVzZU1ldGFsID8gIk1ldGFsIiA6ICJPcGVuR0wiKTsKLSAgICBFR0xOYXRpdmVEaXNwbGF5
VHlwZSBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlZmF1bHREaXNw
bGF5OworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpkZWZhdWx0RGlzcGxheTsKICAgICBpZiAoYXR0cnMudXNlTWV0YWwpIHsK
ICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9BTkdMRV9UWVBF
X0FOR0xFKTsKICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX01FVEFMX0FOR0xFKTsKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0YXRpYyBFR0xE
aXNwbGF5IGluaXRpYWxpemVFR0xEaXNwbGF5KGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyYgYXR0cnMpCiAgICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyKSB7CiAgICAgICAgICAg
ICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwog
ICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9XRVJfQU5HTEUp
OwotICAgICAgICAgICAgbmF0aXZlRGlzcGxheSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjps
b3dQb3dlckRpc3BsYXk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6bG93UG93ZXJEaXNwbGF5OwogICAgICAgICB9IGVsc2UgaWYgKHBvd2VyUHJl
ZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJlZmVyZW5jZTo6
SGlnaFBlcmZvcm1hbmNlKSB7CiAgICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQo
RUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwogICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9ISUdIX1BPV0VSX0FOR0xFKTsKLSAgICAgICAgICAgIG5hdGl2ZURpc3Bs
YXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGlnaFBlcmZvcm1hbmNlRGlzcGxheTsKKyAg
ICAgICAgICAgIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpoaWdoUGVy
Zm9ybWFuY2VEaXNwbGF5OwogICAgICAgICB9CiAgICAgfQogICAgIGRpc3BsYXlBdHRyaWJ1dGVz
LmFwcGVuZChFR0xfTk9ORSk7CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKQogfQogCiBHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xBTkdMRShXVEZN
b3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCiAvLyBGSVhNRTogQmVsb3cgaXMgZnVuY3Rpb25hbGl0
eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29hIHRvIHNpbXBs
aWZ5IHRoZSBiYXNlIGNsYXNzLgogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzKQorR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRycykKIHsKICAg
ICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdM
V2ViR0xWZXJzaW9uOjpXZWJHTDI7CkBAIC0zNTYsNyArMzU2LDcgQEAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyBhdHQKICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVuc2lvbik7CiAg
ICAgfQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0gICAgICAgIC8v
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRp
c3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAvLyBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0YWwg
aW1wbGVtZW50YXRpb25zLgogICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3RzIGFyZSBub3Qg
c2lnbmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVycywgc28KICAg
ICAgICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0bGluZy4gT3Bl
bkdMIGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAogICAgICAgICAvLyBzb21lIHNvcnQgb2Yg
aW50ZXJuYWwgdGhyb3R0bGluZy4KQEAgLTQxMCwxMCArNDEwLDEwIEBAIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgYXR0CiAKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIAotICAgIExPRyhX
ZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRoaXMpOwor
ICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICglcCkuIiwg
dGhpcyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0woKQorR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUo
KQogewogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigp
LnJlbW92ZUNvbnRleHQodGhpcyk7CiAgICAgaWYgKG1ha2VDb250ZXh0Q3VycmVudCgpKSB7CkBA
IC00NTQsNyArNDU0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCgpCiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCAhPSB0aGlzKTsK
ICAgICBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID0gLTE7Ci0gICAgTE9HKFdlYkdMLCAi
RGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlzKTsKKyAgICBM
T0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTEFOR0xFICglcCkuIiwgdGhp
cyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgpIGNvbnN0CkBA
IC00NjIsMTIgKzQ2MiwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmlzVmFsaWQo
KSBjb25zdAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CiAKLVBsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIq
IEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4dEN1
cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNv
bnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xF
OjpjaGVja0dQVVN0YXR1cygpCiB7CiAgICAgaWYgKG1fZmFpbE5leHRTdGF0dXNDaGVjaykgewog
ICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0ICglcCkuIExv
c2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogICAgIHJlc3RhcnRTdGF0dXMgPSAw
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0
eShib29sIGlzVmlzaWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6c2V0Q29udGV4
dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlm
ICghbV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKQEAgLTUyMCw3ICs1MjAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShi
b29sIGlzVmlzaWJsZSkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6
ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmICht
X3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQpAQCAtNTI5LDcgKzUyOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQog
ICAgIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsK
ICAgICBBU1NFUlQoIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAg
ICAvLyBSZXNldCB0aGUgY3VycmVudCBiYWNrYnVmZmVyIG5vdyBiZWZvcmUgYWxsb2NhdGluZyBh
IG5ldyBvbmUgaW4gb3JkZXIgdG8gc2xpZ2h0bHkgcmVkdWNlIG1lbW9yeSBwcmVzc3VyZS4KQEAg
LTU0Nyw3ICs1NDcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlz
cGxheUJ1ZmZlckJhY2tpbmcoKQogICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVm
ZmVyQmFja2luZygpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0
ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEU6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAgICBBU1NFUlQo
IWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKICAgICBhdXRvIGJhY2tp
bmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CkBAIC01NzYsNyArNTc2LDcgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
KQogICAgIHJldHVybiBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShiYWNraW5nKSwg
cGJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmREaXNwbGF5
QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBw
YnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpiaW5kRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcikK
IHsKICAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQoKTsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4dHVyZVRhcmdl
dCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJC
KTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDdXJy
ZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0wgY29udGV4dCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7
CiAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdM
X05PX1NVUkZBQ0UsIGNvbnRleHQpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNw
bGF5IGRpc3BsCiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNobWVudFVzYWdl
IHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0NHTHVpbnQg
cGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgeworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewogICAgICAgICBM
T0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19jYXN0PGludD4o
dGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTY2NywyNCArNjY3
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1cmZhY2VGcm9tU2hh
cmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNG
b3JXZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZl
bnRGb3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsKLSAgICBpZiAo
ZXZlbnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3Bs
YXlXYXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZXZl
bnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKSB7Ci0gICAg
ICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXkoKQogewogICAg
IGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI0LDE1ICs3MDcs
MTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQog
CiAKICNpZiBFTkFCTEUoVklERU8pCi1HcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YXNDVigpCitHcmFwaGljc0NvbnRleHRHTENWKiBHcmFwaGljc0NvbnRleHRH
TENvY29hOjphc0NWKCkKIHsKICAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3YgPSBHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1fY3YgPSBHcmFwaGlj
c0NvbnRleHRHTENWQ29jb2E6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1fY3YuZ2V0KCk7
CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogewog
ICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCk7CiAg
ICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQpA
QCAtNzY0LDcgKzc0Nyw3IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogfQogCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBs
ZT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFT
YW1wbGUoKQogewogICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5
QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZm
ZXIuaGFuZGxlKQpAQCAtNzc5LDcgKzc2Miw3IEBAIFJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlCiB9
CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1SZWxlYXNl
VGhyZWFkUmVzb3VyY2VzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1S
ZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKIHsKICAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7
CiB9CkBAIC04MDEsMTIgKzc4NCwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNv
cHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtRwogfQogI2Vu
ZGlmCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb25maWdPYmo7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0Nv
bnRleHRHTENWQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGJjNjBmMmE3Y2ZjNTEzODBiMTc5OGU4YjY2Y2EwNmZlN2Q0YTg2NC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKSAm
JiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNpbmNsdWRlICJBTkdMRVV0
aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSAiRm91ckNDLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8cGFsL3Nw
aS9jZi9Db3JlVmlkZW9TUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQ
SS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TY29w
ZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRNYXAuaD4KLSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3Rz
Q0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpbmNsdWRlICJD
b3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25z
dGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRCB7Ci0gICAgImF0dHJpYnV0ZSB2
ZWMyIGFfcG9zaXRpb247IgotICAgICJ1bmlmb3JtIHZlYzIgdV95VGV4dHVyZVNpemU7IgotICAg
ICJ1bmlmb3JtIHZlYzIgdV91dlRleHR1cmVTaXplOyIKLSAgICAidW5pZm9ybSBpbnQgdV9mbGlw
WTsiCi0gICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZhcnlp
bmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAgICAi
eyIKLSAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3Bvc2l0aW9uLCAwLCAxLjApOyIKLSAg
ICAiICAgIHZlYzIgbm9ybWFsaXplZFBvc2l0aW9uID0gYV9wb3NpdGlvbiAqIC41ICsgLjU7Igot
ICAgICIgICAgaWYgKHVfZmxpcFkgPT0gMSkiCi0gICAgIiAgICAgICAgbm9ybWFsaXplZFBvc2l0
aW9uLnkgPSAxLjAgLSBub3JtYWxpemVkUG9zaXRpb24ueTsiCi0gICAgIiAgICB2X3lUZXh0dXJl
Q29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCi0gICAgIiAgICB2X3V2VGV4dHVyZUNv
b3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247IgotICAgICJ9Il9zCi19OwotCi1zdGF0aWMg
Y29uc3RleHByIGF1dG8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKLSAgICAi
YXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0dXJl
U2l6ZTsiCi0gICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgotICAgICJ1bmlmb3Jt
IGludCB1X2ZsaXBZOyIKLSAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIK
LSAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZvaWQgbWFp
bigpIgotICAgICJ7IgotICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24sIDAs
IDEuMCk7IgotICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9uICog
LjUgKyAuNTsiCi0gICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKLSAgICAiICAgICAgICBub3Jt
YWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKLSAgICAiICAg
IHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uICogdV95VGV4dHVyZVNp
emU7IgotICAgICIgICAgdl91dlRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9u
ICogdV91dlRleHR1cmVTaXplOyIKLSAgICAifSJfcwotfTsKLQotY29uc3RleHByIGF1dG8gc195
dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OyIKLSAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV95VGV4dHVyZTsiCi0gICAgInVuaWZvcm0gc2Ft
cGxlcjJEIHVfdXZUZXh0dXJlOyIKLSAgICAidW5pZm9ybSBtYXQ0IHVfY29sb3JNYXRyaXg7Igot
ICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2YXJ5aW5nIHZl
YzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIKLSAgICAidm9pZCBtYWluKCkiCi0gICAgInsiCi0g
ICAgIiAgICB2ZWM0IHl1djsiCi0gICAgIiAgICB5dXYuciA9IHRleHR1cmUyRCh1X3lUZXh0dXJl
LCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0ZXh0dXJlMkQo
dV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSkucmc7IgotICAgICIgICAgeXV2LmEg
PSAxLjA7IgotICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2ICogdV9jb2xvck1hdHJpeDsiCi0g
ICAgIn0iX3MKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVy
VGV4dHVyZVJlY3RhbmdsZSB7Ci0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyIKLSAgICAi
dW5pZm9ybSBzYW1wbGVyMkRSZWN0IHVfeVRleHR1cmU7IgotICAgICJ1bmlmb3JtIHNhbXBsZXIy
RFJlY3QgdV91dlRleHR1cmU7IgotICAgICJ1bmlmb3JtIG1hdDQgdV9jb2xvck1hdHJpeDsiCi0g
ICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCi0gICAgInZhcnlpbmcgdmVj
MiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgotICAgICJ2b2lkIG1haW4oKSIKLSAgICAieyIKLSAg
ICAiICAgIHZlYzQgeXV2OyIKLSAgICAiICAgIHl1di5yID0gdGV4dHVyZTJEUmVjdCh1X3lUZXh0
dXJlLCB2X3lUZXh0dXJlQ29vcmRpbmF0ZSkucjsiCi0gICAgIiAgICB5dXYuZ2IgPSB0ZXh0dXJl
MkRSZWN0KHVfdXZUZXh0dXJlLCB2X3V2VGV4dHVyZUNvb3JkaW5hdGUpLnJnOyIKLSAgICAiICAg
IHl1di5hID0gMS4wOyIKLSAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHl1diAqIHVfY29sb3JNYXRy
aXg7IgotICAgICJ9Il9zCi19OwotCi1lbnVtIGNsYXNzIFBpeGVsUmFuZ2UgewotICAgIFVua25v
d24sCi0gICAgVmlkZW8sCi0gICAgRnVsbCwKLX07Ci0KLWVudW0gY2xhc3MgVHJhbnNmZXJGdW5j
dGlvbkNWIHsKLSAgICBVbmtub3duLAotICAgIGtJVFVfUl83MDlfMiwKLSAgICBrSVRVX1JfNjAx
XzQsCi0gICAga1NNUFRFXzI0ME1fMTk5NSwKLSAgICBrRENJX1AzLAotICAgIGtQM19ENjUsCi0g
ICAga0lUVV9SXzIwMjAsCi19OwotCi1zdGF0aWMgUGl4ZWxSYW5nZSBwaXhlbFJhbmdlRnJvbVBp
eGVsRm9ybWF0KE9TVHlwZSBwaXhlbEZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKHBpeGVsRm9ybWF0
KSB7Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3I4OgotICAgIGNhc2Ug
a0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NDRBWXBDYkNyMTY6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfNDIyWXBDYkNyXzRBXzhCaVBsYW5hcjoKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlw
ZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRU
eXBlXzQyMFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMllwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxG
b3JtYXRUeXBlXzQ0NFlwQ2JDcjEwQmlQbGFuYXJWaWRlb1JhbmdlOgotI2lmIEhBVkUoQ09SRVZJ
REVPX0NPTVBSRVNTRURfUElYRUxfRk9STUFUX1RZUEVTKQotICAgIGNhc2Uga0NWUGl4ZWxGb3Jt
YXRUeXBlX0FHWF80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlOgotI2VuZGlmCi0gICAgICAg
IHJldHVybiBQaXhlbFJhbmdlOjpWaWRlbzsKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjBZcENiQ3I4UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjJZcENiQ3I4RnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlX0FSR0IyMTAx
MDEwTEVQYWNrZWQ6Ci0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBs
YW5hckZ1bGxSYW5nZToKLSAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3IxMEJp
UGxhbmFyRnVsbFJhbmdlOgotICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBlXzQ0NFlwQ2JDcjEw
QmlQbGFuYXJGdWxsUmFuZ2U6Ci0jaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9G
T1JNQVRfVFlQRVMpCi0gICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhC
aVBsYW5hckZ1bGxSYW5nZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6RnVs
bDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGl4ZWxSYW5nZTo6VW5rbm93bjsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNmZXJGdW5jdGlvbkZyb21T
dHJpbmcoQ0ZTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQotICAgICAgICBy
ZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOwotICAgIGlmIChDRkVxdWFsKHN0cmlu
Zywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMikpCi0gICAgICAgIHJldHVy
biBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMjsKLSAgICBpZiAoQ0ZFcXVhbChzdHJp
bmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQpKQotICAgICAgICByZXR1
cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQ7Ci0gICAgaWYgKENGRXF1YWwoc3Ry
aW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NSkpCi0gICAgICAg
IHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTU7Ci0gICAgaWYgKGNh
bkxvYWRfQ29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKCkgJiYgQ0ZF
cXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfRENJX1AzKSkKLSAgICAgICAg
cmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0RDSV9QMzsKLSAgICBpZiAoY2FuTG9hZF9Db3Jl
VmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKSAmJiBDRkVxdWFsKHN0cmlu
Zywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUpKQotICAgICAgICByZXR1cm4gVHJh
bnNmZXJGdW5jdGlvbkNWOjprUDNfRDY1OwotICAgIGlmIChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJ
bWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKSAmJiBDRkVxdWFsKHN0cmluZywga0NW
SW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKSkKLSAgICAgICAgcmV0dXJuIFRyYW5z
ZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzIwMjA7Ci0gICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25D
Vjo6VW5rbm93bjsKLX0KLQotc3RydWN0IEdMZmxvYXRDb2xvciB7Ci0gICAgdW5pb24gewotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0xmbG9hdCByOwotICAgICAgICAgICAgR0xmbG9h
dCBnOwotICAgICAgICAgICAgR0xmbG9hdCBiOwotICAgICAgICB9IHJnYjsKLSAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgIEdMZmxvYXQgeTsKLSAgICAgICAgICAgIEdMZmxvYXQgY2I7Ci0g
ICAgICAgICAgICBHTGZsb2F0IGNyOwotICAgICAgICB9IHljYmNyOwotICAgIH07Ci0KLSAgICBj
b25zdGV4cHIgR0xmbG9hdENvbG9yKEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZsb2F0IGIpCi0g
ICAgICAgIDogcmdiIHsgciwgZywgYiB9Ci0gICAgewotICAgIH0KLQotICAgIGNvbnN0ZXhwciBH
TGZsb2F0Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgR0xmbG9hdCBzY2FsZSkKLSAgICAgICAg
OiByZ2IgeyByIC8gc2NhbGUsIGcgLyBzY2FsZSwgYiAvIHNjYWxlfQotICAgIHsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVlOwotICAgIH0KLQotICAg
IGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgR0xmbG9hdENvbG9y
JiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
YnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCi0gICAgICAgICAgICAmJiBh
YnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCi0gICAgICAgICAgICAmJiBh
YnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwotICAgIH0KLX07Ci0KLXN0
cnVjdCBHTGZsb2F0Q29sb3JzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBi
bGFjayAgIHswLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB3aGl0
ZSAgIHsxLCAxLCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciByZWQgICAg
IHsxLCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBncmVlbiAgIHsw
LCAxLCAwfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBibHVlICAgIHswLCAw
LCAxfTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBjeWFuICAgIHswLCAxLCAx
fTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciBtYWdlbnRhIHsxLCAwLCAxfTsK
LSAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXRDb2xvciB5ZWxsb3cgIHsxLCAxLCAwfTsKLX07
Ci0KLXN0cnVjdCBZQ2JDck1hdHJpeCB7Ci0gICAgICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKLQot
ICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2ll
bnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7Ci0KLSAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0
KigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07Ci0gICAgfQotCi0g
ICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikg
Y29uc3Q7Ci19OwotCi1jb25zdGV4cHIgWUNiQ3JNYXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFu
Z2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVudCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQot
ICAgIDogcm93cyB7IH0KLXsKLSAgICAvLyBUaGUgY29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJH
QiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Ci0gICAgLy8gWSA9IEtyICogUiArIEtnICogRyAr
IEtiICogQgotICAgIC8vIENiID0gKEIgLSBZKSAvICgyICogKDEgLSBLYikpCi0gICAgLy8gQ3Ig
PSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKLSAgICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEti
IGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNpZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQg
ZnJvbTogS3IgKyBLZyArIEtiID0gMQotICAgIC8vCi0gICAgLy8gU29sdmluZyB0aGUgYWJvdmUg
ZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJpdmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8g
UiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCi0gICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2Ip
KSAqIENiCi0gICAgLy8gRyA9IFkgLSAoMiAqICgxIC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0g
KCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBDcgotICAgIC8vCi0gICAgLy8gV2hlbiB0aGUg
Y29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwgWSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0g
d2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYgQ3IgaGF2ZQotICAgIC8vIGEgcmFuZ2Ugb2Yg
WzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQuIFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUg
RnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwgaGF2ZQotICAgIC8vIGEgcmFuZ2Ugb2YgWzAs
IDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KLQotICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9
IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmljaWVudDsKLSAgICBHTGZsb2F0IHlTY2FsaW5n
RmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7
Ci0gICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3RvciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1
bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOwotCi0gICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFj
dG9yOwotICAgIHJvd3NbMF1bMV0gPSAwOwotICAgIHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0Zh
Y3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpOwotICAgIHJvd3NbMF1bM10gPSAwOwotCi0g
ICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9yOwotICAgIHJvd3NbMV1bMV0gPSAtY2JjclNj
YWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8g
Y2dDb2VmZmljaWVudCk7Ci0gICAgcm93c1sxXVsyXSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIg
KiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29lZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsK
LSAgICByb3dzWzFdWzNdID0gMDsKLQotICAgIHJvd3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsK
LSAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNp
ZW50KTsKLSAgICByb3dzWzJdWzJdID0gMDsKLSAgICByb3dzWzJdWzNdID0gMDsKLQotICAgIHJv
d3NbM11bMF0gPSAwOwotICAgIHJvd3NbM11bMV0gPSAwOwotICAgIHJvd3NbM11bMl0gPSAwOwot
ICAgIHJvd3NbM11bM10gPSAxOwotCi0gICAgLy8gQ29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4g
b2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFuZCBDciB0byBbLTEyOCwgMTI4XQotICAgIC8v
IGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFuZ2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0
MF06Ci0gICAgZm9yIChhdXRvIHJvd051bWJlciA9IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVt
YmVyKSB7Ci0gICAgICAgIGF1dG8mIHJvdyA9IHJvd3Nbcm93TnVtYmVyXTsKLSAgICAgICAgYXV0
byYgeCA9IHJvd1swXTsKLSAgICAgICAgYXV0byYgeSA9IHJvd1sxXTsKLSAgICAgICAgYXV0byYg
eiA9IHJvd1syXTsKLSAgICAgICAgYXV0byYgdyA9IHJvd1szXTsKLQotICAgICAgICB3IC09ICh5
ICsgeikgKiAxMjggLyAyNTU7Ci0gICAgICAgIGlmIChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRl
bykKLSAgICAgICAgICAgIHcgLT0geCAqIDE2IC8gMjU1OwotICAgIH0KLX0KLQotY29uc3RleHBy
IEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYg
Y29sb3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMZmxvYXRDb2xvcigKLSAgICAgICAgcm93c1sw
XVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsy
XSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwKLSAgICAgICAgcm93c1sxXVswXSAqIGNvbG9y
LnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJn
Yi5iICsgcm93c1sxXVszXSwKLSAgICAgICAgcm93c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93
c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1syXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sy
XVszXQotICAgICk7Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4
Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVu
Y3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFp
cjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwotICAgIHVzaW5nIE1hdHJpeE1hcCA9
IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47Ci0KLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2VUb2tlbjsKLQotICAgIC8vIE1hdHJpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBv
bmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBzcGVjaWZpY2F0aW9uCi0gICAgLy8gaHR0cHM6
Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAxCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JD
ck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5
OWYgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsg
UGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5OWYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwg
MTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0
ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8g
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYp
LCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAg
IHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAg
MTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywg
IDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxs
b3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0
Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0
Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNf
YXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAy
NTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAx
MjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0
ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3
aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIxLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwg
InIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0
YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDks
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNv
bG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3Io
MTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUg
ZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lm
aWNhdGlvbgotICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5
OTUxMC1TCi0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXgg
eyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAwLjIxMjYgfTsKLSAgICBjb25zdGV4cHIgc3Rh
dGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIy
LCAwLjIxMjYgfTsKLQotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUp
KS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAy
NTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0
MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Z3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRl
b01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2
aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1
KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8g
MjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xv
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
ODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBjeWFuIGNvbG9yIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJp
eCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgocjcw
OUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43
MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1
NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAv
IDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAz
MCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVl
biwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBn
cmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9h
dENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0
cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYp
LCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcs
IDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAg
ICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFu
IGNvbG9yIik7Ci0KLSAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25l
bnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3BlY2lmaWNhdGlvbgotICAgIC8vIGh0dHBzOi8v
d3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAKLSAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNy
TWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4y
NjI3IH07Ci0gICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4
IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAwLjI2MjcgfTsKLQotICAgIHN0YXRpY19hc3Nl
cnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1
NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigy
MzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRy
aXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRl
byBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7
Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjks
ICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSBibHVlIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3Ii
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigx
NzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6
OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGN5YW4gY29sb3IiKTsKLQotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUu
ZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAg
OTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVk
LCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSByZWQgY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXgg
ZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAy
MEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUsICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQu
MjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsdWUgY29sb3IiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgs
IDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41
ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cg
Y29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENv
bG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIw
IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgY3lhbiBjb2xvciIpOwotCi0gICAgLy8gTWF0
cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0x
OTk5IHNwZWNpZmljYXRpb24KLSAgICAvLyBodHRwOi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1
bWVudC83MjkxNDYxLwotICAgIGNvbnN0ZXhwciBzdGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBN
VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wODcsIDAuMjEyIH07Ci0gICAgY29u
c3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5n
ZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1W
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBU
RSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAx
MjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0
ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJv
ZHVjZSB3aGl0ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0
cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAyNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0g
dmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fz
c2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVm
IC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVl
biBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xm
bG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0
cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNt
cHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5m
KSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9y
Iik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7Ci0K
LSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAs
ICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6
YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBibGFjayBjb2xvciIpOwotICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7Ci0gICAgc3RhdGlj
X2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2
LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEu
NWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVk
IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChzbXB0
ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwg
IlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMs
IDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Onll
bGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgeWVsbG93IGNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1h
dHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwgMjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlF
cXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBN
IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEs
ICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAx
LjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5
YW4gY29sb3IiKTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKLSAgICAgICAg
bWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVy
RnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYwMVZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0
cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5j
dGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVsbE1hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2Vz
LmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01hdHJpeCk7Ci0gICAgICAgIG1hdHJpY2VzLmdl
dCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6
a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5l
bXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRV
X1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsKLSAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1w
bGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1Jf
MjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNl
KE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJhbnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQw
TV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgpOwotICAgICAgICBtYXRyaWNlcy5nZXQoKS5l
bXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxsLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBU
RV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0cml4KTsKLSAgICB9KTsKLQotICAgIC8vIFdl
IHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5kbGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFu
Z2UgdmFsdWUgaXMgdW5rbm93bi4KLSAgICBBU1NFUlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5r
bm93bik7Ci0gICAgaWYgKHJhbmdlID09IFBpeGVsUmFuZ2U6OlVua25vd24pCi0gICAgICAgIHJh
bmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5n
ZXQoKS5maW5kKHtyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbn0pOwotCi0gICAgLy8gQXNzdW1lIHVu
a25vd24gdHJhbnNmZXIgZnVuY3Rpb25zIGFyZSByLjYwMToKLSAgICBpZiAoaXRlcmF0b3IgPT0g
bWF0cmljZXMuZ2V0KCkuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yID0gbWF0cmljZXMuZ2V0KCku
ZmluZCh7cmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80fSk7Ci0KLSAgICBB
U1NFUlQoaXRlcmF0b3IgIT0gbWF0cmljZXMuZ2V0KCkuZW5kKCkpOwotICAgIHJldHVybiBpdGVy
YXRvci0+c2Vjb25kOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFPiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYgY29udGV4dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFPiBjdiB7IG5ldyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoY29udGV4dCkgfTsKLSAg
ICBpZiAoIWN2LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBjdjsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjp+R3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7Ci0gICAgZ2w6OkRl
bGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7Ci0gICAgRUdMX0Rlc3Ryb3lDb250
ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
OjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG93bmVy
KQotICAgIDogbV9vd25lcihvd25lcikKLXsKLSAgICAvLyBDcmVhdGUgY29tcGF0aWJsZSBjb250
ZXh0IHRoYXQgc2hhcmVzIHN0YXRlIHdpdGggb3duZXIsIGJ1dCBvbmUgdGhhdCBkb2VzIG5vdAot
ICAgIC8vIGhhdmUgcm9idXN0bmVzcyBvciBXZWJHTCBjb21wYXRpYmlsaXR5LgotICAgIGNvbnN0
IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfQ09OVEVYVF9DTElF
TlRfVkVSU0lPTiwKLSAgICAgICAgb3duZXIubV9pc0ZvcldlYkdMMiA/IDMgOiAyLAotICAgICAg
ICBFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUsCi0gICAgICAg
IEVHTF9GQUxTRSwKLSAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19FTkFCTEVEX0FO
R0xFLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9DT05URVhUX0JJTkRfR0VORVJB
VEVTX1JFU09VUkNFX0NIUk9NSVVNLAotICAgICAgICBFR0xfRkFMU0UsCi0gICAgICAgIEVHTF9O
T05FCi0gICAgfTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBvd25lci5wbGF0Zm9ybURpc3Bs
YXkoKTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gb3duZXIucGxhdGZvcm1Db25maWcoKTsKLSAg
ICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5LCBjb25maWcs
IG93bmVyLm1fY29udGV4dE9iaiwgY29udGV4dEF0dHJpYnV0ZXMpOwotICAgIGlmIChjb250ZXh0
ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIGNvbnRleHQpOwotCi0gICAgYXV0byBjb250
ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXksIGNvbnRleHRdIHsKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KGRpc3BsYXksIEVHTF9OT19DT05U
RVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KGRpc3BsYXksIGNvbnRleHQpOwotICAg
IH0pOwotCi0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBtX293bmVyLmRyYXdpbmdCdWZm
ZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKLQotI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKCF1c2VUZXh0dXJlMkQpIHsKLSAgICAg
ICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUi
KTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGlmIChnbDo6R2V0RXJyb3IoKSAhPSBHTF9OT19FUlJP
UikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdMaW50IHZlcnRl
eFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgR0xpbnQg
ZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0g
ICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotICAgIGF1dG8gcHJv
Z3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVy
LCB5dXZQcm9ncmFtXSB7Ci0gICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsK
LSAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIGdsOjpE
ZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIH0pOwotICAgIC8vIFRoZXNlIGFyZSB3cml0
dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCi0gICAgR0xpbnQgdnNMZW5ndGgg
PSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNf
eXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBHTGludCBmc0xl
bmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQubGVuZ3Ro
KCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKLSAgICBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRl
eFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZTsKLSAg
ICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUyRCA/IHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3Rh
bmdsZTsKLQotICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hh
ZGVyU291cmNlLCAmdnNMZW5ndGgpOwotICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFk
ZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKLSAgICBnbDo6Q29tcGls
ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKGZyYWdtZW50U2hh
ZGVyKTsKLSAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0g
ICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2w6
OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOwotICAgIC8vIExpbmsgc3RhdHVzIGlzIGNoZWNrZWQg
YWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24gYmVuZWZpdC4K
LQotICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOwotICAgIGdsOjpHZW5CdWZmZXJzKDEs
ICZ5dXZWZXJ0ZXhCdWZmZXIpOwotICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xlYW51cCA9IG1h
a2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVsZXRlQnVmZmVy
cygxLCAmeXV2VmVydGV4QnVmZmVyKTsKLSAgICB9KTsKLSAgICBmbG9hdCB2ZXJ0aWNlc1sxMl0g
PSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsKLSAgICBnbDo6
QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7Ci0gICAgZ2w6OkJ1
ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR0xf
U1RBVElDX0RSQVcpOwotCi0gICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKLSAgICBnbDo6R2Vu
RnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgYXV0byBmcmFtZWJ1ZmZlckNsZWFu
dXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0gewotICAgICAgICBnbDo6RGVsZXRlRnJh
bWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci0gICAgfSk7Ci0KLSAgICBHTGludCBzdGF0dXMg
PSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFtLCBHTF9MSU5L
X1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMpIHsKLSAgICAg
ICAgR0xpbnQgdnNTdGF0dXMgPSAwOwotICAgICAgICBnbDo6R2V0U2hhZGVyaXZSb2J1c3RBTkdM
RSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmdnNTdGF0dXMp
OwotICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7Ci0gICAgICAgIGdsOjpHZXRTaGFkZXJpdlJv
YnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwgbnVsbHB0ciwg
JmZzU3RhdHVzKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
KCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIsIHRoaXMsIHN0
YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
b250ZXh0Q2xlYW51cC5yZWxlYXNlKCk7Ci0gICAgeXV2VmVydGV4QnVmZmVyQ2xlYW51cC5yZWxl
YXNlKCk7Ci0gICAgZnJhbWVidWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKLSAgICBtX2Rpc3BsYXkg
PSBkaXNwbGF5OwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb25maWcgPSBjb25m
aWc7Ci0gICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSB5dXZWZXJ0ZXhCdWZmZXI7Ci0gICAgbV9mcmFt
ZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotICAgIG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3lUZXh0dXJlIik7Ci0gICAgbV91
dlRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dy
YW0sICJ1X3V2VGV4dHVyZSIpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRpb24gPSBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2NvbG9yTWF0cml4Iik7Ci0gICAg
bV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJv
Z3JhbSwgInVfZmxpcFkiKTsKLSAgICBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiA9IGds
OjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmVTaXplIik7Ci0gICAg
bV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV91dlRleHR1cmVTaXplIik7Ci0gICAgbV95dXZQb3NpdGlvbkF0dHJpYnV0
ZUxvY2F0aW9uID0gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHl1dlByb2dyYW0sICJhX3Bvc2l0aW9u
Iik7Ci0gICAgLy8gUHJvZ3JhbSBpcyBkZWxldGVkIGJ5IHRoZSBjbGVhbnVwIHdoaWxlIHRoZSBw
cm9ncmFtIGJpbmFyeSBzdGF5cyBpbiB1c2UuCi0gICAgZ2w6OlVzZVByb2dyYW0oeXV2UHJvZ3Jh
bSk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1feXV2UG9zaXRpb25BdHRyaWJ1
dGVMb2NhdGlvbik7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIobV95dXZQb3NpdGlvbkF0
dHJpYnV0ZUxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwotICAgIGdsOjpDbGVh
ckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG1fZnJhbWVidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6
Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIFBsYXRmb3Jt
R0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQotewotICAgIC8vIEZJ
WE1FOiBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzICc0MjB2JyBhbmQgJzQyMGYnIHBpeGVs
IGZvcm1hdHMuIEludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBwaXhlbCBmb3JtYXRzLgotICAg
IE9TVHlwZSBwaXhlbEZvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUoaW1h
Z2UpOwotICAgIGlmIChwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNy
OEJpUGxhbmFyVmlkZW9SYW5nZQotICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZv
cm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlCi0jaWYgSEFWRShDT1JFVklERU9f
Q09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCi0gICAgICAgICYmIHBpeGVsRm9ybWF0ICE9
IGtDVlBpeGVsRm9ybWF0VHlwZV9BR1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQotICAg
ICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhC
aVBsYW5hckZ1bGxSYW5nZQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4
dHVyZSglcCkgLSBBc2tlZCB0byBjb3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVz
JykuIiwgdGhpcywgRm91ckNDKHBpeGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIElPU3VyZmFjZVJlZiBzdXJmYWNl
ID0gQ1ZQaXhlbEJ1ZmZlckdldElPU3VyZmFjZShpbWFnZSk7Ci0gICAgaWYgKCFzdXJmYWNlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJm
YWNlR2V0U2VlZChzdXJmYWNlKTsKLSAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKLSAgICAg
ICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RTdXJmYWNlCi0gICAgICAgICYmIG5ld1N1cmZhY2VTZWVk
ID09IG1fbGFzdFN1cmZhY2VTZWVkCi0gICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRU
ZXh0dXJlKSA9PSBtX293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7Ci0gICAgICAg
IC8vIElmIHRoZSB0ZXh0dXJlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRp
bWUgd2UgY29waWVkIHRvIGl0LCBhbmQgdGhlCi0gICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVu
IG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5v
LW9wLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwg
IUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fY29udGV4
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCB3aWR0aCA9IENWUGl4ZWxC
dWZmZXJHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENWUGl4ZWxCdWZmZXJH
ZXRIZWlnaHQoaW1hZ2UpOwotCi0gICAgZ2w6OlZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQp
OwotCi0gICAgLy8gVGhlIG91dHB1dFRleHR1cmUgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVk
IGNvbnRlbnQgb24gZWFybHktb3V0cy4gQ2xlYXIgaXQgaW4gY2FzZXMKLSAgICAvLyBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvciBpcyBub3QgcmVzZXQuCi0gICAgYXV0byBhdXRvQ2xlYXJUZXh0dXJl
T25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgZm9ybWF0LCB0eXBlXSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIp
OwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgfSk7Ci0g
ICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0gICAgZ2w6OkJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
LSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0KLSAgICBnbDo6RnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9U
RVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0xlbnVtIHN0YXR1cyA9IGds
OjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVz
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVw
KSAtIFVuYWJsZSB0byBjcmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1cmUuIiwgdGhp
cyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0dXJlcyBm
b3IgdGhlIHZpZGVvIHNvdXJjZS4KLSAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0
V2lkdGhPZlBsYW5lKHN1cmZhY2UsIDApOwotICAgIGF1dG8geVBsYW5lSGVpZ2h0ID0gSU9TdXJm
YWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAwKTsKLSAgICBhdXRvIHV2UGxhbmVXaWR0aCA9
IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShzdXJmYWNlLCAxKTsKLSAgICBhdXRvIHV2UGxhbmVI
ZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1cmZhY2UsIDEpOwotCi0gICAgR0xl
bnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQoKTsKLQotICAgIEdMdWludCB1dlRleHR1cmUgPSAwOwotICAgIGdsOjpHZW5UZXh0dXJlcygx
LCAmdXZUZXh0dXJlKTsKLSAgICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0
KFt1dlRleHR1cmVdIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1dlRleHR1cmUp
OwotICAgIH0pOwotICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOwotICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVv
VGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3JlOjpjcmVhdGVQ
YnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZpZGVvVGV4dHVy
ZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1dlBsYW5lV2lk
dGgsIHV2UGxhbmVIZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEpOwotICAgIGlm
ICghdXZIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHV2SGFuZGxlQ2xl
YW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHV2SGFuZGxlXSB7Ci0g
ICAgICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXks
IHV2SGFuZGxlKTsKLSAgICB9KTsKLQotICAgIEdMdWludCB5VGV4dHVyZSA9IDA7Ci0gICAgZ2w6
OkdlblRleHR1cmVzKDEsICZ5VGV4dHVyZSk7Ci0gICAgYXV0byB5VGV4dHVyZUNsZWFudXAgPSBt
YWtlU2NvcGVFeGl0KFt5VGV4dHVyZV0gewotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwg
JnlUZXh0dXJlKTsKLSAgICB9KTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7
Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1cmUpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGF1dG8geUhhbmRsZSA9IFdlYkNvcmU6
OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlk
ZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkVELCB5
UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAwKTsK
LSAgICBpZiAoIXlIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHlIYW5k
bGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgeUhhbmRsZV0g
ewotICAgICAgICBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNwbGF5LCB5SGFu
ZGxlKTsKLSAgICB9KTsKLQotICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBwYXJhbWV0ZXJz
LgotICAgIGdsOjpVbmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMCk7Ci0gICAg
Z2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMSk7Ci0gICAgZ2w6OlVu
aWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uLCBmbGlwWSA9PSBGbGlwWTo6WWVzID8g
MSA6IDApOwotICAgIGdsOjpVbmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24s
IHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQpOwotICAgIGdsOjpVbmlmb3JtMmYobV91dlRleHR1
cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQpOwotCi0g
ICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOwot
ICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9IHRyYW5zZmVyRnVuY3Rpb25Gcm9tU3RyaW5nKGR5
bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ1ZCdWZmZXJHZXRBdHRhY2htZW50KGltYWdlLCBr
Q1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5LCBuaWwpKSk7Ci0gICAgYXV0byBjb2xvck1hdHJp
eCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24ocmFuZ2UsIHRy
YW5zZmVyRnVuY3Rpb24pOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29sb3JNYXRyaXhV
bmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7Ci0KLSAgICAvLyBEbyB0
aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgZ2w6OkRyYXdBcnJheXMoR0xfVFJJQU5HTEVTLCAwLCA2
KTsKLQotICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1fbGFzdFN1cmZhY2VTZWVk
ID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0VGV4dHVyZVNlZWQuc2V0KG91dHB1dFRleHR1
cmUsIG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpOwotICAgIG1fbGFzdEZsaXBZ
ID0gZmxpcFk7Ci0gICAgYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IucmVsZWFzZSgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNGQzYmJjZTk5NTExZDQzMDFmMTI1MWI3
MDVmMmRlNGRkNjYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgRU5BQkxFKFZJREVPKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVi5oIgotCi0jaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9VbnNhZmVQb2ludGVyLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotCi0vLyBHcmFwaGlj
c0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBBTkdMRSBmbGF2b3VyIG9mIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLgotLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBp
bXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmb3IgQU5HTEUgQ29jb2Eu
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0R0xDViB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwotCi0gICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RSgpIGZpbmFsOwotCi0gICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1
ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBG
bGlwWSkgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0KLSAgICB1bnNpZ25lZCBsYXN0VGV4dHVyZVNlZWQo
R0NHTHVpbnQgdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RUZXh0dXJlU2Vl
ZC5nZXQodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG1f
b3duZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9kaXNwbGF5IHsg
bnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0IHsgbnVs
bHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWcgeyBu
dWxscHRyIH07Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fZnJhbWVidWZmZXIgeyAwIH07Ci0g
ICAgUGxhdGZvcm1HTE9iamVjdCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAgICBHQ0dMaW50
IG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV91dlRleHR1
cmVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotICAgIEdDR0xpbnQgbV95dXZGbGlwWVVuaWZvcm1M
b2NhdGlvbiB7IC0xIH07Ci0gICAgR0NHTGludCBtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9u
IHsgLTEgfTsKLSAgICBHQ0dMaW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiB7IC0x
IH07Ci0gICAgR0NHTGludCBtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0g
ICAgR0NHTGludCBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OwotCi0gICAg
RmxpcFkgbV9sYXN0RmxpcFkgeyBGbGlwWTo6Tm8gfTsKLSAgICBVbnNhZmVQb2ludGVyPElPU3Vy
ZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2xhc3RTdXJmYWNlU2VlZCB7
IDAgfTsKLQotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQ0dMdWludCwgdW5z
aWduZWQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPEdDR0x1aW50Pj47Ci0gICAgVGV4dHVyZVNlZWRNYXAgbV9sYXN0VGV4dHVyZVNlZWQ7Ci19
OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2U4OGIwNzk2NWNlZjY5N2U2MmY4ZjAwNzE0MGFiYTM0NWM5NzViMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4
dEdMQ1ZDb2NvYS5jcHAKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oIgorCisjaWYg
RU5BQkxFKFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNp
bmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY29j
b2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KworI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIHsKKyAg
ICAiYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsiCisgICAgInVuaWZvcm0gdmVjMiB1X3lUZXh0
dXJlU2l6ZTsiCisgICAgInVuaWZvcm0gdmVjMiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ1bmlm
b3JtIGludCB1X2ZsaXBZOyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRl
OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZvaWQg
bWFpbigpIgorICAgICJ7IgorICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24s
IDAsIDEuMCk7IgorICAgICIgICAgdmVjMiBub3JtYWxpemVkUG9zaXRpb24gPSBhX3Bvc2l0aW9u
ICogLjUgKyAuNTsiCisgICAgIiAgICBpZiAodV9mbGlwWSA9PSAxKSIKKyAgICAiICAgICAgICBu
b3JtYWxpemVkUG9zaXRpb24ueSA9IDEuMCAtIG5vcm1hbGl6ZWRQb3NpdGlvbi55OyIKKyAgICAi
ICAgIHZfeVRleHR1cmVDb29yZGluYXRlID0gbm9ybWFsaXplZFBvc2l0aW9uOyIKKyAgICAiICAg
IHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbjsiCisgICAgIn0iX3MK
K307CisKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBzX3l1dlZlcnRleFNoYWRlclRleHR1cmVSZWN0
YW5nbGUgeworICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyIKKyAgICAidW5pZm9ybSB2
ZWMyIHVfeVRleHR1cmVTaXplOyIKKyAgICAidW5pZm9ybSB2ZWMyIHVfdXZUZXh0dXJlU2l6ZTsi
CisgICAgInVuaWZvcm0gaW50IHVfZmxpcFk7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl95VGV4dHVy
ZUNvb3JkaW5hdGU7IgorICAgICJ2YXJ5aW5nIHZlYzIgdl91dlRleHR1cmVDb29yZGluYXRlOyIK
KyAgICAidm9pZCBtYWluKCkiCisgICAgInsiCisgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQo
YV9wb3NpdGlvbiwgMCwgMS4wKTsiCisgICAgIiAgICB2ZWMyIG5vcm1hbGl6ZWRQb3NpdGlvbiA9
IGFfcG9zaXRpb24gKiAuNSArIC41OyIKKyAgICAiICAgIGlmICh1X2ZsaXBZID09IDEpIgorICAg
ICIgICAgICAgIG5vcm1hbGl6ZWRQb3NpdGlvbi55ID0gMS4wIC0gbm9ybWFsaXplZFBvc2l0aW9u
Lnk7IgorICAgICIgICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb24g
KiB1X3lUZXh0dXJlU2l6ZTsiCisgICAgIiAgICB2X3V2VGV4dHVyZUNvb3JkaW5hdGUgPSBub3Jt
YWxpemVkUG9zaXRpb24gKiB1X3V2VGV4dHVyZVNpemU7IgorICAgICJ9Il9zCit9OworCitjb25z
dGV4cHIgYXV0byBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIHsKKyAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3lUZXh0dXJlOyIKKyAg
ICAidW5pZm9ybSBzYW1wbGVyMkQgdV91dlRleHR1cmU7IgorICAgICJ1bmlmb3JtIG1hdDQgdV9j
b2xvck1hdHJpeDsiCisgICAgInZhcnlpbmcgdmVjMiB2X3lUZXh0dXJlQ29vcmRpbmF0ZTsiCisg
ICAgInZhcnlpbmcgdmVjMiB2X3V2VGV4dHVyZUNvb3JkaW5hdGU7IgorICAgICJ2b2lkIG1haW4o
KSIKKyAgICAieyIKKyAgICAiICAgIHZlYzQgeXV2OyIKKyAgICAiICAgIHl1di5yID0gdGV4dHVy
ZTJEKHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAiICAgIHl1di5n
YiA9IHRleHR1cmUyRCh1X3V2VGV4dHVyZSwgdl91dlRleHR1cmVDb29yZGluYXRlKS5yZzsiCisg
ICAgIiAgICB5dXYuYSA9IDEuMDsiCisgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB5dXYgKiB1X2Nv
bG9yTWF0cml4OyIKKyAgICAifSJfcworfTsKKworc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlIHsKKyAgICAicHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7IgorICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3QgdV95VGV4dHVyZTsiCisgICAgInVu
aWZvcm0gc2FtcGxlcjJEUmVjdCB1X3V2VGV4dHVyZTsiCisgICAgInVuaWZvcm0gbWF0NCB1X2Nv
bG9yTWF0cml4OyIKKyAgICAidmFyeWluZyB2ZWMyIHZfeVRleHR1cmVDb29yZGluYXRlOyIKKyAg
ICAidmFyeWluZyB2ZWMyIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZTsiCisgICAgInZvaWQgbWFpbigp
IgorICAgICJ7IgorICAgICIgICAgdmVjNCB5dXY7IgorICAgICIgICAgeXV2LnIgPSB0ZXh0dXJl
MkRSZWN0KHVfeVRleHR1cmUsIHZfeVRleHR1cmVDb29yZGluYXRlKS5yOyIKKyAgICAiICAgIHl1
di5nYiA9IHRleHR1cmUyRFJlY3QodV91dlRleHR1cmUsIHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSku
cmc7IgorICAgICIgICAgeXV2LmEgPSAxLjA7IgorICAgICIgICAgZ2xfRnJhZ0NvbG9yID0geXV2
ICogdV9jb2xvck1hdHJpeDsiCisgICAgIn0iX3MKK307CisKK2VudW0gY2xhc3MgUGl4ZWxSYW5n
ZSB7CisgICAgVW5rbm93biwKKyAgICBWaWRlbywKKyAgICBGdWxsLAorfTsKKworZW51bSBjbGFz
cyBUcmFuc2ZlckZ1bmN0aW9uQ1YgeworICAgIFVua25vd24sCisgICAga0lUVV9SXzcwOV8yLAor
ICAgIGtJVFVfUl82MDFfNCwKKyAgICBrU01QVEVfMjQwTV8xOTk1LAorICAgIGtEQ0lfUDMsCisg
ICAga1AzX0Q2NSwKKyAgICBrSVRVX1JfMjAyMCwKK307CisKK3N0YXRpYyBQaXhlbFJhbmdlIHBp
eGVsUmFuZ2VGcm9tUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQoreworICAgIHN3aXRj
aCAocGl4ZWxGb3JtYXQpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80NDQ0QVlwQ2JD
cjg6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0NEFZcENiQ3IxNjoKKyAgICBjYXNl
IGtDVlBpeGVsRm9ybWF0VHlwZV80MjJZcENiQ3JfNEFfOEJpUGxhbmFyOgorICAgIGNhc2Uga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2FzZSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIyWXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6CisgICAg
Y2FzZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyMTBCaVBsYW5hclZpZGVvUmFuZ2U6Cisj
aWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JNQVRfVFlQRVMpCisgICAgY2Fz
ZSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2U6Cisj
ZW5kaWYKKyAgICAgICAgcmV0dXJuIFBpeGVsUmFuZ2U6OlZpZGVvOworICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMllwQ2JDcjhGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfQVJHQjIxMDEwMTBMRVBhY2tlZDoKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80
MjBZcENiQ3IxMEJpUGxhbmFyRnVsbFJhbmdlOgorICAgIGNhc2Uga0NWUGl4ZWxGb3JtYXRUeXBl
XzQyMllwQ2JDcjEwQmlQbGFuYXJGdWxsUmFuZ2U6CisgICAgY2FzZSBrQ1ZQaXhlbEZvcm1hdFR5
cGVfNDQ0WXBDYkNyMTBCaVBsYW5hckZ1bGxSYW5nZToKKyNpZiBIQVZFKENPUkVWSURFT19DT01Q
UkVTU0VEX1BJWEVMX0ZPUk1BVF9UWVBFUykKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV9B
R1hfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlOgorI2VuZGlmCisgICAgICAgIHJldHVybiBQ
aXhlbFJhbmdlOjpGdWxsOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQaXhlbFJhbmdl
OjpVbmtub3duOworICAgIH0KK30KKworc3RhdGljIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2Zl
ckZ1bmN0aW9uRnJvbVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJp
bmcpCisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OlVua25vd247CisgICAgaWYg
KENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzcwOV8yKSkK
KyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yOworICAgIGlm
IChDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl82MDFfNCkp
CisgICAgICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl82MDFfNDsKKyAgICBp
ZiAoQ0ZFcXVhbChzdHJpbmcsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8x
OTk1KSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZmVyRnVuY3Rpb25DVjo6a1NNUFRFXzI0ME1fMTk5
NTsKKyAgICBpZiAoY2FuTG9hZF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9E
Q0lfUDMoKSAmJiBDRkVxdWFsKHN0cmluZywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9EQ0lf
UDMpKQorICAgICAgICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprRENJX1AzOworICAgIGlm
IChjYW5Mb2FkX0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSgpICYm
IENGRXF1YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSkpCisgICAg
ICAgIHJldHVybiBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtQM19ENjU7CisgICAgaWYgKGNhbkxvYWRf
Q29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMCgpICYmIENGRXF1
YWwoc3RyaW5nLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjApKQorICAgICAg
ICByZXR1cm4gVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMDsKKyAgICByZXR1cm4gVHJh
bnNmZXJGdW5jdGlvbkNWOjpVbmtub3duOworfQorCitzdHJ1Y3QgR0xmbG9hdENvbG9yIHsKKyAg
ICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHTGZsb2F0IHI7CisgICAg
ICAgICAgICBHTGZsb2F0IGc7CisgICAgICAgICAgICBHTGZsb2F0IGI7CisgICAgICAgIH0gcmdi
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR0xmbG9hdCB5OworICAgICAgICAgICAg
R0xmbG9hdCBjYjsKKyAgICAgICAgICAgIEdMZmxvYXQgY3I7CisgICAgICAgIH0geWNiY3I7Cisg
ICAgfTsKKworICAgIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IoR0xmbG9hdCByLCBHTGZsb2F0IGcs
IEdMZmxvYXQgYikKKyAgICAgICAgOiByZ2IgeyByLCBnLCBiIH0KKyAgICB7CisgICAgfQorCisg
ICAgY29uc3RleHByIEdMZmxvYXRDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBHTGZsb2F0IHNj
YWxlKQorICAgICAgICA6IHJnYiB7IHIgLyBzY2FsZSwgZyAvIHNjYWxlLCBiIC8gc2NhbGUgfQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxvYXQgYWJzKEdMZmxvYXQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gMCA/IHZhbHVlIDogLXZhbHVl
OworICAgIH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29u
c3QgR0xmbG9hdENvbG9yJiBjb2xvciwgR0xmbG9hdCBtYXhEZWx0YSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhYnMocmdiLnIgLSBjb2xvci5yZ2IucikgPCBhYnMobWF4RGVsdGEpCisg
ICAgICAgICAgICAmJiBhYnMocmdiLmcgLSBjb2xvci5yZ2IuZykgPCBhYnMobWF4RGVsdGEpCisg
ICAgICAgICAgICAmJiBhYnMocmdiLmIgLSBjb2xvci5yZ2IuYikgPCBhYnMobWF4RGVsdGEpOwor
ICAgIH0KK307CisKK3N0cnVjdCBHTGZsb2F0Q29sb3JzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdMZmxvYXRDb2xvciBibGFjayAgIHsgMCwgMCwgMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIg
R0xmbG9hdENvbG9yIHdoaXRlICAgeyAxLCAxLCAxIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
TGZsb2F0Q29sb3IgcmVkICAgICB7IDEsIDAsIDAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdM
ZmxvYXRDb2xvciBncmVlbiAgIHsgMCwgMSwgMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xm
bG9hdENvbG9yIGJsdWUgICAgeyAwLCAwLCAxIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBHTGZs
b2F0Q29sb3IgY3lhbiAgICB7IDAsIDEsIDEgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdMZmxv
YXRDb2xvciBtYWdlbnRhIHsgMSwgMCwgMSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgR0xmbG9h
dENvbG9yIHllbGxvdyAgeyAxLCAxLCAwIH07Cit9OworCitzdHJ1Y3QgWUNiQ3JNYXRyaXggewor
ICAgIEdMZmxvYXQgcm93c1s0XVs0XTsKKworICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhl
bFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7CisK
KyAgICBvcGVyYXRvciBjb25zdCBHTGZsb2F0KigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gJnJvd3NbMF1bMF07CisgICAgfQorCisgICAgY29uc3RleHByIEdMZmxvYXRDb2xvciBvcGVy
YXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7Cit9OworCitjb25zdGV4cHIgWUNiQ3JN
YXRyaXg6OllDYkNyTWF0cml4KFBpeGVsUmFuZ2UgcmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVu
dCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KQorICAgIDogcm93cyB7IH0KK3sKKyAgICAvLyBUaGUg
Y29udmVyc2lvbiBmcm9tIFlDYkNyIC0+IFJHQiBnZW5lcmFsbHkgdGFrZXMgdGhlIGZvcm06Cisg
ICAgLy8gWSA9IEtyICogUiArIEtnICogRyArIEtiICogQgorICAgIC8vIENiID0gKEIgLSBZKSAv
ICgyICogKDEgLSBLYikpCisgICAgLy8gQ3IgPSAoUiAtIFkpIC8gKDIgKiAoMSAtIEtyKSkKKyAg
ICAvLyBXaGVyZSB0aGUgdmFsdWVzIG9mIEtiIGFuZCBLciBhcmUgZGVmaW5lZCBpbiBhIHNwZWNp
ZmljYXRpb24gYW5kIEtnIGlzIGRlcml2ZWQgZnJvbTogS3IgKyBLZyArIEtiID0gMQorICAgIC8v
CisgICAgLy8gU29sdmluZyB0aGUgYWJvdmUgZXF1YXRpb25zIGZvciBSLCBCLCBhbmQgRyBkZXJp
dmVzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gUiA9IFkgKyAoMiAqICgxIC0gS3IpKSAqIENyCisg
ICAgLy8gQiA9IFkgKyAoMiAqICgxIC0gS2IpKSAqIENiCisgICAgLy8gRyA9IFkgLSAoMiAqICgx
IC0gS2IpKSAqIChLYiAvIEtnKSAqIENiIC0gKCgxIC0gS3IpICogMikgKiAoS3IgLyBLZykgKiBD
cgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBWaWRlbyByYW5nZSwg
WSBoYXMgYSByYW5nZSBvZiBbMTYsIDIzNV0gd2l0aCBhIHdpZHRoIG9mIDIxOSwgYW5kIENiICYg
Q3IgaGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzE2LCAyNDBdIHdpdGggYSB3aWR0aCBvZiAyMjQu
IFdoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgRnVsbCByYW5nZSwgWSwgQ2IsIGFuZCBDciBhbGwg
aGF2ZQorICAgIC8vIGEgcmFuZ2Ugb2YgWzAsIDI1NV0gd2l0aCBhIHdpZHRoIG9mIDI1Ni4KKwor
ICAgIEdMZmxvYXQgY2dDb2VmZmljaWVudCA9IDEgLSBjYkNvZWZmaWNpZW50IC0gY3JDb2VmZmlj
aWVudDsKKyAgICBHTGZsb2F0IHlTY2FsaW5nRmFjdG9yID0gcmFuZ2UgPT0gUGl4ZWxSYW5nZTo6
RnVsbCA/IDEuZiA6IDI1NS5mIC8gMjE5LmY7CisgICAgR0xmbG9hdCBjYmNyU2NhbGluZ0ZhY3Rv
ciA9IHJhbmdlID09IFBpeGVsUmFuZ2U6OkZ1bGwgPyAxLmYgOiAyNTUuZiAvIDIyNC5mOworCisg
ICAgcm93c1swXVswXSA9IHlTY2FsaW5nRmFjdG9yOworICAgIHJvd3NbMF1bMV0gPSAwOworICAg
IHJvd3NbMF1bMl0gPSBjYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQp
OworICAgIHJvd3NbMF1bM10gPSAwOworCisgICAgcm93c1sxXVswXSA9IHlTY2FsaW5nRmFjdG9y
OworICAgIHJvd3NbMV1bMV0gPSAtY2JjclNjYWxpbmdGYWN0b3IgKiAyICogKDEgLSBjYkNvZWZm
aWNpZW50KSAqIChjYkNvZWZmaWNpZW50IC8gY2dDb2VmZmljaWVudCk7CisgICAgcm93c1sxXVsy
XSA9IC1jYmNyU2NhbGluZ0ZhY3RvciAqIDIgKiAoMSAtIGNyQ29lZmZpY2llbnQpICogKGNyQ29l
ZmZpY2llbnQgLyBjZ0NvZWZmaWNpZW50KTsKKyAgICByb3dzWzFdWzNdID0gMDsKKworICAgIHJv
d3NbMl1bMF0gPSB5U2NhbGluZ0ZhY3RvcjsKKyAgICByb3dzWzJdWzFdID0gY2JjclNjYWxpbmdG
YWN0b3IgKiAyICogKDEgLSBjYkNvZWZmaWNpZW50KTsKKyAgICByb3dzWzJdWzJdID0gMDsKKyAg
ICByb3dzWzJdWzNdID0gMDsKKworICAgIHJvd3NbM11bMF0gPSAwOworICAgIHJvd3NbM11bMV0g
PSAwOworICAgIHJvd3NbM11bMl0gPSAwOworICAgIHJvd3NbM11bM10gPSAxOworCisgICAgLy8g
Q29uZmlndXJlIHRoZSBmaW5hbCBjb2x1bW4gb2YgdGhlIG1hdHJpeCB0byBjb252ZXJ0IENiIGFu
ZCBDciB0byBbLTEyOCwgMTI4XQorICAgIC8vIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdmlkZW8tcmFu
Z2UsIHRvIGNvbnZlcnQgWSB0byBbMTYsIDI0MF06CisgICAgZm9yIChhdXRvIHJvd051bWJlciA9
IDA7IHJvd051bWJlciA8IDM7ICsrcm93TnVtYmVyKSB7CisgICAgICAgIGF1dG8mIHJvdyA9IHJv
d3Nbcm93TnVtYmVyXTsKKyAgICAgICAgYXV0byYgeCA9IHJvd1swXTsKKyAgICAgICAgYXV0byYg
eSA9IHJvd1sxXTsKKyAgICAgICAgYXV0byYgeiA9IHJvd1syXTsKKyAgICAgICAgYXV0byYgdyA9
IHJvd1szXTsKKworICAgICAgICB3IC09ICh5ICsgeikgKiAxMjggLyAyNTU7CisgICAgICAgIGlm
IChyYW5nZSA9PSBQaXhlbFJhbmdlOjpWaWRlbykKKyAgICAgICAgICAgIHcgLT0geCAqIDE2IC8g
MjU1OworICAgIH0KK30KKworY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3Bl
cmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdM
ZmxvYXRDb2xvcigKKyAgICAgICAgcm93c1swXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1swXVsx
XSAqIGNvbG9yLnJnYi5nICsgcm93c1swXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1swXVszXSwK
KyAgICAgICAgcm93c1sxXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1sxXVsxXSAqIGNvbG9yLnJn
Yi5nICsgcm93c1sxXVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1sxXVszXSwKKyAgICAgICAgcm93
c1syXVswXSAqIGNvbG9yLnJnYi5yICsgcm93c1syXVsxXSAqIGNvbG9yLnJnYi5nICsgcm93c1sy
XVsyXSAqIGNvbG9yLnJnYi5iICsgcm93c1syXVszXQorICAgICk7Cit9CisKK3N0YXRpYyBjb25z
dCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBp
eGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQorewor
ICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9u
Q1Y+OworICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0
cml4Jj47CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWF0cml4TWFwPiBtYXRyaWNlczsK
KyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKworICAgIC8vIE1hdHJpY2Vz
IGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudHMgaW4gdGhlIElUVSBSLjYwMSByZXYgNCBz
cGVjaWZpY2F0aW9uCisgICAgLy8gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvUi1SRUMtQlQuNjAx
CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCByNjAxVmlkZW9NYXRyaXggeyBQaXhl
bFJhbmdlOjpWaWRlbywgMC4xMTRmLCAwLjI5OWYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlD
YkNyTWF0cml4IHI2MDFGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4xMTRmLCAwLjI5
OWYgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xv
cigxNiwgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xv
cnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcig4MSwgIDkwLCAgMjQwLCAyNTUpKS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiks
ICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTQ1LCA1NCwgIDM0
LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAx
LjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4g
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29s
b3IoNDEsICAyNDAsIDExMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90
IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJp
eCAqIEdMZmxvYXRDb2xvcigyMTAsIDE2LCAgMTQ2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVh
bFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KChyNjAxVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA2LCAyMDIsIDIyMiwgMjU1KSkuaXNB
cHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYp
LCAici42MTAgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI2MDFWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzAsIDE2
NiwgMTYsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4s
ICAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBj
eWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChyNjAxRnVsbE1hdHJpeCAqIEdMZmxv
YXRDb2xvcigwLCAgIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUuZiksICJyLjYxMCBmdWxsIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYwMUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici42MTAgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDc2LCAgODUsICAyNTUsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5m
KSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAg
c3RhdGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUwLCA0NCwgIDIx
LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAx
LjVmIC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBj
b2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDI5LCAgMjU1LCAxMDcsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHBy
b2R1Y2UgYmx1ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI2MDFGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDIyNiwgMCwgICAxNDksIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgInIuNjEwIGZ1bGwgbWF0cml4
IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjYw
MUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTA1LCAyMTIsIDIzNSwgMjU1KSkuaXNBcHByb3hp
bWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici42
MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgocjYwMUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTc5LCAxNzEsIDEsICAg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVm
IC8gMjU1LmYpLCAici42MTAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9y
Iik7CisKKyAgICAvLyBNYXRyaWNlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGlu
IHRoZSBJVFUgUi43MDkgcmV2IDIgc3BlY2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0
dS5pbnQvcmVjL1ItUkVDLUJULjcwOS0yLTE5OTUxMC1TCisgICAgY29uc3RleHByIHN0YXRpYyBZ
Q2JDck1hdHJpeCByNzA5VmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRlbywgMC4wNzIyLCAw
LjIxMjYgfTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IHI3MDlGdWxsTWF0cml4
IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNzIyLCAwLjIxMjYgfTsKKworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwgIDEyOCwgMTI4LCAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYgLyAyNTUu
ZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEy
OCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRl
LCAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3
aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxv
YXRDb2xvcig2MywgIDEwMiwgMjQwLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxv
YXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9l
cyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTczLCA0MiwgIDI2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlk
ZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMzIsICAyNDAsIDExOCwgMjU1KSku
aXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1
LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOwor
ICAgIHN0YXRpY19hc3NlcnQoKHI3MDlWaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMTksIDE2
LCAgMTM4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxv
dywgIDEuNWYgLyAyNTUuZiksICJyLjcwOSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5
ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChyNzA5VmlkZW9NYXRyaXggKiBHTGZs
b2F0Q29sb3IoNzgsICAyMTQsIDIzMCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZs
b2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgbWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE1NCwgMTYsICAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJyLjcw
OSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KChyNzA5RnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigwLCAgIDEyOCwgMTI4LCAy
NTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJsYWNrLCAgIDEuNWYg
LyAyNTUuZiksICJyLjcwOSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNrIGNvbG9y
Iik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1
LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3
aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVj
ZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xm
bG9hdENvbG9yKDU0LCAgOTksICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xm
bG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxN
YXRyaXggKiBHTGZsb2F0Q29sb3IoMTgyLCAzMCwgIDEyLCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVs
bCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3Nl
cnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE4LCAgMjU2LCAxMTYsIDI1NSkpLmlz
QXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5m
KSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xvciIpOworICAg
IHN0YXRpY19hc3NlcnQoKHI3MDlGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDIzNywgMSwgICAx
NDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6eWVsbG93LCAg
MS41ZiAvIDI1NS5mKSwgInIuNzA5IGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29s
b3IoNzMsICAyMjYsIDI0NCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29s
b3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBtYXRyaXggZG9lcyBub3Qg
cHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgocjcwOUZ1bGxNYXRy
aXggKiBHTGZsb2F0Q29sb3IoMjAxLCAxNTcsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAici43MDkgZnVsbCBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICAvLyBNYXRyaWNlcyBh
cmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnRzIGluIHRoZSBJVFUtUiBCVC4yMDIwLTIgc3Bl
Y2lmaWNhdGlvbgorICAgIC8vIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1ItUkVDLUJULjIwMjAK
KyAgICBjb25zdGV4cHIgc3RhdGljIFlDYkNyTWF0cml4IGJ0MjAyMFZpZGVvTWF0cml4IHsgUGl4
ZWxSYW5nZTo6VmlkZW8sIDAuMDU5MywgMC4yNjI3IH07CisgICAgY29uc3RleHByIHN0YXRpYyBZ
Q2JDck1hdHJpeCBidDIwMjBGdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wNTkzLCAw
LjI2MjcgfTsKKworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMFZpZGVvTWF0cml4ICogR0xmbG9h
dENvbG9yKDE2LCAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9h
dENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgYmxhY2sgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIHdoaXRlIGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoNzQsICA5NywgIDI0
MCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpyZWQsICAgICAx
LjVmIC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQg
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcigxNjQsIDQ3LCAgMjUsICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIGdyZWVuIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwVmlk
ZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjksICAyNDAsIDExOSwgMjU1KSkuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAy
MCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydCgoYnQyMDIwVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoMjIyLCAxNiwgIDEzNywg
MjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp5ZWxsb3csICAxLjVm
IC8gMjU1LmYpLCAiYnQuMjAyMCB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cg
Y29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBWaWRlb01hdHJpeCAqIEdMZmxvYXRD
b2xvcig4NywgIDIwOSwgMjMxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6Om1hZ2VudGEsIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIHZpZGVvIG1hdHJpeCBkb2Vz
IG5vdCBwcm9kdWNlIG1hZ2VudGEgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBW
aWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzcsIDE1OSwgMTYsICAyNTUpKS5pc0FwcHJveGlt
YXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4sICAgIDEuNWYgLyAyNTUuZiksICJidC4y
MDIwIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIHN0
YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMCwgICAxMjgsIDEy
OCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpibGFjaywgICAx
LjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGJsYWNr
IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRD
b2xvcigyNTUsIDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRD
b2xvcnM6OndoaXRlLCAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMg
bm90IHByb2R1Y2Ugd2hpdGUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxs
TWF0cml4ICogR0xmbG9hdENvbG9yKDY3LCAgOTIsICAyNTYsIDI1NSkpLmlzQXBwcm94aW1hdGVs
eUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAg
ZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSByZWQgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KChidDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDE3MywgMzYsICAxMSwgIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Z3JlZW4sICAgMS41ZiAvIDI1
NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIp
OworICAgIHN0YXRpY19hc3NlcnQoKGJ0MjAyMEZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMTUs
ICAyNTYsIDExOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjpi
bHVlLCAgICAxLjVmIC8gMjU1LmYpLCAiYnQuMjAyMCBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9k
dWNlIGJsdWUgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChidDIwMjBGdWxsTWF0cml4ICog
R0xmbG9hdENvbG9yKDI0MCwgMCwgICAxMzgsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8o
R0xmbG9hdENvbG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgImJ0LjIwMjAgZnVsbCBtYXRy
aXggZG9lcyBub3QgcHJvZHVjZSB5ZWxsb3cgY29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChi
dDIwMjBGdWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDgyLCAgMjIwLCAyNDUsIDI1NSkpLmlzQXBw
cm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6bWFnZW50YSwgMS41ZiAvIDI1NS5mKSwg
ImJ0LjIwMjAgZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7Cisg
ICAgc3RhdGljX2Fzc2VydCgoYnQyMDIwRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxODgsIDE2
NCwgMSwgICAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmN5YW4s
ICAgIDEuNWYgLyAyNTUuZiksICJidC4yMDIwIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
Y3lhbiBjb2xvciIpOworCisgICAgLy8gTWF0cmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29t
cG9uZW50cyBpbiB0aGUgU01QVEUgMjQwTS0xOTk5IHNwZWNpZmljYXRpb24KKyAgICAvLyBodHRw
Oi8vaWVlZXhwbG9yZS5pZWVlLm9yZy9kb2N1bWVudC83MjkxNDYxLworICAgIGNvbnN0ZXhwciBz
dGF0aWMgWUNiQ3JNYXRyaXggc21wdGUyNDBNVmlkZW9NYXRyaXggeyBQaXhlbFJhbmdlOjpWaWRl
bywgMC4wODcsIDAuMjEyIH07CisgICAgY29uc3RleHByIHN0YXRpYyBZQ2JDck1hdHJpeCBzbXB0
ZTI0ME1GdWxsTWF0cml4IHsgUGl4ZWxSYW5nZTo6RnVsbCwgMC4wODcsIDAuMjEyIH07CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1WaWRlb01hdHJpeCAqIEdMZmxvYXRDb2xvcigxNiwg
IDEyOCwgMTI4LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmJs
YWNrLCAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIHZpZGVvIG1hdHJpeCBkb2VzIG5vdCBw
cm9kdWNlIGJsYWNrIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9N
YXRyaXggKiBHTGZsb2F0Q29sb3IoMjM1LCAxMjgsIDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQw
TSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSB3aGl0ZSBjb2xvciIpOworICAgIHN0YXRp
Y19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDYyLCAgMTAyLCAy
NDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6cmVkLCAgICAg
MS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
cmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBH
TGZsb2F0Q29sb3IoMTcwLCA0MiwgIDI4LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhH
TGZsb2F0Q29sb3JzOjpncmVlbiwgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBt
YXRyaXggZG9lcyBub3QgcHJvZHVjZSBncmVlbiBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
KHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENvbG9yKDM1LCAgMjQwLCAxMTYsIDI1NSkp
LmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6Ymx1ZSwgICAgMS41ZiAvIDI1
NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgYmx1ZSBjb2xv
ciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTVZpZGVvTWF0cml4ICogR0xmbG9hdENv
bG9yKDIxNiwgMTYsICAxNDAsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENv
bG9yczo6eWVsbG93LCAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gdmlkZW8gbWF0cml4IGRv
ZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUy
NDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3IoODEsICAyMTQsIDIyOCwgMjU1KSkuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjptYWdlbnRhLCAxLjVmIC8gMjU1LmYpLCAi
U01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBtYWdlbnRhIGNvbG9yIik7
CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNVmlkZW9NYXRyaXggKiBHTGZsb2F0Q29sb3Io
MTg5LCAxNTQsIDE2LCAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3Jz
OjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSB2aWRlbyBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBjeWFuIGNvbG9yIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1G
dWxsTWF0cml4ICogR0xmbG9hdENvbG9yKDAsICAgMTI4LCAxMjgsIDI1NSkpLmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oR0xmbG9hdENvbG9yczo6YmxhY2ssICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRF
IDI0ME0gZnVsbCBtYXRyaXggZG9lcyBub3QgcHJvZHVjZSBibGFjayBjb2xvciIpOworICAgIHN0
YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXggKiBHTGZsb2F0Q29sb3IoMjU1LCAxMjgs
IDEyOCwgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhHTGZsb2F0Q29sb3JzOjp3aGl0ZSwg
ICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxsIG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNl
IHdoaXRlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAq
IEdMZmxvYXRDb2xvcig1NCwgIDk4LCAgMjU2LCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRv
KEdMZmxvYXRDb2xvcnM6OnJlZCwgICAgIDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwg
bWF0cml4IGRvZXMgbm90IHByb2R1Y2UgcmVkIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgo
c21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcigxNzksIDMwLCAgMTUsICAyNTUpKS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OmdyZWVuLCAgIDEuNWYgLyAyNTUu
ZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgZ3JlZW4gY29sb3Ii
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KChzbXB0ZTI0ME1GdWxsTWF0cml4ICogR0xmbG9hdENvbG9y
KDIyLCAgMjU2LCAxMTQsIDI1NSkpLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oR0xmbG9hdENvbG9y
czo6Ymx1ZSwgICAgMS41ZiAvIDI1NS5mKSwgIlNNUFRFIDI0ME0gZnVsbCBtYXRyaXggZG9lcyBu
b3QgcHJvZHVjZSBibHVlIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCgoc21wdGUyNDBNRnVs
bE1hdHJpeCAqIEdMZmxvYXRDb2xvcigyMzMsIDEsICAgMTQyLCAyNTUpKS5pc0FwcHJveGltYXRl
bHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6OnllbGxvdywgIDEuNWYgLyAyNTUuZiksICJTTVBURSAy
NDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2UgeWVsbG93IGNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydCgoc21wdGUyNDBNRnVsbE1hdHJpeCAqIEdMZmxvYXRDb2xvcig3NiwgIDIyNiwg
MjQxLCAyNTUpKS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKEdMZmxvYXRDb2xvcnM6Om1hZ2VudGEs
IDEuNWYgLyAyNTUuZiksICJTTVBURSAyNDBNIGZ1bGwgbWF0cml4IGRvZXMgbm90IHByb2R1Y2Ug
bWFnZW50YSBjb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoKHNtcHRlMjQwTUZ1bGxNYXRyaXgg
KiBHTGZsb2F0Q29sb3IoMjAxLCAxNTgsIDEsICAgMjU1KSkuaXNBcHByb3hpbWF0ZWx5RXF1YWxU
byhHTGZsb2F0Q29sb3JzOjpjeWFuLCAgICAxLjVmIC8gMjU1LmYpLCAiU01QVEUgMjQwTSBmdWxs
IG1hdHJpeCBkb2VzIG5vdCBwcm9kdWNlIGN5YW4gY29sb3IiKTsKKworICAgIGRpc3BhdGNoX29u
Y2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXko
UGl4ZWxSYW5nZTo6VmlkZW8sIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzYwMV80KSwgcjYw
MVZpZGVvTWF0cml4KTsKKyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4
ZWxSYW5nZTo6RnVsbCwgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfNjAxXzQpLCByNjAxRnVs
bE1hdHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFu
Z2U6OlZpZGVvLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtJVFVfUl83MDlfMiksIHI3MDlWaWRlb01h
dHJpeCk7CisgICAgICAgIG1hdHJpY2VzLmdldCgpLmVtcGxhY2UoTWFwS2V5KFBpeGVsUmFuZ2U6
OkZ1bGwsIFRyYW5zZmVyRnVuY3Rpb25DVjo6a0lUVV9SXzcwOV8yKSwgcjcwOUZ1bGxNYXRyaXgp
OworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRl
bywgVHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMFZpZGVvTWF0cml4KTsK
KyAgICAgICAgbWF0cmljZXMuZ2V0KCkuZW1wbGFjZShNYXBLZXkoUGl4ZWxSYW5nZTo6RnVsbCwg
VHJhbnNmZXJGdW5jdGlvbkNWOjprSVRVX1JfMjAyMCksIGJ0MjAyMEZ1bGxNYXRyaXgpOworICAg
ICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpWaWRlbywgVHJh
bnNmZXJGdW5jdGlvbkNWOjprU01QVEVfMjQwTV8xOTk1KSwgc21wdGUyNDBNVmlkZW9NYXRyaXgp
OworICAgICAgICBtYXRyaWNlcy5nZXQoKS5lbXBsYWNlKE1hcEtleShQaXhlbFJhbmdlOjpGdWxs
LCBUcmFuc2ZlckZ1bmN0aW9uQ1Y6OmtTTVBURV8yNDBNXzE5OTUpLCBzbXB0ZTI0ME1GdWxsTWF0
cml4KTsKKyAgICB9KTsKKworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCB0byBoYW5k
bGUgYSBQaXhlbCBGb3JtYXQgd2hvc2UgcmFuZ2UgdmFsdWUgaXMgdW5rbm93bi4KKyAgICBBU1NF
UlQocmFuZ2UgIT0gUGl4ZWxSYW5nZTo6VW5rbm93bik7CisgICAgaWYgKHJhbmdlID09IFBpeGVs
UmFuZ2U6OlVua25vd24pCisgICAgICAgIHJhbmdlID0gUGl4ZWxSYW5nZTo6RnVsbDsKKworICAg
IGF1dG8gaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIHRyYW5zZmVyRnVu
Y3Rpb24gfSk7CisKKyAgICAvLyBBc3N1bWUgdW5rbm93biB0cmFuc2ZlciBmdW5jdGlvbnMgYXJl
IHIuNjAxOgorICAgIGlmIChpdGVyYXRvciA9PSBtYXRyaWNlcy5nZXQoKS5lbmQoKSkKKyAgICAg
ICAgaXRlcmF0b3IgPSBtYXRyaWNlcy5nZXQoKS5maW5kKHsgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rp
b25DVjo6a0lUVV9SXzYwMV80IH0pOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1hdHJpY2Vz
LmdldCgpLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYT4gR3JhcGhpY3NDb250ZXh0R0xDVkNv
Y29hOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjdiB7IG5ldyBHcmFwaGljc0Nv
bnRleHRHTENWQ29jb2EoY29udGV4dCkgfTsKKyAgICBpZiAoIWN2LT5tX2NvbnRleHQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjdjsKK30KKworR3JhcGhpY3NDb250ZXh0
R0xDVkNvY29hOjp+R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKCkKK3sKKyAgICBpZiAoIW1fY29u
dGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1cnJlbnQobV9kaXNwbGF5LCBt
X2NvbnRleHQpKQorICAgICAgICByZXR1cm47CisgICAgZ2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJm1f
eXV2VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZyYW1l
YnVmZmVyKTsKKyAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOwor
fQorCitHcmFwaGljc0NvbnRleHRHTENWQ29jb2E6OkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYShH
cmFwaGljc0NvbnRleHRHTENvY29hJiBvd25lcikKKyAgICA6IG1fb3duZXIob3duZXIpCit7Cisg
ICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNoYXJlcyBzdGF0ZSB3aXRoIG93
bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZlIHJvYnVzdG5lc3Mgb3IgV2Vi
R0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJpYnV0ZXNbXSA9
IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sCisgICAgICAgIG93bmVyLm1f
aXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRFWFRfT1BFTkdMX0JBQ0tXQVJE
U19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0UsCisgICAgICAgIEVHTF9DT05U
RVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAg
ICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlVTSwKKyAgICAg
ICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdMRGlzcGxheSBk
aXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMQ29uZmlnIGNvbmZpZyA9
IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gRUdMX0Ny
ZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2NvbnRleHRPYmosIGNvbnRleHRB
dHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkKKyAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1ha2VDdXJyZW50KGRpc3BsYXks
IGNvbnRleHQpOworCisgICAgYXV0byBjb250ZXh0Q2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rp
c3BsYXksIGNvbnRleHRdIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6bWFrZUN1
cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVzdHJveUNvbnRl
eHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CisKKyAgICBjb25zdCBib29sIHVzZVRleHR1
cmUyRCA9IG1fb3duZXIuZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBHTF9URVhUVVJF
XzJEOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKKyAgICBp
ZiAoIXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJH
TF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgaWYgKGds
OjpHZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgR0xpbnQgdmVydGV4U2hhZGVyID0gZ2w6OkNyZWF0ZVNoYWRlcihHTF9W
RVJURVhfU0hBREVSKTsKKyAgICBHTGludCBmcmFnbWVudFNoYWRlciA9IGdsOjpDcmVhdGVTaGFk
ZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTHVpbnQgeXV2UHJvZ3JhbSA9IGdsOjpDcmVh
dGVQcm9ncmFtKCk7CisgICAgYXV0byBwcm9ncmFtQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3Zl
cnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHl1dlByb2dyYW1dIHsKKyAgICAgICAgZ2w6OkRl
bGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbDo6RGVsZXRlU2hhZGVyKGZyYWdt
ZW50U2hhZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVByb2dyYW0oeXV2UHJvZ3JhbSk7CisgICAg
fSk7CisgICAgLy8gVGhlc2UgYXJlIHdyaXR0ZW4gc28gc3RybGVuIG1pZ2h0IGJlIGNvbXBpbGUt
dGltZS4KKyAgICBHTGludCB2c0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hh
ZGVyVGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xl
Lmxlbmd0aCgpOworICAgIEdMaW50IGZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFn
bWVudFNoYWRlclRleHR1cmUyRC5sZW5ndGgoKSA6IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJl
UmVjdGFuZ2xlLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9
IHVzZVRleHR1cmUyRCA/IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEIDogc195dXZWZXJ0ZXhT
aGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlID0gdXNlVGV4dHVyZTJEID8gc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCA6IHNfeXV2
RnJhZ21lbnRTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlOworCisgICAgZ2w6OlNoYWRlclNvdXJjZSh2
ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsICZ2c0xlbmd0aCk7CisgICAgZ2w6
OlNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAm
ZnNMZW5ndGgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgZ2w6
OkNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsOjpBdHRhY2hTaGFkZXIoeXV2
UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0s
IGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbDo6TGlua1Byb2dyYW0oeXV2UHJvZ3JhbSk7CisgICAg
Ly8gTGluayBzdGF0dXMgaXMgY2hlY2tlZCBhZnRlcndhcmRzIGZvciB0aGVvcmV0aWNhbCBwYXJh
bGxlbCBjb21waWxhdGlvbiBiZW5lZml0LgorCisgICAgR0x1aW50IHl1dlZlcnRleEJ1ZmZlciA9
IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7CisgICAgYXV0byB5
dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbeXV2VmVydGV4QnVmZmVyXSB7
CisgICAgICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOworICAgIH0p
OworICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwgMSwgMSwgMSwg
LTEsIDEsIC0xLCAtMSB9OworICAgIGdsOjpCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgeXV2
VmVydGV4QnVmZmVyKTsKKyAgICBnbDo6QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIHNpemVv
Zih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICBHTHVpbnQgZnJh
bWVidWZmZXIgPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsK
KyAgICBhdXRvIGZyYW1lYnVmZmVyQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2ZyYW1lYnVmZmVy
XSB7CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKKyAg
ICB9KTsKKworICAgIEdMaW50IHN0YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dyYW1pdlJvYnVz
dEFOR0xFKHl1dlByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAmc3RhdHVzKTsK
KyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7CisgICAgICAg
IGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09NUElMRV9TVEFU
VVMsIDEsIG51bGxwdHIsICZ2c1N0YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3RhdHVzID0gMDsK
KyAgICAgICAgZ2w6OkdldFNoYWRlcml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFkZXIsIEdMX0NP
TVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAmZnNTdGF0dXMpOworICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTENWQ29jb2EoJXApIC0gWVVWIHByb2dyYW0gZmFpbGVkIHRvIGxp
bms6ICVkLCAlZCwgJWQuIiwgdGhpcywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0dXMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICB5
dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZlckNsZWFudXAu
cmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250ZXh0ID0gY29u
dGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1ZmZlciA9IHl1
dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgbV95
VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3Jh
bSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpH
ZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7CisgICAgbV9jb2xv
ck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3Jh
bSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uID0gZ2w6
OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAgIG1feVRleHR1
cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFt
LCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24g
PSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVyZVNpemUiKTsK
KyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0cmliTG9jYXRp
b24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlzIGRlbGV0ZWQg
YnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGluIHVzZS4KKyAg
ICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmli
QXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6VmVydGV4QXR0
cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBm
YWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhl
bEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
RmxpcFkgZmxpcFkpCit7CisgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9ubHkgc3VwcG9y
dHMgJzQyMHYnIGFuZCAnNDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUgc3VwcG9ydGlu
ZyBtb3JlIHBpeGVsIGZvcm1hdHMuCisgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0gQ1ZQaXhlbEJ1
ZmZlckdldFBpeGVsRm9ybWF0VHlwZShpbWFnZSk7CisgICAgaWYgKHBpeGVsRm9ybWF0ICE9IGtD
VlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIC8vIE5PTElOVAor
ICAgICAgICAmJiBwaXhlbEZvcm1hdCAhPSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJp
UGxhbmFyRnVsbFJhbmdlCisjaWYgSEFWRShDT1JFVklERU9fQ09NUFJFU1NFRF9QSVhFTF9GT1JN
QVRfVFlQRVMpCisgICAgICAgICYmIHBpeGVsRm9ybWF0ICE9IGtDVlBpeGVsRm9ybWF0VHlwZV9B
R1hfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZQorICAgICAgICAmJiBwaXhlbEZvcm1hdCAh
PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfQUdYXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZQorI2Vu
ZGlmCisgICAgICAgICkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENW
Q29jb2E6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBBc2tlZCB0byBj
b3B5IGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAoJyVzJykuIiwgdGhpcywgRm91ckNDKHBp
eGVsRm9ybWF0KS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gQ1ZQaXhlbEJ1ZmZlckdldElP
U3VyZmFjZShpbWFnZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsK
KyAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKKyAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xh
c3RTdXJmYWNlCisgICAgICAgICYmIG5ld1N1cmZhY2VTZWVkID09IG1fbGFzdFN1cmZhY2VTZWVk
CisgICAgICAgICYmIGxhc3RUZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSA9PSBtX293bmVyLnRl
eHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKSB7CisgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGhh
c24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgY29waWVkIHRvIGl0LCBh
bmQgdGhlCisgICAgICAgIC8vIGltYWdlIGhhc24ndCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBs
YXN0IHRpbWUgaXQgd2FzIGNvcGllZCwgdGhpcyBpcyBhIG5vLW9wLgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMQ29j
b2E6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKGltYWdlKTsK
KyAgICBzaXplX3QgaGVpZ2h0ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFnZSk7CisKKyAg
ICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBUaGUgb3V0cHV0
VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBlYXJseS1vdXRz
LiBDbGVhciBpdCBpbiBjYXNlcworICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVycm9yIGlzIG5v
dCByZXNldC4KKyAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gbWFrZVNjb3BlRXhp
dChbb3V0cHV0VGV4dHVyZSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGVdIHsK
KyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOwor
ICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3Jt
YXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGdsOjpCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9KTsKKyAgICAvLyBBbGxvY2F0ZSBtZW1vcnkg
Zm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBn
bDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xB
TVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RF
WFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0
LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1
cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hOjpj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBm
cmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAg
ICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8gc291cmNlLgor
ICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUoc3VyZmFjZSwg
MCk7CisgICAgYXV0byB5UGxhbmVIZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHRPZlBsYW5lKHN1
cmZhY2UsIDApOworICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBs
YW5lKHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3VyZmFjZUdldEhl
aWdodE9mUGxhbmUoc3VyZmFjZSwgMSk7CisKKyAgICBHTGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0
ID0gbV9vd25lci5kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAgR0x1aW50IHV2
VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZ1dlRleHR1cmUpOworICAgIGF1
dG8gdXZUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3V2VGV4dHVyZV0geworICAgICAg
ICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7CisgICAgfSk7CisgICAgZ2w6OkFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgIGdsOjpCaW5kVGV4dHVyZSh2aWRlb1RleHR1
cmVUYXJnZXQsIHV2VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBh
cmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJ
TkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhU
VVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgYXV0byB1dkhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZh
Y2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNF
X1JFQURfSElOVF9BTkdMRSwgR0xfUkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR0xf
VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRsZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChb
ZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAgV2ViQ29yZTo6ZGVzdHJv
eVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5kbGUpOworICAgIH0pOwor
CisgICAgR0x1aW50IHlUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJnlUZXh0
dXJlKTsKKyAgICBhdXRvIHlUZXh0dXJlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW3lUZXh0dXJl
XSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmeVRleHR1cmUpOworICAgIH0pOwor
ICAgIGdsOjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbDo6QmluZFRleHR1cmUo
dmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgYXV0byB5SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZlckFuZEF0dGFj
aElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJnZXQsIEVHTF9J
T1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRUQsIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWln
aHQsIEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhhbmRsZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geUhhbmRsZUNsZWFudXAgPSBtYWtlU2NvcGVF
eGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFuZGxlXSB7CisgICAgICAgIGRlc3Ryb3lQYnVm
ZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXksIHlIYW5kbGUpOworICAgIH0pOworCisgICAg
Ly8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMuCisgICAgZ2w6OlVuaWZvcm0xaSht
X3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAwKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uLCAxKTsKKyAgICBnbDo6VW5pZm9ybTFpKG1feXV2RmxpcFlVbmlm
b3JtTG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7CisgICAgZ2w6OlVuaWZv
cm0yZihtX3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgsIHlQbGFuZUhl
aWdodCk7CisgICAgZ2w6OlVuaWZvcm0yZihtX3V2VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24s
IHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCk7CisKKyAgICBhdXRvIHJhbmdlID0gcGl4ZWxS
YW5nZUZyb21QaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgYXV0byB0cmFuc2ZlckZ1bmN0
aW9uID0gdHJhbnNmZXJGdW5jdGlvbkZyb21TdHJpbmcoZHluYW1pY19jZl9jYXN0PENGU3RyaW5n
UmVmPihDVkJ1ZmZlckdldEF0dGFjaG1lbnQoaW1hZ2UsIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRy
aXhLZXksIG5pbCkpKTsKKyAgICBhdXRvIGNvbG9yTWF0cml4ID0gWUNiQ3JUb1JHQk1hdHJpeEZv
clJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihyYW5nZSwgdHJhbnNmZXJGdW5jdGlvbik7CisgICAg
Z2w6OlVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiwgMSwgR0xf
RkFMU0UsIGNvbG9yTWF0cml4KTsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZHJhd2luZy4KKyAg
ICBnbDo6RHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDYpOworCisgICAgbV9sYXN0U3VyZmFj
ZSA9IHN1cmZhY2U7CisgICAgbV9sYXN0U3VyZmFjZVNlZWQgPSBuZXdTdXJmYWNlU2VlZDsKKyAg
ICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVyZSwgbV9vd25lci50ZXh0dXJlU2Vl
ZChvdXRwdXRUZXh0dXJlKSk7CisgICAgbV9sYXN0RmxpcFkgPSBmbGlwWTsKKyAgICBhdXRvQ2xl
YXJUZXh0dXJlT25FcnJvci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9H
cmFwaGljc0NvbnRleHRHTENWQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0ZTM5NjBiNmQ3
MDgwZTRjMzk0MGI4YWY3YWQ5ZGNlNjI0NjI3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQ29jb2EuaApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3
dGYvVW5zYWZlUG9pbnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGlj
c0NvbnRleHRHTENvY29hOworCisvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9u
IGZvciBHcmFwaGljc0NvbnRleHRHTENvY29hLgorLy8gVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRo
ZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRHTENvY29hLgorY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dEdMQ1YgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkNvY29hPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYSYpOworCisgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYSgpIGZp
bmFsOworCisgICAgYm9vbCBjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJl
ZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSkg
ZmluYWw7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hKEdyYXBoaWNz
Q29udGV4dEdMQ29jb2EmKTsKKworICAgIHVuc2lnbmVkIGxhc3RUZXh0dXJlU2VlZChHQ0dMdWlu
dCB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFRleHR1cmVTZWVkLmdldCh0
ZXh0dXJlKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRHTENvY29hJiBtX293bmVyOwor
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheSB7IG51bGxwdHIg
fTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dCB7IG51bGxwdHIgfTsK
KyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29uZmlnIHsgbnVsbHB0ciB9
OworCisgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1lYnVmZmVyIHsgMCB9OworICAgIFBsYXRm
b3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CisgICAgR0NHTGludCBtX3lUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdXZUZXh0dXJlVW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1feXV2RmxpcFlVbmlmb3JtTG9jYXRpb24g
eyAtMSB9OworICAgIEdDR0xpbnQgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07
CisgICAgR0NHTGludCBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24geyAtMSB9OworICAg
IEdDR0xpbnQgbV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OworICAgIEdDR0xp
bnQgbV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKworICAgIEZsaXBZIG1f
bGFzdEZsaXBZIHsgRmxpcFk6Ok5vIH07CisgICAgVW5zYWZlUG9pbnRlcjxJT1N1cmZhY2VSZWY+
IG1fbGFzdFN1cmZhY2U7CisgICAgdWludDMyX3QgbV9sYXN0U3VyZmFjZVNlZWQgeyAwIH07CisK
KyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhhc2hNYXA8R0NHTHVpbnQsIHVuc2lnbmVkLCBJ
bnRIYXNoPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQ0dM
dWludD4+OworICAgIFRleHR1cmVTZWVkTWFwIG1fbGFzdFRleHR1cmVTZWVkOworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3Bw
CmluZGV4IDkzYzAyMTRmMzlhODE5MjQyODBmMzczYzlhYzc5Mzg2YmQyMzI0NjAuLmU3YzI5ZGQ1
Y2JmZmYxNDRiZDFiODU1MTkxNmJmOGRiNjc0YWYwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcApAQCAtMTc3LDcgKzE3Nyw3IEBAIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxh
dGZvcm1Db25maWcoKSBjCiAgICAgcmV0dXJuIG1fY29uZmlnOwogfQogCi1HQ0dMQU5HTEVMYXll
cjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCitHQ0dM
QU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSYgY29udGV4
dCkKICAgICA6IEdDR0xMYXllcihjb250ZXh0KQogICAgICwgbV9hbmdsZUNvbnRleHQoQU5HTEVD
b250ZXh0OjpjcmVhdGVDb250ZXh0KCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFH
Q0dMQU5HTEVMYXllci5oCmluZGV4IDcwNTc5ZDI4YjgwYmI5NDMwZTg4MzU5NDUzMGIwMjUwZjc4
NDUzMjUuLjc4NzM3ODJjM2ZkMjJjNTBhNTc1MDA1YWFkZTBmNGYwMDBmMmIxYWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFHQ0dMQU5HTEVMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCkBAIC03Niw3ICs3Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgRUdMU3VyZmFjZSBtX3N1cmZhY2UgeyBudWxscHRyIH07CiAgICAg
fTsKIAotICAgIEdDR0xBTkdMRUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Jik7CisgICAgR0NHTEFOR0xFTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRSYp
OwogICAgIHZpcnR1YWwgfkdDR0xBTkdMRUxheWVyKCk7CiAKICAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNw
cAppbmRleCAwMzU3OTQ1OTJkMTZmYmNkZGIxMWQxNTcxYzYzZmNkM2M4YzY0YWE1Li5iN2M3OWUx
Zjg5ZDA2ZWQ4MDczODNlZmVhYTU0NTEwMDBmZThmZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhR0NHTExheWVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgTmljb3NpYSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1HQ0dMTGF5ZXI6OkdDR0xMYXllcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKK0dDR0xMYXllcjo6R0NHTExheWVyKEdyYXBo
aWNzQ29udGV4dEdMVHlwZSYgY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAg
ICwgbV9jb250ZW50TGF5ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4
bWFwL05pY29zaWFHQ0dMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5ZXIuaAppbmRleCA0MzI5OTA0NjA5ODY3NWI3
YmVhYjk3OWYyMTY1Mzc3NWJlMzVlMGEyLi4zYzBhMDIzNGE0ZTZmZmM5Y2Q1MThhYzM2YTY2NDI1
NmU4MThlN2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oCkBAIC0zMCwx
MCArMzAsMTUgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKE5JQ09TSUEpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAj
aW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCiAjaW5jbHVk
ZSA8bWVtb3J5PgogCisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
QU5HTEUuaCIKKyNlbHNlCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHTENvbnRleHQ7CiB9CkBAIC00Myw3
ICs0OCwxMiBAQCBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBHQ0dMTGF5ZXIgOiBwdWJsaWMg
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgR0NHTExheWVyKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJik7CisjaWYgVVNFKEFOR0xFKQorICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEdMVHlwZSA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxz
ZQorICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dEdMVHlwZSA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOworI2VuZGlmCisgICAgZXhwbGljaXQgR0NHTExheWVyKEdyYXBoaWNzQ29u
dGV4dEdMVHlwZSYpOwogCiAgICAgdmlydHVhbCB+R0NHTExheWVyKCk7CiAKQEAgLTU0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRl
eHQ7CisgICAgR3JhcGhpY3NDb250ZXh0R0xUeXBlJiBtX2NvbnRleHQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7CiAKICAgICBSZWY8Q29udGVu
dExheWVyPiBtX2NvbnRlbnRMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCmluZGV4IGI4MzJhMTg2YTQyYzhiZTMyMmE0YzcwODFmNzVkY2Q0OTBjMjdmODguLjJjMGQ5
OTdjZjM4MDE4MTExZGM0NzNhMWVkZmM4NWIzZGY3OGQ4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwyMiAr
MjMsMzA5NSBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkK
KyNpZiBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25z
R0wuaCIKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdMQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAi
VGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5j
bHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVT
LmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNp
ZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5H
TF9FUykKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBV
U0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhR0NHTExheWVyLmgiCisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gq
PiYgZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVI
YXNoKj4qIHNoYXJlZE5hbWVIYXNoOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7
CisgICAgICAgIHNoYXJlZE5hbWVIYXNoID0gbmV3IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVI
YXNoKj47CisgICAgfSk7CisKKyAgICByZXR1cm4gKnNoYXJlZE5hbWVIYXNoOworfQorCitzdGF0
aWMgdm9pZCBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoU2hhZGVyTmFtZUhhc2gqIHNo
YWRlck5hbWVIYXNoKQoreworICAgICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKSA9
IHNoYWRlck5hbWVIYXNoOworfQorCisvLyBIYXNoIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEFOR0xF
IHRyYW5zbGF0b3IvY29tcGlsZXIgdG8gZG8KKy8vIHN5bWJvbCBuYW1lIG1hbmdsaW5nLiBTaW5j
ZSB0aGlzIGlzIGEgc3RhdGljIG1ldGhvZCwgYmVmb3JlCisvLyBjYWxsaW5nIGNvbXBpbGVTaGFk
ZXIgd2Ugc2V0IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcgorLy8gdG8gcG9pbnQgdG8gdGhl
IG1hcCBrZXB0IGJ5IHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLgorCitzdGF0aWMgdWludDY0X3QgbmFtZUhhc2hGb3JTaGFkZXIoY29uc3QgY2hhciogbmFt
ZSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBDU3RyaW5nIG5hbWVBc0NTdHJpbmcgPSBDU3RyaW5nKG5hbWUpOworCisgICAgLy8g
TG9vayB1cCBuYW1lIGluIG91ciBsb2NhbCBtYXAuCisgICAgU2hhZGVyTmFtZUhhc2gqJiBjdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIgPSAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVy
KCk7CisgICAgU2hhZGVyTmFtZUhhc2g6Oml0ZXJhdG9yIGZpbmRSZXN1bHQgPSBjdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXItPmZpbmQobmFtZUFzQ1N0cmluZyk7CisgICAgaWYgKGZpbmRSZXN1
bHQgIT0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGZpbmRSZXN1bHQtPnZhbHVlOworCisgICAgdW5zaWduZWQgaGFzaFZhbHVlID0gbmFtZUFzQ1N0
cmluZy5oYXNoKCk7CisKKyAgICAvLyBDb252ZXJ0IHRoZSAzMi1iaXQgaGFzaCBmcm9tIENTdHJp
bmc6Omhhc2ggaW50byBhIDY0LWJpdCByZXN1bHQKKyAgICAvLyBieSBzaGlmdGluZyB0aGVuIGFk
ZGluZyB0aGUgc2l6ZSBvZiBvdXIgdGFibGUuIE92ZXJmbG93IHdvdWxkCisgICAgLy8gb25seSBi
ZSBhIHByb2JsZW0gaWYgd2UncmUgYWxyZWFkeSBoYXNoaW5nIHRvIHRoZSBzYW1lIHZhbHVlIChh
bmQKKyAgICAvLyB3ZSdyZSBob3BpbmcgdGhhdCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY29u
dGV4dCB3ZQorICAgIC8vIGRvbid0IGhhdmUgdGhhdCBtYW55IHN5bWJvbHMpLgorCisgICAgdWlu
dDY0X3QgcmVzdWx0ID0gaGFzaFZhbHVlOworICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgMzIpICsg
KGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2l6ZSgpICsgMSk7CisKKyAgICBjdXJyZW50
TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNldChuYW1lQXNDU3RyaW5nLCByZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6
IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAg
bV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xMYXllcj4oKnRoaXMpOwor
I2Vsc2UKKyAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXI+KCp0aGlzKTsKKyNlbmRpZgorCisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKwor
ICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmli
dXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAg
ICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgIDo6Z2xHZW5UZXh0dXJl
cygxLCAmbV90ZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOworCisgICAgLy8gQ3JlYXRlIGFuIEZCTy4KKyAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEs
ICZtX2Zibyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8p
OworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIDo6Z2xHZW5UZXh0dXJlcygx
LCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgIDo6Z2xHZW5UZXh0
dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisjZW5kaWYKKworICAgIC8vIENyZWF0
ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0g
bV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewor
ICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBt
X211bHRpc2FtcGxlRkJPOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRE
cmF3RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VT
KQorICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVy
YnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5j
aWwpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7
CisjZW5kaWYKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRl
cHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgfQorCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgOjpnbEVuYWJsZShHTF9W
RVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKKworICAgIGlmIChHTENvbnRleHQ6OmN1cnJlbnQo
KS0+dmVyc2lvbigpID49IDMyMCkgeworICAgICAgICBtX3VzaW5nQ29yZVByb2ZpbGUgPSB0cnVl
OworCisgICAgICAgIC8vIEZyb20gdmVyc2lvbiAzLjIgb24gd2UgdXNlIHRoZSBPcGVuR0wgQ29y
ZSBwcm9maWxlLCBzbyByZXF1ZXN0IHRoYXQgb3VwdXQgdG8gdGhlIHNoYWRlciBjb21waWxlci4K
KyAgICAgICAgLy8gT3BlbkdMIHZlcnNpb24gMy4yIHVzZXMgR0xTTCB2ZXJzaW9uIDEuNTAuCisg
ICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNMXzE1MF9DT1JFX09V
VFBVVCk7CisKKyAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5H
TCBDb3JlIHByb2ZpbGUsIGFuZCB3ZSBuZWVkIGEgVkFPIGZvciByZW5kZXJpbmcuCisgICAgICAg
IC8vIEEgVkFPIGNvdWxkIGJlIGNyZWF0ZWQgYW5kIGJvdW5kIGJ5IGVhY2ggY29tcG9uZW50IHVz
aW5nIEdMIHJlbmRlcmluZyAoVGV4dHVyZU1hcHBlciwgV2ViR0wsIGV0YykuIFRoaXMgaXMKKyAg
ICAgICAgLy8gYSBzaW1wbGVyIHNvbHV0aW9uOiB0aGUgZmlyc3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgY3JlYXRlZCBvbiBhIEdMQ29udGV4dCB3aWxsIGNyZWF0ZSBhbmQgYmluZCBhIFZBTyBm
b3IgdGhhdCBjb250ZXh0LgorICAgICAgICBHQ0dMaW50IGN1cnJlbnRWQU8gPSBnZXRJbnRlZ2Vy
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpWRVJURVhfQVJSQVlfQklORElORyk7CisgICAgICAg
IGlmICghY3VycmVudFZBTykgeworICAgICAgICAgICAgbV92YW8gPSBjcmVhdGVWZXJ0ZXhBcnJh
eSgpOworICAgICAgICAgICAgYmluZFZlcnRleEFycmF5KG1fdmFvKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBsb3dlciB2ZXJzaW9ucyByZXF1ZXN0IHRoZSBjb21w
YXRpYmlsaXR5IG91dHB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgorICAgICAgICBtX2NvbXBp
bGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF9DT01QQVRJQklMSVRZX09VVFBVVCk7CisK
KyAgICAgICAgLy8gR0xfUE9JTlRfU1BSSVRFIGlzIG5lZWRlZCBpbiBsb3dlciB2ZXJzaW9ucy4K
KyAgICAgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworICAgIH0KKyNlbHNlCisgICAg
Ly8gQWRqdXN0IHRoZSBzaGFkZXIgc3BlY2lmaWNhdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciBH
TEVTMyAoaS5lLiBXZWJHTDIgc3VwcG9ydCkgd2FzIHJlcXVlc3RlZC4KKyNpZiBFTkFCTEUoV0VC
R0wyKQorICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCwg
KGF0dHJpYnV0ZXMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9u
OjpXZWJHTDIpID8gU0hfV0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKKyNlbHNlCisgICAg
bV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBTSF9XRUJHTF9T
UEVDKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAg
ICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgc2g6OkluaXRCdWlsdElu
UmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhBdHRyaWJzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9
IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyA9IGdldEludGVn
ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMpOworICAgIEFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdlcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAg
ICBBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdl
cihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMpOworICAgIEFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0SW50ZWdl
cihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAg
IEFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSBnZXRJbnRlZ2VyKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKTsKKwor
ICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzID0gMTsKKworICAgIEdDR0xpbnQgcmFuZ2VbMl0geyB9OworICAgIEdD
R0xpbnQgcHJlY2lzaW9uID0gMDsKKyAgICBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkZSQUdNRU5UX1NIQURFUiwgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKKyAgICBBTkdMRVJlc291cmNlcy5G
cmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0gfHwgcHJlY2lzaW9u
KTsKKworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKworICAg
IDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworfQorCitHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOworICAgIGJv
b2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgYXV0byBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewor
ICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgaWYgKG1fZGVw
dGhCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhC
dWZmZXIpOworCisgICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAg
aWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgOjpnbERlbGV0ZUZy
YW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisjZW5kaWYK
KworI2lmIFVTRShDQUlSTykKKyAgICBpZiAobV92YW8pCisgICAgICAgIGRlbGV0ZVZlcnRleEFy
cmF5KG1fdmFvKTsKKyNlbmRpZgorfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YWtlQ29udGV4dEN1cnJlbnQoKQoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25p
Y29zaWFMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjZWxzZQorICAgIHJldHVybiBtX3Rl
eG1hcExheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCit7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworI2lmIFVTRShP
UEVOR0xfRVMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCisjaWYgUExBVEZPUk0oR1RLKQorRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4
dGVuc2lvbnMpIHsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAvLyBnbEdldFN0cmluZ2kg
aXMgbm90IGF2YWlsYWJsZSBvbiBHTEVTMi4KKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVu
aXF1ZTxFeHRlbnNpb25zR0xPcGVuR0xFUz4odGhpcywgIGZhbHNlKTsKKyNlbHNlCisgICAgICAg
IC8vIEZyb20gT3BlbkdMIDMuMiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJl
IHdlIG11c3QgdXNlIGdsR2V0U3RyaW5naS4KKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVu
aXF1ZTxFeHRlbnNpb25zR0xPcGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJz
aW9uKCkgPj0gMzIwKTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsK
K30KKyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0Vmlz
aWJpbGl0eShib29sKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11
bGF0ZUV2ZW50Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCit7Cisg
ICAgaWYgKGV2ZW50ID09IFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVy
ZSkKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQoreworfQorCitzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0
ZWRSZXN1bHRzKCkKK3sKKyAgICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3Qg
Y2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQoreworICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOworCisgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBleHRl
bnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAg
ICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikp
IHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb24pOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0
cnVlLgorICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgc2V0Q29udGV4dEF0dHJp
YnV0ZXMoYXR0cnMpOworICAgIH0KKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmICFtX2lzRm9y
V2ViR0wyKSB7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUiKSkgeworICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0g
ZmFsc2U7CisgICAgICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisKKyNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIFRl
bXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZB
TFNFKTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIs
IEdMX0ZBTFNFKTsKKyNlbmRpZgorCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFs
aWFzKQorICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21w
b3NpdG9yVGV4dHVyZSk7CisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7
CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAg
IGdsRmx1c2goKTsKKworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRl
LmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGVsc2UKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICByZXR1cm47CisjZW5kaWYKKworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsK
KyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zdGF0ZS5ib3VuZFRhcmdldChH
TF9URVhUVVJFMCkgPT0gR0xfVEVYVFVSRV8yRCA/IG1fc3RhdGUuYm91bmRUZXh0dXJlKEdMX1RF
WFRVUkUwKSA6IDApOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVy
ZVVuaXQpOworICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7CisgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3RkJPICE9IG1fZmJvKQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIDo6Z2xGbHVzaCgpOworfQorCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHMoKQoreworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAoY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeSgpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9
IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJP
ID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICAgICAgaWYgKG1fc3RhdGUuYm91bmREcmF3
RkJPICE9IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAg
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBp
eGVsc0ZvclBhaW50UmVzdWx0cygpOworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAg
ICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdo
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49
IDApOworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bWFya0NvbnRleHRDaGFuZ2VkKCk7CisKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAg
IG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwor
CisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVT
VCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdM
X0RJVEhFUiwgR0xfRkFMU0UpOworICAgIAorICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNo
YXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKworICAgIC8vIEluaXRpYWxpemUgcmVu
ZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0geyAwLCAwLCAwLCAw
IH0sIGNsZWFyRGVwdGggPSAwOworICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7CisgICAgR0xi
b29sZWFuIGNvbG9yTWFza1tdID0geyBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
IH0sIGRlcHRoTWFzayA9IEdMX1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZm
ZmZmZiwgc3RlbmNpbE1hc2tCYWNrID0gMHhmZmZmZmZmZjsKKyAgICBHTGJpdGZpZWxkIGNsZWFy
TWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9D
TEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
CisgICAgOjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAg
ICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOworCisg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuZGVw
dGgpIHsKKyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFy
RGVwdGgpOworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsK
KyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7
CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBH
TF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNp
bCk7CisgICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2ls
TWFzaykpOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFT
SywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKKyAgICAgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICA6
OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xl
YXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisKKyAgICA6OmdsQ2xlYXIo
Y2xlYXJNYXNrKTsKKworICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29s
b3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIDo6Z2xDb2xvck1hc2so
Y29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsK
KyAgICBpZiAoYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNr
KTsKKyAgICB9CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbENsZWFyU3Rl
bmNpbChjbGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9G
Uk9OVCwgc3RlbmNpbE1hc2spOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9C
QUNLLCBzdGVuY2lsTWFza0JhY2spOworICAgIH0KKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIsIG1fc3RhdGUuYm91bmREcmF3RkJPKTsKKworICAgIGF1dG8gZXJyb3IgPSA6OmdsR2V0
RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0coV2ViR0wsICJGYXRhbDogT3BlbkdMIGVycm9yIGR1cmluZyBHcmFwaGljc0NvbnRleHRH
TCBidWZmZXIgaW5pdGlhbGl6YXRpb24gKCVkKS4iLCBlcnJvcik7CisgICAgICAgIGZvcmNlQ29u
dGV4dExvc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIDo6Z2xGbHVzaCgpOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQ
bGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNo
YWRlcikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVy
dGV4U2hhZGVyKSk7CisgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdt
ZW50U2hhZGVyKSk7CisgICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50
RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisK
KyAgICBIYXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdz
OworICAgIGZvciAoY29uc3QgYXV0byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWlu
Z01hcCkgeworICAgICAgICBjb25zdCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wu
a2V5OworICAgICAgICAvLyBUaGUgdmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBl
YWNoIGluZGV4IG9mIGFuIGFycmF5IHZhcmlhYmxlLgorICAgICAgICAvLyBXZSBvbmx5IHdhbnQg
YSBzaW5nbGUgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBhcnJheS4KKyAgICAgICAgaWYgKHN5
bWJvbE5hbWUuZW5kc1dpdGgoIl0iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIERvbid0IGNvdW50IGJ1aWx0IGluIHZhcnlpbmdzLgorICAgICAgICBpZiAoc3ltYm9sTmFt
ZSA9PSAiZ2xfRnJhZ0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwg
c3ltYm9sTmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWlu
Z01hcC5maW5kKHN5bWJvbE5hbWUpOworICAgICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJh
Z21lbnRFbnRyeS52YXJ5aW5nTWFwLmVuZCgpKQorICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5n
cy5hZGQoc3ltYm9sTmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZhbHVlKTsKKyAgICB9CisKKyAgICBz
aXplX3QgbnVtVmFyeWluZ3MgPSBjb21iaW5lZFZhcnlpbmdzLnNpemUoKTsKKyAgICBpZiAoIW51
bVZhcnlpbmdzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN0ZDo6dmVjdG9yPHNoOjpT
aGFkZXJWYXJpYWJsZT4gdmFyaWFibGVzOworICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVk
VmFyeWluZ3Muc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBj
b21iaW5lZFZhcnlpbmdzLnZhbHVlcygpKQorICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZh
cnlpbmdTeW1ib2wpOworCisgICAgR0NHTGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7CisjaWYg
VVNFKE9QRU5HTF9FUykKKyAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywg
Jm1heFZhcnlpbmdWZWN0b3JzKTsKKyNlbHNlCisgICAgaWYgKG1faXNGb3JXZWJHTDIpCisgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1Zl
Y3RvcnMpOworICAgIGVsc2UgeworICAgICAgICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMgPSAw
OworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFy
eWluZ0Zsb2F0cyk7CisgICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0
cyAvIDQ7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0
IHZlcnRleFNoYWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Cisg
ICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Cisg
ICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRl
eFNoYWRlciktPnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CisKKyAgICBIYXNoTWFwPFN0
cmluZywgc2g6OkdMZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOworCisgICAgZm9yIChj
b25zdCBhdXRvJiBlbnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKKyAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OworICAgICAgICB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1l
LmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5nZXQoKS5wcmVjaXNp
b24pOworICAgIH0KKworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5
LnVuaWZvcm1NYXApIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBl
bnRyeS52YWx1ZS5nZXQoKS5tYXBwZWROYW1lOworICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhT
eW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5j
X3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSk7CisgICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wg
IT0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUg
IT0gZW50cnkudmFsdWUuZ2V0KCkucHJlY2lzaW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCA9IHRleHR1cmU7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChw
cm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Cisg
ICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICA6Omds
QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJpbmRCdWZmZXIodGFy
Z2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHTHVp
bnQgZmJvOworICAgIGlmIChidWZmZXIpCisgICAgICAgIGZibyA9IGJ1ZmZlcjsKKyAgICBlbHNl
CisgICAgICAgIGZibyA9IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlz
YW1wbGVGQk8gOiBtX2Zibyk7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUik7
CisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKKyAgICBpZiAoZmJvICE9IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gZmJvOworICAgIH0KK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRh
cmdldCwgcmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0
dXJlLCB0YXJnZXQpOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVk
LCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJs
ZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9y
LCBHQ0dMZW51bSBkZmFjdG9yKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9
ICAgICAgIAorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0
ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdD
R0xlbnVtIGRzdEFscGhhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwg
c3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1
c2FnZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xTcGFuPGNvbnN0IHZvaWQ+IGRhdGEsIEdDR0xlbnVtIHVzYWdlKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEsIHVzYWdlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnRwdHIgb2Zmc2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQnVmZmVy
U3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBkYXRhLmRhdGEpOworfQorCitH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
Q0dMZW51bSB0YXJnZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCisgICAgcmV0dXJuIDo6Z2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYg
YiwgR0NHTGNsYW1wZiBhKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
Q2xlYXIobWFzayk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKK3sKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ2xlYXJTdGVuY2ls
KHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJv
b2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xl
YW4gYWxwaGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBp
bmcuIER1ZSB0byB0aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKKyAgICAvLyBw
b2ludCBhIGdsb2JhbCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0Lgor
ICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVz
b3VyY2VzKCk7CisgICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFO
R0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rp
b24gPSBuYW1lSGFzaEZvclNoYWRlcjsKKworICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJz
KQorICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVI
YXNoPigpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZv
clNoYWRlcnMuZ2V0KCkpOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKKworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25z
LT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKKworICAgIEFOR0xFUmVz
b3VyY2VzLkhhc2hGdW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOworICAgIG1fY29tcGls
ZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Uu
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0
ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7CisgICAgY29u
c3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRh
dGEoKTsKKyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJD
U3RyaW5nLmxlbmd0aCgpOworCisgICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNo
YWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxu
IiwgZ2V0U2hhZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKFdlYkdM
LCAiLS0tIGJlZ2luIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRy
YW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKKworICAg
IDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5z
bGF0ZWRTaGFkZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7
CisgICAgCisgICAgaW50IGNvbXBpbGVTdGF0dXM7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2
KHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKKworICAgIFNoYWRlclNv
dXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICAv
LyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpn
bEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAg
IGlmIChsZW5ndGgpIHsKKyAgICAgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICAgICAgVmVjdG9y
PEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgICAgICBQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgICAgICBlbnRyeS5sb2cgPSBnZXRV
bm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwor
ICAgIH0KKworICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKKyAgICAgICAgZW50
cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRy
YW5zbGF0b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUu
Iik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hh
ZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEhhc2hNYXA8UGxhdGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFk
ZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgY29uc3QgQ1N0cmlu
ZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7CisgICAgY29uc3Qg
Y2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7CisgICAg
aW50IHNoYWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7CisK
KyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xu
LS0tIGVuZCBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7CisK
KyAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRl
clNvdXJjZUxlbmd0aCk7CisKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgICAg
aW50IGNvbXBpbGVTdGF0dXM7CisKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxF
X1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xf
VFJVRSkgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgTE9HKFdlYkdM
LCAiRGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBzdWNjZWVkZWQuIik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJF
cnJvcjogZGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7CisgICAgfQorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVCht
X3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0
dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJP
KSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIEFTU0VSVChtX3N0YXRl
LmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Cisg
ICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsQ3VsbEZh
Y2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhH
Q0dMZW51bSBmdW5jKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xEZXB0aE1h
c2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRl
cihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQorewor
ICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbERldGFjaFNoYWRlcihwcm9n
cmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxl
KEdDR0xlbnVtIGNhcCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICA6OmdsRGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwg
R0NHTHNpemVpIGNvdW50KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cisg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludHB0ciBvZmZzZXQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSkpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWlu
dCBpbmRleCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGaW5pc2goKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGbHVzaCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9u
dEZhY2UoR0NHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CisgICAgOjpnbEdl
dFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhB
dHRyaWJ1dGVTaXplKTsKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUp
OyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5h
dGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOwor
ICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGlu
ZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRh
dGEoKSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBT
SEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5n
dGgpKTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUu
ZGF0YSgpLCBuYW1lTGVuZ3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBp
bmcgYWN0aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4
LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7
CisjZW5kaWYKKworICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKKyAgICBpbmZvLnR5cGUg
PSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdD
R0xpbnQgc3ltYm9sQ291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5
bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywg
JnN5bWJvbENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hhZGVyU3ltYm9s
Q291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDR0x1aW50IHJhd0lu
ZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcFtpbmRleF0gOiAtMTsKKworICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dy
YW0sIHJhd0luZGV4LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dy
YW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNp
emUpOworCisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FD
VElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBH
THNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdMZW51bSB0
eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5p
Zm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBp
ZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcg
b3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xf
VFlQRV9VTklGT1JNLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKKyAgICAKKyNp
Zm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVu
Z3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZv
cm0gJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRm
OCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgCisg
ICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAg
aW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdDR0xpbnQgc3ltYm9s
Q291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5m
aW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHBy
b2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7
CisgICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJv
Z3JhbSk7CisgICAgfQorICAgIAorICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9s
Q291bnRzID0gcmVzdWx0LT52YWx1ZTsKKyAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8
IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBz
eW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsK
KyAgICAKKyAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgs
IGluZm8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNo
YWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMc2l6ZWkgbWF4Q291bnQsIEdDR0xz
aXplaSogY291bnQsIFBsYXRmb3JtR0xPYmplY3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9n
cmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKK30KKworc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG5hbWU7CisgICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFt
ZS51dGY4KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygi
d2ViZ2xfIiwgaGV4KG51bWJlciwgTG93ZXJjYXNlKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VN
YXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xU
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1h
cC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8m
IHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGF1
dG8gc3ltYm9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoc3ltYm9sRW50
cnkgPT0gc3ltYm9sTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgYXV0byYgbWFwcGVkTmFtZSA9IHN5bWJvbEVudHJ5LT52YWx1ZS5nZXQoKS5tYXBwZWROYW1l
OworICAgIHJldHVybiBTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0
aCgpKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xO
YW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJv
bFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwor
ICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKKyAgICBnZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIGZvciAoR0NHTHNpemVp
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBw
ZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsK
KyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52
YWx1ZSgpOworICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRl
ZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgorICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRT
aGFkZXJNYXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVy
TWFwLmVuZCgpKSB7CisgICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7
CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFw
KGxpbmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFw
cGVkTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgICAg
IG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJz
LnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoc3lt
Ym9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkg
YmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCisgICAg
ICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIg
cHJvZ3JhbS4KKyAgICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCisgICAgICAgICAg
ICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwor
ICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFk
ZXJzLmdldCgpKTsKKworICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hl
ZE5hbWUobmFtZSk7CisKKyAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51
bGxwdHIpOworCisgICAgICAgIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVy
YXRlZE5hbWUsIG5hbWUpOworCisgICAgICAgIHJldHVybiBnZW5lcmF0ZWROYW1lOworICAgIH0K
KworICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9
IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGZvciAoY29uc3QgYXV0
byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9s
RW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZS5jX3N0cigpKQorICAgICAgICAgICAgcmV0dXJu
IHN5bWJvbEVudHJ5LmtleTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7CisgICAgCisgICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNo
YWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYg
KG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsK
KyAgICB9CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNo
YWRlcnMgYWZ0ZXIgbGlua2luZy4KKyAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFw
LmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQo
KSkgeworICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOworICAgICAg
ICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlu
a2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5h
bE5hbWUpCisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgICAg
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hh
ZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1l
KQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgIH0KKworICAg
IGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0
aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxl
ZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55
IHNoYWRlciBwcm9ncmFtLgorCisgICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2li
bHlVbnVzZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGNhY2hlZCAhPSBt
X3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZC0+dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK1N0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAo
c2l6ZV90IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4o
U0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTaGFkZXJTb3Vy
Y2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tp
XSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25z
dCBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0
YXRpY19jYXN0PGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7CisgICAg
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZS5jX3N0cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuYW1lOworfQorCitp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkK
KyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJv
bE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAg
TE9HKFdlYkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJu
IDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkp
OworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGly
ZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICByZXR1cm4gOjpnbEdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCit7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIFNldCBhbiBhcmJpdHJh
cnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCisgICAgLy8g
YSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIg
dGhlIGVycm9yLgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdl
IGdvdCBOT19FUlJPUi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsK
KyAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJv
ciA9PSBOT19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOworICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBtb3ZlZEFuRXJyb3I7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRFcnJvcigpCit7CisgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUg
c3ludGhldGljIGVycm9yIGxpc3QgaW4gY2FzZQorICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFs
cmVhZHkgdGhlcmUsIHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCisgICAgICAg
IC8vIGdsR2V0RXJyb3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3Ig
Y29kZSBvbmNlLgorICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAg
ICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOworICAgIH0KKworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKKworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBy
ZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmco
bmFtZSkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKwor
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KworICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVi
dWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30K
KworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30KKwor
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVy
RVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRl
cikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgcmV0dXJuIDo6Z2xJc1NoYWRl
cihzaGFkZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRl
eHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NH
TGZsb2F0IHdpZHRoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCit7
CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworCisgICAgR0NHTHNpemVpIGNvdW50ID0gMDsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICBpZiAoY291bnQgPT0gMikKKyAgICAgICAg
bV9saW5rZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0s
IHNoYWRlcnNbMV0pKTsKKworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQgcGFyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3Rvciwg
R0NHTGZsb2F0IHVuaXRzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBm
IHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBp
bnZlcnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKworICAgIFNoYWRlclNvdXJjZUVudHJ5
IGVudHJ5OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9zaGFkZXJTb3Vy
Y2VNYXAuc2V0KHNoYWRlciwgV1RGTW92ZShlbnRyeSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NH
THVpbnQgbWFzaykKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsU3Rl
bmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQoreworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVu
Y2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NH
TGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQoreworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xTdGVuY2ls
T3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRl
cmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUs
IGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZv
cm0yZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0zZihs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBh
cnJheSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMykpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtM2Z2
KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMywgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCit7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVu
aWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGludCB2MCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24s
IGFycmF5LmJ1ZlNpemUsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2
MSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbnQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAyKSk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
OjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAyLCBhcnJheS5kYXRhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCit7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFVuaWZvcm0z
aShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
YXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTNp
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9ybTRp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5pZm9y
bTRpdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIGFycmF5LmRhdGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBhcnJh
eSkKK3sKKyAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgNCkpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVbmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gNCwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xm
bG9hdD4gYXJyYXkpCit7CisgICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDkpKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDksIHRyYW5zcG9zZSwgYXJy
YXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQ+IGFycmF5KQoreworICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAx
NikpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMTYsIHRy
YW5zcG9zZSwgYXJyYXkuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xVc2VQcm9ncmFtKHBy
b2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCit7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpn
bFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NH
TGZsb2F0LCAxPiBhcnJheSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRh
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NH
THVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQoreworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRy
aWIyZihpbmRleCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQs
IDI+IGFycmF5KQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBp
bmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKK3sKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVy
dGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdCwgMz4gYXJyYXkpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXku
ZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYy
LCBHQ0dMZmxvYXQgdjMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2
Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihH
Q0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCA0PiBhcnJheSkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkg
c3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRl
eCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWln
aHQpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVWZXJ0ZXhBcnJheSgpCit7CisgICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0
ZXhBcnJheU9FUygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVW
ZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQoreworICAgIGdldEV4dGVuc2lvbnMo
KS5kZWxldGVWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCit7
CisgICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3Jt
R0xPYmplY3QgYXJyYXkpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmJpbmRWZXJ0ZXhBcnJheU9F
UyhhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9vbGVhbj4gdmFsdWUpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldEJv
b2xlYW52KHBuYW1lLCB2YWx1ZS5kYXRhKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lKQoreworICAgIEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dM
U3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmRhdGEp
OworfQorCitHQ0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NChH
Q0dMZW51bSBwbmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0NHTGludDY0IHZh
bHVlID0gMDsKKyAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11
c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0
aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAgIC8vIDo6
Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitH
Q0dMaW50NjQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGkoR0NHTGVudW0g
cG5hbWUsIEdDR0x1aW50IGluZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAg
VU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIEdDR0xpbnQ2NCB2YWx1ZSA9IDA7CisgICAgLy8gRklYTUUg
MTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRv
IHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRl
eHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KKyAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1l
LCBpbmRleCwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKQoreworICAg
IEdDR0xpbnQgdmFsdWUgPSAwOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVCkKKyAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5D
SUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwor
ICAgIHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKK3sK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBH
Q0dMaW50IHZhbHVlID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAm
dmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChBQ1RJ
VkVfQVRUUklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAh
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICAqdmFsdWUg
PSByZXN1bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0
aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkpOworICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYg
c3ltYm9sQ291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFt
KS0+dmFsdWU7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxk
IGEgZmlsdGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcgb2YKKyAgICAvLyBvdXIgaW50ZXJuYWwg
YXR0cmlidXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUg
T3BlbkdMLgorICAgIEdDR0xpbnQgYXR0cmlidXRlQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7CisgICAg
Zm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICBB
Y3RpdmVJbmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwg
aW5mbyk7CisgICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0
dHJpYnV0ZUluZGV4TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gRG8gdGhlIHNh
bWUgZm9yIHVuaWZvcm1zLgorICAgIEdDR0xpbnQgdW5pZm9ybUNvdW50ID0gMDsKKyAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Cisg
ICAgZm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICAgICAg
QWN0aXZlSW5mbyBpbmZvOworICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBp
LCBpbmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVk
VG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAqdmFs
dWUgPSBzeW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qg
c2hhZGVyc1syXSwgR0NHTHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBM
T0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEo
KSk7CisKKyAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAx
MjM0NTY3ODlhYmNkZWZBQkNERUZdKyIpOworCisgICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRM
b2c7CisgICAgCisgICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8g
dGhlIHNoYWRlciBzb3VyY2UgdGhhdAorICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBj
b21waWxlcnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKKyAgICAvLyB0aGlzIHdhcm5pbmcg
dG8gdGhlIHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAorICAgIC8v
IGlzIGNhdXNpbmcgaXQuCisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
YW5nbGVXYXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRl
cjUnIGlzIG5vdCBzdXBwb3J0ZWRcbiJfcyB9OworICAgIGludCBzdGFydEZyb20gPSBsb2cuc3Rh
cnRzV2l0aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsK
KyAgICBpbnQgbWF0Y2hlZExlbmd0aCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGludCBzdGFy
dCA9IHJlZ0V4cC5tYXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOworICAgICAg
ICBpZiAoc3RhcnQgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwcm9jZXNz
ZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkp
OworICAgICAgICBzdGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7CisKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hl
ZExlbmd0aCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3lt
Ym9sTmFtZShzaGFkZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7CisgICAgICAgIExPRyhXZWJH
TCwgIkRlbWFuZ2xpbmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBt
YXBwZWRTeW1ib2wudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQo
bWFwcGVkU3ltYm9sKTsKKyAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+
KGxvZy5sZW5ndGgoKSkpOworCisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5n
KHN0YXJ0RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2ViR0ws
ICJVbm1hbmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBH
TGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5m
byhsZW5ndGgpOworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZz
aXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBHQ0dMc2l6ZWkgY291bnQ7CisgICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAm
Y291bnQsIHNoYWRlcnMpOworCisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVy
cywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQorCitHQ0dMaW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xH
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAg
IHJldHVybiB2YWx1ZTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbWUpCit7CisgICAg
QVNTRVJUKHNoYWRlcik7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisKKyAgICBjb25zdCBhdXRv
JiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgCisgICAgc3dp
dGNoIChwbmFtZSkgeworICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKKyAgICBjYXNlIFNIQURFUl9U
WVBFOgorICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgJnZhbHVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIElORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIp
Lmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RI
OgorICAgICAgICB2YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX0VOVU0pOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgY29u
c3QgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBpZiAoIWVu
dHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBHTGludCBsZW5n
dGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwg
Jmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisK
KyAgICBHTHNpemVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsK
KyAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0
YSgpKTsKKworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07
CisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8u
ZGF0YSgpLCBzaXplKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFk
ZXIpOworCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3Vy
Y2U7Cit9CisKK0dDR0xmbG9hdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1l
dGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQoreworICAgIEdDR0xmbG9hdCB2
YWx1ZSA9IDAuZjsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCit7
CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6OmdsR2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5kYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCit7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldFVuaWZvcm1p
dihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHByb2dyYW0pOworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5p
Zm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVk
U3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7Cisg
ICAgTE9HKFdlYkdMLCAiOjpnZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1
cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCitHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCit7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTHZvaWQq
IHBvaW50ZXIgPSAwOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5h
bWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBwaXhlbHMpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgaWYgKHR5cGUgPT0gSEFMRl9G
TE9BVF9PRVMpCisgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgorCisg
ICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUg
Zm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2lu
ZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVlZAorICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBh
cyB3ZSBkbyBpbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgorICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEFMUEhBOgorICAgICAgICAgICAgLy8g
V2UgYXJlIHVzaW5nIEdMX1JFRCB0byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdl
bGwuCisgICAgICAgICAgICBmb3JtYXQgPSBSRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xf
UkcgdG8gYmFjayBHTF9MVU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAg
ICAgICAgICAgIGZvcm1hdCA9IFJHOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1F
OiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGlu
ZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4K
KyAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCit7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbENvbXByZXNzZWRUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQoreworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIGltYWdlU2l6ZSwgZGF0YS5kYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKworUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMdWludCBv
ID0gMDsKKyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAg
IHJldHVybiBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVy
KCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwor
ICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnbENyZWF0ZVNoYWRl
cigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVS
VEVYX1NIQURFUik7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuVGV4dHVyZXMo
MSwgJm8pOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7CisgICAgcmV0dXJu
IG87Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3Jt
R0xPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8pIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3Qg
Z29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2luZworICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVy
IGl0IGdldHMgZGVsZXRlZC4KKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAw
KTsKKyAgICB9CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3Zl
KHByb2dyYW0pOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
cmVuZGVyYnVmZmVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0
ZXh0dXJlKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0
byYga2V5VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRl
eHR1cmU7CisgICAgfSk7CisgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3Ip
Cit7CisgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhl
dGljIGVycm9yIGxpc3QgdG8KKyAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBz
byBhIGNhbGxlciB0byBnZXRFcnJvciB3aWxsIGdldAorICAgIC8vIGFueSBlcnJvcnMgZnJvbSBn
bEVycm9yIGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemluZy4KKyAgICBtb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJy
b3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0
KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQor
ICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQoKQoreworICAgIGZvciAoYXV0byogY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRl
eHQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0
Q2hhbmdlZE5vdGlmaWNhdGlvbigpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9W
ZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Cit7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1v
ZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkK
K3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZp
cnN0LCBjb3VudCwgcHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKKyAg
ICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQorewor
ICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlz
b3IpOworfQorCisjaWYgSEFWRShPUEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRl
eCkKK3sKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4KGluZGV4KTsKK30KKyNlbmRpZgorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29u
c3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgbGVuZ3RoKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJB
TShkYXRhKTsKKyAgICBVTlVTRURfUEFSQU0odXNhZ2UpOworICAgIFVOVVNFRF9QQVJBTShzcmNP
ZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBk
c3RCeXRlT2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdD
R0x1aW50IGxlbmd0aCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oZHN0Qnl0ZU9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY0RhdGEpOworICAgIFVO
VVNFRF9QQVJBTShzcmNPZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworfQorCisj
aWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xl
bnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVP
ZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFy
Z2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOworfQorI2Vs
c2UKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xl
bnVtLCBHQ0dMZW51bSwgR0NHTGludHB0ciwgR0NHTGludHB0ciwgR0NHTHNpemVpcHRyKQorewor
fQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTFNwYW48R0NHTHZvaWQ+
IGRhdGEpCit7CisjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgR0NHTHZvaWQq
IHB0ciA9IDo6Z2xNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgZGF0YS5idWZTaXplLCBH
cmFwaGljc0NvbnRleHRHTDo6TUFQX1JFQURfQklUKTsKKyAgICBpZiAoIXB0cikKKyAgICAgICAg
cmV0dXJuOworICAgIG1lbWNweShkYXRhLmRhdGEsIHB0ciwgZGF0YS5idWZTaXplKTsKKyAgICBp
ZiAoITo6Z2xVbm1hcEJ1ZmZlcih0YXJnZXQpKQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oZGF0YSk7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50
IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dM
aW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmls
dGVyKQoreworICAgIFVOVVNFRF9QQVJBTShzcmNYMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kw
KTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWDEpOworICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGRzdFgwKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTApOworICAgIFVO
VVNFRF9QQVJBTShkc3RYMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAgICBVTlVTRURf
UEFSQU0obWFzayk7CisgICAgVU5VU0VEX1BBUkFNKGZpbHRlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IGxheWVyKQoreworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAg
IFVOVVNFRF9QQVJBTShhdHRhY2htZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dHVyZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNobWVudHMpCit7CisgICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnRzKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzLCBH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQor
eworICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50
cyk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJBTSh5KTsKKyAgICBVTlVT
RURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3JjKTsKK30KKworI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdM
X0VTXzMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMU3BhbjxHQ0dMaW50PiBkYXRhKQoreworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEdldElu
dGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGRhdGEuYnVmU2l6
ZSwgZGF0YS5kYXRhKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5V
U0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAg
IFVOVVNFRF9QQVJBTShidWZTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKKyNlbmRp
ZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICA6Omds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQorewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIDo6
Z2xUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoKQoreworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6Z2xUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZCht
X3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisjZWxzZQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSwgR0NHTGVudW0sIEdD
R0xlbnVtLCBHQ0dMU3BhbjxHQ0dMaW50PikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpKQoreworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9m
ZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2
ZWwpOworICAgIFVOVVNFRF9QQVJBTSh4b2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeW9mZnNl
dCk7CisgICAgVU5VU0VEX1BBUkFNKHpvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTSh4KTsKKyAg
ICBVTlVTRURfUEFSQU0oeSk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURf
UEFSQU0oaGVpZ2h0KTsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKG5h
bWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCit7CisgICAgVU5VU0VE
X1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odjApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50
IHYwLCBHQ0dMdWludCB2MSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTSh2MCk7CisgICAgVU5VU0VEX1BBUkFNKHYxKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2
MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyKQoreworICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7CisgICAgVU5VU0VEX1BBUkFNKHYwKTsKKyAgICBVTlVTRURfUEFSQU0odjEpOworICAgIFVO
VVNFRF9QQVJBTSh2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWlu
dCB2MiwgR0NHTHVpbnQgdjMpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBV
TlVTRURfUEFSQU0odjApOworICAgIFVOVVNFRF9QQVJBTSh2MSk7CisgICAgVU5VU0VEX1BBUkFN
KHYyKTsKKyAgICBVTlVTRURfUEFSQU0odjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
dWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShs
b2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMdWludD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7CisgICAgVU5VU0VEX1BBUkFNKGRh
dGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gy
ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBV
TlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
ZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh0
cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQoreworICAg
IFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCit7CisgICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKKyAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFu
PGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKK3sKKyAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwor
ICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50
IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VE
X1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJBTSh6KTsKKyAgICBVTlVTRURfUEFSQU0odyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVT
RURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBH
Q0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQoreworICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHgpOworICAgIFVOVVNFRF9QQVJB
TSh5KTsKKyAgICBVTlVTRURfUEFSQU0oeik7CisgICAgVU5VU0VEX1BBUkFNKHcpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKK3sKKyAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwg
R0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRy
IG9mZnNldCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShz
aXplKTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0cmlkZSk7
CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBH
Q0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBv
ZmZzZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAgIFVOVVNFRF9QQVJBTShzdGFy
dCk7CisgICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAg
ICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdD
R0xlbnVtPiBidWZzKQoreworICAgIFVOVVNFRF9QQVJBTShidWZzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xp
bnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdmFsdWVzKQoreworICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBV
TlVTRURfUEFSQU0odmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xT
cGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7
CisgICAgVU5VU0VEX1BBUkFNKGRyYXdidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xl
bnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IHZhbHVlcykKK3sKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKKyAgICBVTlVTRURfUEFSQU0o
ZHJhd2J1ZmZlcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50
IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQoreworICAgIFVO
VVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKKyAgICBV
TlVTRURfUEFSQU0oZGVwdGgpOworICAgIFVOVVNFRF9QQVJBTShzdGVuY2lsKTsKK30KKworUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQorewor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVR
dWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQoreworICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7
Cit9CisKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRm
b3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5RdWVy
eShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQoreworICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQorewor
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisKKyAg
ICByZXR1cm4gMDsKK30KKworR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1
ZXJ5T2JqZWN0dWkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSwgR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHF1ZXJ5KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIHJl
dHVybiAwOworfQorCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTYW1wbGVyKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworfQorCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBV
TlVTRURfUEFSQU0oc2FtcGxlcik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odW5pdCk7CisgICAgVU5VU0VE
X1BBUkFNKHNhbXBsZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1w
bGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50IHBhcmFtKQoreworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURf
UEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2Ft
cGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc2FtcGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBVTlVTRURfUEFSQU0o
cGFyYW0pOworfQorCitHQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBs
ZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZXIpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Cisg
ICAgcmV0dXJuIDAuZjsKK30KKworR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFt
ZSkKKworeworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocG5h
bWUpOworICAgIHJldHVybiAwOworfQorCitHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQorewor
ICAgIFVOVVNFRF9QQVJBTShjb25kaXRpb24pOworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisK
KyAgICByZXR1cm4gMDsKK30KKworR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzU3luYyhHQ0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
U3luYyhHQ0dMc3luYyBzeW5jKQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKK30KKworR0NH
TGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5
bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIFVOVVNF
RF9QQVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJB
TSh0aW1lb3V0KTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xp
bnQ2NCB0aW1lb3V0KQoreworICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKKyAgICBVTlVTRURfUEFS
QU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJBTSh0aW1lb3V0KTsKK30KKworR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2koR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5h
bWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bmMpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
CisgICAgcmV0dXJuIDA7Cit9CisKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxh
dGZvcm1HTE9iamVjdCBpZCkKK3sKKyAgICBVTlVTRURfUEFSQU0oaWQpOworfQorCitHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9y
bUdMT2JqZWN0IGlkKQoreworICAgIFVOVVNFRF9QQVJBTShpZCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVk
YmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgaWQpCit7CisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRp
dmVNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShwcmltaXRpdmVNb2RlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNmb3JtRmVlZGJhY2soKQoreworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBH
Q0dMZW51bSBidWZmZXJNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBV
TlVTRURfUEFSQU0odmFyeWluZ3MpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXJNb2RlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
KQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRi
YWNrKCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNm
b3JtRmVlZGJhY2soKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
QnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWlu
dCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dM
c2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworICAgIFVOVVNFRF9QQVJB
TShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShzaXplKTsKK30KKworVmVjdG9yPEdDR0x1aW50
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQoreworICAg
IFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURfUEFSQU0odW5pZm9ybU5hbWVzKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxHQ0dMaW50PiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25z
dCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCit7Cisg
ICAgVmVjdG9yPEdDR0xpbnQ+IHJlc3VsdCh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDApOworI2lm
IEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCisgICAgQVNTRVJUKHByb2dyYW0p
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5z
aXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHJlc3VsdC5kYXRhKCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
KyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0dDR0x1aW50IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJv
Z3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja05hbWUpOworICAgIHJldHVybiAw
OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1C
bG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJ
bmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVu
aWZvcm1CbG9ja0luZGV4KTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlmb3Jt
QmxvY2tCaW5kaW5nKQoreworICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKyAgICBVTlVTRURf
UEFSQU0odW5pZm9ybUJsb2NrSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tC
aW5kaW5nKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhlbHMo
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oeCk7CisgICAgVU5VU0VEX1BBUkFNKHkpOworICAgIFVOVVNFRF9QQVJB
TSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGZv
cm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxv
Y2tpdihHQ0dMdWludCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBhcmFtcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
cHJvZ3JhbSk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICBVTlVT
RURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xlbnVtLCBHQ0dMZW51bSAs
IEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtLCBH
Q0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTNEKEdDR0xlbnVt
LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dM
aW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NH
TGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51
bSwgR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwg
R0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXpl
aSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdDR0xzaXplaSwg
R0NHTGludHB0cikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMc2l6
ZWksIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQorewor
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
Tik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0FycmF5c0lu
c3RhbmNlZEFOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTFNwYW48
Y29uc3QgR0NHTHNpemVpPiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQor
eworICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1l
bnRzQU5HTEUoR0NHTGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiwgR0NHTHNpemVpKQoreworICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NH
TGVudW0sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMaW50PiwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiwgR0NHTHNpemVpKQoreworICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNh
ZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKK3sK
KyAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIg
fHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOworICAgIFVu
aXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CisgICAgdW5zaWduZWQgc2l6ZSA9IDA7Cisg
ICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CisgICAgICAgIFBpeGVsU3RvcmVQYXJh
bXMgcGFyYW1zOworICAgICAgICBwYXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50Owor
ICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7
CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVk
IGNoYXI+KHNpemUpOworICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwg
c2l6ZSk7CisgICAgfQorICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4oemVy
by5nZXQoKSwgc2l6ZSkpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKQEAgLTEwMyw2
ICszMTc3LDYgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW4KICAgICByZXR1cm4gcmVhZENvbXBv
c2l0ZWRSZXN1bHRzKCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30KIAotI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmICFVU0UoQU5HTEUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDZjODFlYTdhODg5NTQwZDUz
ZTA2NWQ0NTM0YjQ2OTU2ZjIwY2ZhMWYuLmJhOWQ1YWY5MGQ3NDg1YTc2NDM1NjkyZGI1NjBhYmJl
OWQ4MTUwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC0yNSw1MyAr
MjUsMTcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoV0VCR0wpCisjaWYgRU5BQkxF
KFdFQkdMKSAmJiAhVVNFKEFOR0xFKQogCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIK
KyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCIKICNpbmNs
dWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCIKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIK
LSNlbmRpZgotCi0jaWYgVVNFKENBKQotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgotI2Vu
ZGlmCi0KLSNpZiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiQU5HTEVVdGlsaXRpZXMuaCIKLSNlbHNl
Ci0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zR0xP
cGVuR0xDb21tb24uaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIlNj
b3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QuaCIKLSNlbmRpZgotCi0vLyBGSVhNRTogRmlu
ZCBhIGJldHRlciB3YXkgdG8gYXZvaWQgdGhlIG5hbWUgY29uZmxpY3Rpb24gZm9yIE5PX0VSUk9S
LgotI2lmIFBMQVRGT1JNKFdJTikKLSN1bmRlZiBOT19FUlJPUgotI2VsaWYgUExBVEZPUk0oR1RL
KQotLy8gVGhpcyBkZWZpbmUgaXMgZnJvbSB0aGUgWDExIGhlYWRlcnMsIGJ1dCBpdCdzIHVzZWQg
YmVsb3csIHNvIHdlIG11c3QgdW5kZWZpbmUgaXQuCi0jdW5kZWYgVkVSU0lPTgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShDT0NPQSkKLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLU9CSkNfQ0xBU1MgV2Vi
R0xMYXllcjsKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQogI2lmIFVTRShOSUNPU0lBKQog
bmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgR0NHTExheWVyOwpAQCAtODAsOSArNDQsNyBAQCBj
bGFzcyBHQ0dMTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV4dGVuc2lvbnNH
TDsKLSNpZiBVU0UoQU5HTEUpCi1jbGFzcyBFeHRlbnNpb25zR0xBTkdMRTsKLSNlbGlmIFVTRShP
UEVOR0xfRVMpCisjaWYgVVNFKE9QRU5HTF9FUykKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVT
OwogI2VsaWYgVVNFKE9QRU5HTCkKIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTDsKQEAgLTk3LDI4
ICs1OSwxMSBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAKIHR5cGVk
ZWYgSGFzaE1hcDxDU3RyaW5nLCB1aW50NjRfdD4gU2hhZGVyTmFtZUhhc2g7CiAKKy8vIEJhc2Ug
Y2xhc3MgZm9yIEdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRzIHRoYXQgdXNlIE9wZW5HTCBvciBP
cGVuR0wgRVMuCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCA6
IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTAogewogcHVibGljOgogICAgIHZpcnR1YWwgfkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKCk7Ci0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0IG92ZXJyaWRlOwotI2lmIFVTRShBTkdMRSkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdDsKLSAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Q7Ci0gICAgR0NHTGVudW0g
ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICBzdGF0aWMgR0NHTGVudW0gZHJhd2lu
Z0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2lu
Z1RhcmdldCk7Ci0gICAgc3RhdGljIEdDR0xpbnQgRUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXRGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdUYXJnZXQpOwotICAgIGVudW0gY2xh
c3MgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgewotICAgICAgICAvLyBSZWxlYXNlcyBj
dXJyZW50IGNvbnRleHQgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgY2FsbHMgZG9uZSBp
biB0aGUgdGhyZWFkLgotICAgICAgICBSZWxlYXNlQ3VycmVudENvbnRleHQsCi0gICAgICAgIC8v
IFJlbGVhc2VzIGFsbCB0aHJlYWQgcmVzb3VyY2VzIGFmdGVyIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMIGNhbGxzIGRvbmUgaW4gdGhlIHRocmVhZC4KLSAgICAgICAgUmVsZWFzZVRocmVhZFJlc291
cmNlcywKLSAgICAgICAgLy8gUmVsZWFzZXMgYWxsIGdsb2JhbCBzdGF0ZS4gU2hvdWxkIGJlIHVz
ZWQgb25seSBhZnRlciBhbGwgZGVwZW5kaW5nIG9iamVjdHMgaGF2ZQotICAgICAgICAvLyBiZWVu
IHJlbGVhc2VkLgotICAgICAgICBUZXJtaW5hdGVBbmRSZWxlYXNlVGhyZWFkUmVzb3VyY2VzCi0g
ICAgfTsKLSAgICBzdGF0aWMgYm9vbCByZWxlYXNlVGhyZWFkUmVzb3VyY2VzKFJlbGVhc2VUaHJl
YWRSZXNvdXJjZUJlaGF2aW9yKTsKLSNlbmRpZgogCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5n
IG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBw
cmVwYXJlVGV4dHVyZSgpOwpAQCAtMTMyLDE1ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBFcXVp
dmFsZW50IHRvIDo6Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBwaXhlbHM9PTAgd2l0aCBubyBhbGxv
Y2F0aW9uLgogICAgIHZvaWQgdGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CiAKLSNpZiAhVVNFKEFOR0xFKQotICAgIC8vIEhlbHBl
ciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXpl
ZCB0byAwLgotICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVk
LgotICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQg
c2V0dGluZy4KICAgICBib29sIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMaW50IGFsaWdubWVudCA9IDQpOwotI2VuZGlmCiAKICAgICBib29sIGlz
R0xFUzJDb21wbGlhbnQoKSBjb25zdCBmaW5hbDsKLQogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg
IC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCiAgICAgLy8KQEAgLTIwNiw5ICsxNDUsNyBAQCBw
dWJsaWM6CiAgICAgR0NHTGludDY0IGdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkgZmluYWw7
CiAgICAgR0NHTGludDY0IGdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGlu
ZGV4KSBmaW5hbDsKICAgICBHQ0dMaW50IGdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwotI2lmICFVU0UoQU5HTEUpCiAgICAgdm9pZCBn
ZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAg
ICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFsOwogICAg
IFN0cmluZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3RbMl0sIEdDR0xzaXpl
aSwgY29uc3QgU3RyaW5nJik7CiAgICAgR0NHTGludCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwpAQCAtMjg2LDEwICsyMjMs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCkgZmlu
YWw7CiAgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCkgZmluYWw7Ci0j
aWYgIVVTRShBTkdMRSkKICAgICBib29sIGNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtR0xP
YmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25z
dDsKICAgICBib29sIHByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRl
ciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7Ci0jZW5kaWYKIAogICAg
IHZvaWQgdmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4KSBmaW5hbDsK
ICAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3Qg
R0NHTGZsb2F0LCAxPiB2YWx1ZXMpIGZpbmFsOwpAQCAtMzE3LDEwICsyNTIsOCBAQCBwdWJsaWM6
CiAKICAgICAvLyA9PT09PT09PT09IFdlYkdMMiBlbnRyeSBwb2ludHMuCiAKLSNpZiAhVVNFKEFO
R0xFKQogICAgIHZvaWQgYnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNvbnN0IHZvaWQqIGRh
dGEsIEdDR0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IGxlbmd0aCk7
CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RC
eXRlT2Zmc2V0LCBjb25zdCB2b2lkKiBzcmNEYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1
aW50IGxlbmd0aCk7Ci0jZW5kaWYKICAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVt
IHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQs
IEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKSBmaW5hbDsKIAogICAg
IHZvaWQgZ2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0
LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkgZmluYWw7CkBAIC00NDUsOSArMzc4LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIm
KSBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENvbXBvc2l0ZWRSZXN1
bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImKSBmaW5hbDsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQotICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFT
YW1wbGUoKSBmaW5hbDsKLSNlbmRpZgogCiAgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwogICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CkBAIC00NTYsOSAr
Mzg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgcHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50
KTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBkaXNwbGF5V2FzUmVj
b25maWd1cmVkKCk7Ci0jZW5kaWYKIAogICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9v
bCkgZmluYWw7CiAKQEAgLTQ4NCwxMiArNDExLDggQEAgcHVibGljOgogICAgIC8vIGFsbCBtZXRo
b2RzIGl0IGNvbnRhaW5zIG1heSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0ZWQgb24gdGhlCiAgICAg
Ly8gY3VycmVudCBoYXJkd2FyZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnNHTDo6c3VwcG9ydHMoKSB0
bwogICAgIC8vIGRldGVybWluZSB0aGlzLgotI2lmICFVU0UoQU5HTEUpCiAgICAgLy8gVXNlIGNv
dmFyaWFudCByZXR1cm4gdHlwZSBmb3IgT1BFTkdML09QRU5HTF9FUwogICAgIEV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbiYgZ2V0RXh0ZW5zaW9ucygpIGZpbmFsOwotI2Vsc2UKLSAgICBFeHRlbnNp
b25zR0wmIGdldEV4dGVuc2lvbnMoKSBmaW5hbDsKLSNlbmRpZgogCiAgICAgdm9pZCBzaW11bGF0
ZUV2ZW50Rm9yVGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcpIG92ZXJyaWRlOwogCkBA
IC00OTcsMzEgKzQyMCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5
KCkgb3ZlcnJpZGU7CiAKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0g
ICAgR3JhcGhpY3NDb250ZXh0R0xDViogYXNDVigpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBzdGF0
aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYs
IFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4
dCYpOwotCi0jaWYgVVNFKEFOR0xFKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlz
cGxheVR5cGUgZGVmYXVsdERpc3BsYXkgPSBFR0xfREVGQVVMVF9ESVNQTEFZOwotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIGNvbnN0ZXhwciBzdGF0aWMgRUdMTmF0aXZlRGlzcGxheVR5cGUgbG93
UG93ZXJEaXNwbGF5ID0gRUdMX0NBU1QoRUdMTmF0aXZlRGlzcGxheVR5cGUsIC0xKTsKLSAgICBj
b25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGhpZ2hQZXJmb3JtYW5jZURpc3Bs
YXkgPSBFR0xfQ0FTVChFR0xOYXRpdmVEaXNwbGF5VHlwZSwgLTIpOwotI2VuZGlmCi0jZW5kaWYK
LQogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgR3JhcGhpY3NDb250ZXh0
R0xJT1N1cmZhY2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47Ci0gICAgRUdMRGlzcGxheSBtX2Rpc3Bs
YXlPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRl
eHRPYmogeyBudWxscHRyIH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBt
X2NvbmZpZ09iaiB7IG51bGxwdHIgfTsKLSNlbmRpZgorCiAgICAgR0NHTHVpbnQgbV90ZXh0dXJl
IHsgMCB9OwogCi1wcml2YXRlOgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGlj
IGVudHJ5IHBvaW50cyB0aGF0IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgLy8gQ2FsbGVk
IG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIG9mIEV4dGVuc2lvbnNHTCB0aGF0
IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBX
QVJOX1VOVVNFRF9SRVRVUk47CkBAIC01NDcsMjQgKzQ1MCw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmID0gSW50UmVj
dCgpKTsKICAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1
aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwog
Ci0jaWYgVVNFKEFOR0xFKQotICAgIGJvb2wgcmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCk7
Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7Ci0gICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7Ci0gICAg
c3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXks
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEU7Ci0jZW5kaWYKLSNpZiBVU0UoQU5HTEUpCi0gICAgLy8gUmV0dXJucyBm
YWxzZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgotICAgIGJvb2wg
d2FpdEFuZFVwZGF0ZU9sZGVzdEZyYW1lKCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgLy8g
UGxhdGZvcm0gc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHJlbGVhc2VSZXNvdXJjZXMoKTsKLSAgICBz
dGF0aWMgdm9pZCBwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKTsKLSNlbmRpZgogCi0j
aWYgIVVTRShBTkdMRSkKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBVbmlxdWVSZWY8c2g6
OlNoYWRlclZhcmlhYmxlPj4gU2hhZGVyU3ltYm9sTWFwOwogCiAgICAgc3RydWN0IFNoYWRlclNv
dXJjZUVudHJ5IHsKQEAgLTYzMSwxMiArNTE3LDggQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRlck5hbWVIYXNoPiBuYW1lSGFzaE1hcEZvclNoYWRl
cnM7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKIAotI2lmIFVTRShBTkdMRSkKLSAgICBmcmllbmQg
Y2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnNH
TEFOR0xFPiBtX2V4dGVuc2lvbnM7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVO
R0xfRVMpCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVTOwogICAgIGZyaWVu
ZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xDb21tb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4
dGVuc2lvbnNHTE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CkBAIC02NDgsOSArNTMwLDcgQEAgcHJp
dmF0ZToKIAogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+PiBtX3ZlcnRleEFycmF5OwogCi0jaWYg
IVVTRShBTkdMRSkKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOwotI2VuZGlmCiAK
ICAgICBHQ0dMdWludCBtX2ZibyB7IDAgfTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CkBAIC02NTgsNTQgKzUzOCwxNCBAQCBwcml2YXRlOgogICAgIEdDR0x1aW50IG1faW50ZXJtZWRp
YXRlVGV4dHVyZSB7IDAgfTsKICNlbmRpZgogCi0jaWYgIVVTRShBTkdMRSkgJiYgVVNFKE9QRU5H
TF9FUykKKyNpZiBVU0UoT1BFTkdMX0VTKQogICAgIEdDR0x1aW50IG1fZGVwdGhCdWZmZXIgeyAw
IH07CiAgICAgR0NHTHVpbnQgbV9zdGVuY2lsQnVmZmVyIHsgMCB9OwogI2VuZGlmCiAgICAgR0NH
THVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CiAKICAgICBHQ0dMdWludCBtX2ludGVy
bmFsQ29sb3JGb3JtYXQgeyAwIH07Ci0jaWYgVVNFKEFOR0xFKQotICAgIEdDR0x1aW50IG1faW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgeyAwIH07Ci0jZW5kaWYKLSAgICBzdHJ1Y3QgR3JhcGhp
Y3NDb250ZXh0R0xTdGF0ZSB7Ci0gICAgICAgIEdDR0x1aW50IGJvdW5kUmVhZEZCTyB7IDAgfTsK
LSAgICAgICAgR0NHTHVpbnQgYm91bmREcmF3RkJPIHsgMCB9OwotICAgICAgICBHQ0dMZW51bSBh
Y3RpdmVUZXh0dXJlVW5pdCB7IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCB9OwotCi0gICAg
ICAgIHVzaW5nIEJvdW5kVGV4dHVyZU1hcCA9IEhhc2hNYXA8R0NHTGVudW0sCi0gICAgICAgICAg
ICBzdGQ6OnBhaXI8R0NHTHVpbnQsIEdDR0xlbnVtPiwKLSAgICAgICAgICAgIEludEhhc2g8R0NH
TGVudW0+LAotICAgICAgICAgICAgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxH
Q0dMdWludD4sCi0gICAgICAgICAgICBQYWlySGFzaFRyYWl0czxXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQ0dMdWludD4+Ci0gICAgICAgID47Ci0gICAgICAgIEJvdW5kVGV4dHVyZU1hcCBib3Vu
ZFRleHR1cmVNYXA7Ci0gICAgICAgIEdDR0x1aW50IGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25z
dCB7IHJldHVybiBib3VuZFRleHR1cmUoYWN0aXZlVGV4dHVyZVVuaXQpOyB9Ci0gICAgICAgIEdD
R0x1aW50IGJvdW5kVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1
cmVVbml0KTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5k
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgR0NHTHVpbnQgY3VycmVudEJv
dW5kVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQp
OyB9Ci0gICAgICAgIEdDR0xlbnVtIGJvdW5kVGFyZ2V0KEdDR0xlbnVtIHRleHR1cmVVbml0KSBj
b25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJl
TWFwLmZpbmQodGV4dHVyZVVuaXQpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5k
VGV4dHVyZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVl
LnNlY29uZDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CiAKLSAgICAgICAgdm9p
ZCBzZXRCb3VuZFRleHR1cmUoR0NHTGVudW0gdGV4dHVyZVVuaXQsIEdDR0x1aW50IHRleHR1cmUs
IEdDR0xlbnVtIHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgYm91bmRUZXh0dXJlTWFw
LnNldCh0ZXh0dXJlVW5pdCwgc3RkOjptYWtlX3BhaXIodGV4dHVyZSwgdGFyZ2V0KSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8
R0NHTHVpbnQsIEludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPEdDR0x1aW50Pj47Ci0gICAgICAgIFRleHR1cmVTZWVkQ291bnQgdGV4dHVyZVNlZWRD
b3VudDsKLSAgICB9OwogCiAgICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBtX3N0YXRlOwogCkBA
IC03MTQsMTYgKzU1NCw2IEBAIHByaXZhdGU6CiAgICAgR0NHTHVpbnQgbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKICAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIgeyAwIH07CiAKLSNpZiBVU0UoQU5HTEUpCi0gICAgLy8gRm9yIHByZXNlcnZlRHJhd2lu
Z0J1ZmZlcjp0cnVlIHdpdGhvdXQgbXVsdGlzYW1wbGluZy4KLSAgICBHQ0dMdWludCBtX3ByZXNl
cnZlRHJhd2luZ0J1ZmZlclRleHR1cmUgeyAwIH07Ci0gICAgLy8gQXR0YWNoZXMgbV90ZXh0dXJl
IHdoZW4gbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlIGlzIG5vbi16ZXJvLgotICAgIEdD
R0x1aW50IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPIHsgMCB9OwotICAgIC8vIFF1ZXJpZWQg
YXQgZGlzcGxheSBzdGFydHVwLgotICAgIEVHTGludCBtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFy
Z2V0IHsgLTEgfTsKLQotI2VuZGlmCi0KICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNp
emVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0NHTGVudW0+IG1fc3ludGhldGljRXJyb3Jz
OwogCkBAIC03NDQsMjkgKzU3NCw4IEBAIHByaXZhdGU6CiAjaWYgVVNFKENBSVJPKQogICAgIFBs
YXRmb3JtR0xPYmplY3QgbV92YW8geyAwIH07CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIC8vIEJhY2tpbmcgc3RvcmUgZm9yIHRoZSB0aGUgYnVmZmVyIHdoaWNoIGlzIGV2ZW50
dWFsbHkgdXNlZCBmb3IgZGlzcGxheS4KLSAgICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZl
ciA9PSBmYWxzZSwgdGhpcyBpcyB0aGUgZHJhd2luZyBidWZmZXIgYmFja2luZyBzdG9yZS4KLSAg
ICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9PSB0cnVlLCB0aGlzIGlzIGJsaXR0ZWQg
dG8gZHVyaW5nIGRpc3BsYXkgcHJlcGFyZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNl
PiBtX2Rpc3BsYXlCdWZmZXJCYWNraW5nOwotICAgIHZvaWQqIG1fZGlzcGxheUJ1ZmZlclBidWZm
ZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgYm9vbCBtX3N3
aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uIHsgZmFsc2UgfTsKLSAgICBTY29wZWRI
aWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0IG1faGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdDsKLSNl
bmRpZgotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFPiBtX2N2OwotI2VuZGlmCi0jaWYgVVNF
KEFOR0xFKQotICAgIGJvb2wgbV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxpbWl0ID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4UGVuZGluZ0ZyYW1lcyA9IDM7Ci0g
ICAgc2l6ZV90IG1fb2xkZXN0RnJhbWVDb21wbGV0aW9uRmVuY2UgeyAwIH07Ci0gICAgU2NvcGVk
R0xGZW5jZSBtX2ZyYW1lQ29tcGxldGlvbkZlbmNlc1ttYXhQZW5kaW5nRnJhbWVzXTsKLSNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgIVVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3MzBkNmQzNjdmMWY5NTQ0NWIwYTc5YzE3NGRhODhhM2VlNTFjYjljLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyODg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCi0KLSNpZiBFTkFC
TEUoV0VCR0wpICYmICFVU0UoQU5HTEUpCi0KLSNpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCi0jZWxzZQotI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9w
ZW5HTC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
Zy5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0j
aW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpZiBVU0UoTElCRVBP
WFkpCi0jaW5jbHVkZSAiRXBveHlTaGltcy5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNs
dWRlICJPcGVuR0xFU1NoaW1zLmgiCi0jZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlcigpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VG
bGFnOwotICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWRO
YW1lSGFzaDsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10gewotICAgICAgICBzaGFy
ZWROYW1lSGFzaCA9IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OwotICAgIH0p
OwotCi0gICAgcmV0dXJuICpzaGFyZWROYW1lSGFzaDsKLX0KLQotc3RhdGljIHZvaWQgc2V0Q3Vy
cmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkK
LXsKLSAgICAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFz
aDsKLX0KLQotLy8gSGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2Nv
bXBpbGVyIHRvIGRvCi0vLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0
YXRpYyBtZXRob2QsIGJlZm9yZQotLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIKLS8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0
aGUgY3VycmVudCBpbnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KLQotc3RhdGlj
IHVpbnQ2NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5n
dGgpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ1N0cmlu
ZyBuYW1lQXNDU3RyaW5nID0gQ1N0cmluZyhuYW1lKTsKLQotICAgIC8vIExvb2sgdXAgbmFtZSBp
biBvdXIgbG9jYWwgbWFwLgotICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFw
Rm9yU2hhZGVyID0gKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOwotICAgIFNoYWRl
ck5hbWVIYXNoOjppdGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyLT5maW5kKG5hbWVBc0NTdHJpbmcpOwotICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlci0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52
YWx1ZTsKLQotICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOwot
Ci0gICAgLy8gQ29udmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8g
YSA2NC1iaXQgcmVzdWx0Ci0gICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUg
b2Ygb3VyIHRhYmxlLiBPdmVyZmxvdyB3b3VsZAotICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlm
IHdlJ3JlIGFscmVhZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCi0gICAgLy8gd2Un
cmUgaG9waW5nIHRoYXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKLSAgICAv
LyBkb24ndCBoYXZlIHRoYXQgbWFueSBzeW1ib2xzKS4KLQotICAgIHVpbnQ2NF90IHJlc3VsdCA9
IGhhc2hWYWx1ZTsKLSAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhh
c2hNYXBGb3JTaGFkZXItPnNpemUoKSArIDEpOwotCi0gICAgY3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyLT5zZXQobmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChj
b25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCi17Ci0gICAgYXV0byBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24m
IGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsK
LSAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKSkgewotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRo
U3RlbmNpbEV4dGVuc2lvbik7Ci0gICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2ls
IGlzIHRydWUuCi0gICAgICAgICAgICBhdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgICAgICBzZXRDb250ZXh0
QXR0cmlidXRlcyhhdHRycyk7Ci0gICAgfQotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1f
aXNGb3JXZWJHTDIpIHsKLSAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7Ci0gICAgICAgICAgICBhdHRycy5hbnRpYWxp
YXMgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJDb21w
b3NpdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLQotI2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwg
R0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJ
VEhFUiwgR0xfRkFMU0UpOwotI2VuZGlmCi0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5h
bnRpYWxpYXMpCi0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVk
aWF0ZVRleHR1cmUpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7
Ci0gICAgZ2xGbHVzaCgpOwotCi0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9m
Ym8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgZWxzZQotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8p
OwotICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3N0YXRlLmJvdW5kVGFy
Z2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUo
R0xfVEVYVFVSRTApIDogMCk7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUu
Ym91bmREcmF3RkJPKTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCi0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgOjpnbEZsdXNoKCk7Ci19Ci0KLXN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVy
aW5nUmVzdWx0cygpCi17Ci0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlm
IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewotICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG11c3RSZXN0b3Jl
RkJPID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJl
YWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgICAgICBpZiAobV9zdGF0ZS5ib3Vu
ZERyYXdGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
LSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXV0byByZXN1bHQgPSBy
ZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQot
ewotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50
SGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWln
aHQgPj0gMCk7Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7
Ci0gICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVz
KCk7Ci0KLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NP
Ul9URVNULCBHTF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRo
ZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Ci0gICAgCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9
IHJlc2hhcGVGQk9zKEludFNpemUod2lkdGgsIGhlaWdodCkpOwotCi0gICAgLy8gSW5pdGlhbGl6
ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7MCwgMCwg
MCwgMH0sIGNsZWFyRGVwdGggPSAwOwotICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7Ci0gICAg
R0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RS
VUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFOwotICAgIEdMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZm
ZmZmZmYsIHN0ZW5jaWxNYXNrQmFjayA9IDB4ZmZmZmZmZmY7Ci0gICAgR0xiaXRmaWVsZCBjbGVh
ck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOwotICAgIDo6Z2xHZXRGbG9hdHYoR0xfQ09MT1Jf
Q0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOwotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDAp
OwotICAgIDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Ci0g
ICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKLQot
ICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJzLmRl
cHRoKSB7Ci0gICAgICAgIDo6Z2xHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVh
ckRlcHRoKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7
Ci0gICAgICAgIDo6Z2xHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2sp
OwotICAgICAgICA6OmdsRGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVhck1hc2sgfD0g
R0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAg
ICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5j
aWwpOwotICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKDApOwotICAgICAgICA6OmdsR2V0SW50ZWdl
cnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNp
bE1hc2spKTsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1B
U0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7Ci0gICAgICAg
IDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKLSAgICAgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgMHhmZmZmZmZmZik7Ci0gICAgICAgIGNs
ZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgfQotCi0gICAgOjpnbENsZWFy
KGNsZWFyTWFzayk7Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNv
bG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKLSAgICA6OmdsQ29sb3JNYXNr
KGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7
Ci0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFz
ayk7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xDbGVhclN0
ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
RlJPTlQsIHN0ZW5jaWxNYXNrKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
QkFDSywgc3RlbmNpbE1hc2tCYWNrKTsKLSAgICB9Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8p
Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0KLSAgICBhdXRvIGVycm9yID0gOjpnbEdl
dEVycm9yKCk7Ci0gICAgaWYgKGVycm9yICE9IEdMX05PX0VSUk9SKSB7Ci0gICAgICAgIFJFTEVB
U0VfTE9HKFdlYkdMLCAiRmF0YWw6IE9wZW5HTCBlcnJvciBkdXJpbmcgR3JhcGhpY3NDb250ZXh0
R0wgYnVmZmVyIGluaXRpYWxpemF0aW9uICglZCkuIiwgZXJyb3IpOwotICAgICAgICBmb3JjZUNv
bnRleHRMb3N0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICA6OmdsRmx1c2goKTsK
LX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmco
UGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRT
aGFkZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZl
cnRleFNoYWRlcikpOwotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFn
bWVudFNoYWRlcikpOwotICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVu
dEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwot
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIHNoOjpTaGFkZXJWYXJpYWJsZT4gY29tYmluZWRWYXJ5aW5n
czsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA6IHZlcnRleEVudHJ5LnZhcnlp
bmdNYXApIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBzeW1ib2xOYW1lID0gdmVydGV4U3ltYm9s
LmtleTsKLSAgICAgICAgLy8gVGhlIHZhcnlpbmcgbWFwIGluY2x1ZGVzIHZhcmlhYmxlcyBmb3Ig
ZWFjaCBpbmRleCBvZiBhbiBhcnJheSB2YXJpYWJsZS4KLSAgICAgICAgLy8gV2Ugb25seSB3YW50
IGEgc2luZ2xlIHZhcmlhYmxlIHRvIHJlcHJlc2VudCB0aGUgYXJyYXkuCi0gICAgICAgIGlmIChz
eW1ib2xOYW1lLmVuZHNXaXRoKCJdIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAvLyBEb24ndCBjb3VudCBidWlsdCBpbiB2YXJ5aW5ncy4KLSAgICAgICAgaWYgKHN5bWJvbE5h
bWUgPT0gImdsX0ZyYWdDb29yZCIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciIHx8
IHN5bWJvbE5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgY29uc3QgYXV0byYgZnJhZ21lbnRTeW1ib2wgPSBmcmFnbWVudEVudHJ5LnZhcnlp
bmdNYXAuZmluZChzeW1ib2xOYW1lKTsKLSAgICAgICAgaWYgKGZyYWdtZW50U3ltYm9sICE9IGZy
YWdtZW50RW50cnkudmFyeWluZ01hcC5lbmQoKSkKLSAgICAgICAgICAgIGNvbWJpbmVkVmFyeWlu
Z3MuYWRkKHN5bWJvbE5hbWUsIGZyYWdtZW50U3ltYm9sLT52YWx1ZSk7Ci0gICAgfQotCi0gICAg
c2l6ZV90IG51bVZhcnlpbmdzID0gY29tYmluZWRWYXJ5aW5ncy5zaXplKCk7Ci0gICAgaWYgKCFu
dW1WYXJ5aW5ncykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzdGQ6OnZlY3RvcjxzaDo6
U2hhZGVyVmFyaWFibGU+IHZhcmlhYmxlczsKLSAgICB2YXJpYWJsZXMucmVzZXJ2ZShjb21iaW5l
ZFZhcnlpbmdzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2YXJ5aW5nU3ltYm9sIDog
Y29tYmluZWRWYXJ5aW5ncy52YWx1ZXMoKSkKLSAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2
YXJ5aW5nU3ltYm9sKTsKLQotICAgIEdDR0xpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSAwOwotI2lm
IFVTRShPUEVOR0xfRVMpCi0gICAgOjpnbEdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMs
ICZtYXhWYXJ5aW5nVmVjdG9ycyk7Ci0jZWxzZQotICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdW
ZWN0b3JzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgR0NHTGludCBtYXhWYXJ5aW5nRmxvYXRzID0g
MDsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgJm1heFZh
cnlpbmdGbG9hdHMpOwotICAgICAgICBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1heFZhcnlpbmdGbG9h
dHMgLyA0OwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBzaDo6Q2hlY2tWYXJpYWJsZXNXaXRo
aW5QYWNraW5nTGltaXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJpYWJsZXMpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVj
dCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOwot
ICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOwot
ICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0
ZXhTaGFkZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwotCi0gICAgSGFzaE1hcDxT
dHJpbmcsIHNoOjpHTGVudW0+IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcDsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgZW50cnkgOiB2ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKSB7Ci0gICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZTsKLSAgICAgICAgdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmFkZChTdHJpbmcobWFwcGVkTmFt
ZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSwgZW50cnkudmFsdWUuZ2V0KCkucHJlY2lz
aW9uKTsKLSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRy
eS51bmlmb3JtTWFwKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0g
ZW50cnkudmFsdWUuZ2V0KCkubWFwcGVkTmFtZTsKLSAgICAgICAgY29uc3QgYXV0byYgdmVydGV4
U3ltYm9sID0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmZpbmQoU3RyaW5nKG1hcHBlZE5hbWUu
Y19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSkpOwotICAgICAgICBpZiAodmVydGV4U3ltYm9s
ICE9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVl
ICE9IGVudHJ5LnZhbHVlLmdldCgpLnByZWNpc2lvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUuYWN0aXZl
VGV4dHVyZVVuaXQgPSB0ZXh0dXJlOwotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQo
cHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAucmVtb3ZlKHByb2dyYW0pOwotICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRT
eW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwot
ICAgIExPRyhXZWJHTCwgIjo6YmluZEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgOjpn
bEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbWFwcGVkTmFtZS51dGY4KCkuZGF0
YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCaW5kQnVmZmVyKHRh
cmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZy
YW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0x1
aW50IGZibzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSBidWZmZXI7Ci0gICAgZWxz
ZQotICAgICAgICBmYm8gPSAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRp
c2FtcGxlRkJPIDogbV9mYm8pOwotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIp
OwotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZC
Tyk7Ci0gICAgaWYgKGZibyAhPSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERy
YXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IGZibzsKLSAgICB9Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0
YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4
dHVyZSwgdGFyZ2V0KTsKLSAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJl
ZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xC
bGVuZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhh
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3Rv
ciwgR0NHTGVudW0gZGZhY3RvcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwot
fSAgICAgICAKLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0Is
IHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0g
dXNhZ2UpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMU3Bhbjxjb25zdCB2b2lkPiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQnVmZmVyRGF0
YSh0YXJnZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50cHRyIG9mZnNldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJ1ZmZl
clN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwgZGF0YS5kYXRhKTsKLX0KLQot
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R0NHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLQotICAgIHJldHVybiA6OmdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjbGVhckNvbG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBm
IGIsIEdDR0xjbGFtcGYgYSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bENsZWFyKG1hc2spOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyU3RlbmNpbChHQ0dMaW50IHMpCi17Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbENsZWFyU3RlbmNp
bChzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xi
b29sZWFuIHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29s
ZWFuIGFscGhhKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFR1cm4gb24gbmFtZSBtYXBw
aW5nLiBEdWUgdG8gdGhlIHdheSBBTkdMRSBuYW1lIGhhc2hpbmcgd29ya3MsIHdlCi0gICAgLy8g
cG9pbnQgYSBnbG9iYWwgaGFzaG1hcCB0byB0aGUgbWFwIG93bmVkIGJ5IHRoaXMgY29udGV4dC4K
LSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBtX2NvbXBpbGVyLmdldFJl
c291cmNlcygpOwotICAgIFNoSGFzaEZ1bmN0aW9uNjQgcHJldmlvdXNIYXNoRnVuY3Rpb24gPSBB
TkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb247Ci0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0
aW9uID0gbmFtZUhhc2hGb3JTaGFkZXI7Ci0KLSAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVy
cykKLSAgICAgICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1l
SGFzaD4oKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBG
b3JTaGFkZXJzLmdldCgpKTsKLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291
cmNlcyk7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9u
cy0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7Ci0KLSAgICBBTkdMRVJl
c291cmNlcy5IYXNoRnVuY3Rpb24gPSBwcmV2aW91c0hhc2hGdW5jdGlvbjsKLSAgICBtX2NvbXBp
bGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyKG51bGxwdHIpOwotCi0gICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNl
Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xh
dGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwotICAgIGNv
bnN0IGNoYXIqIHRyYW5zbGF0ZWRTaGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5k
YXRhKCk7Ci0gICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVy
Q1N0cmluZy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBvcmlnaW5hbCBz
aGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1c
biIsIGdldFNoYWRlclNvdXJjZShzaGFkZXIpLnV0ZjgoKS5kYXRhKCkpOwotICAgIExPRyhXZWJH
TCwgIi0tLSBiZWdpbiB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCB0
cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tIiwgdHJhbnNsYXRlZFNoYWRlclB0cik7Ci0KLSAg
ICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFu
c2xhdGVkU2hhZGVyTGVuZ3RoKTsKLSAgICAKLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIp
OwotICAgIAotICAgIGludCBjb21waWxlU3RhdHVzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJp
dihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAgICBTaGFkZXJT
b3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAg
Ly8gUG9wdWxhdGUgdGhlIHNoYWRlciBsb2cKLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6
Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAg
ICBpZiAobGVuZ3RoKSB7Ci0gICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgICAgIFZlY3Rv
cjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKLSAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hh
ZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICAgICAgUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICAgICAgZW50cnkubG9nID0gZ2V0
VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsK
LSAgICB9Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyAhPSBHTF9UUlVFKSB7Ci0gICAgICAgIGVu
dHJ5LmlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IHNoYWRlciB0
cmFuc2xhdG9yIHByb2R1Y2VkIGEgc2hhZGVyIHRoYXQgT3BlbkdMIHdvdWxkIG5vdCBjb21waWxl
LiIpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVy
KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBIYXNoTWFwPFBsYXRmb3JtR0xPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotCi0gICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2hh
ZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKLQotICAgIGNvbnN0IENTdHJp
bmcmIHNoYWRlclNvdXJjZUNTdHJpbmcgPSBlbnRyeS5zb3VyY2UudXRmOCgpOwotICAgIGNvbnN0
IGNoYXIqIHNoYWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOwotICAg
IGludCBzaGFkZXJTb3VyY2VMZW5ndGggPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmxlbmd0aCgpOwot
Ci0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuJXNc
bi0tLSBlbmQgZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4iLCBzaGFkZXJTb3VyY2VQdHIpOwot
Ci0gICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZzaGFk
ZXJTb3VyY2VMZW5ndGgpOwotCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLQotICAg
IGludCBjb21waWxlU3RhdHVzOwotCi0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElM
RV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKLQotICAgIGlmIChjb21waWxlU3RhdHVzID09IEdM
X1RSVUUpIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkRpcmVjdCBjb21waWxhdGlvbiBvZiBzaGFkZXIgc3VjY2VlZGVkLiIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVudHJ5LmlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAi
RXJyb3I6IGRpcmVjdCBjb21waWxhdGlvbiBvZiBzaGFkZXIgZmFpbGVkLiIpOwotICAgIH0KLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBU1NFUlQo
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChh
dHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGJvcmRlcik7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
Ci17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBU1NFUlQobV9zdGF0
ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewot
ICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEN1bGxG
YWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMo
R0NHTGVudW0gZnVuYykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRGVwdGhN
YXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFk
ZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsK
LSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFkZXJQcm9ncmFt
U3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwotICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJv
Z3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJs
ZShHQ0dMZW51bSBjYXApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgOjpnbERpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3Qs
IEdDR0xzaXplaSBjb3VudCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwot
ICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5
cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNl
dCkpKTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xFbmFibGUoY2FwKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVp
bnQgaW5kZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRmluaXNoKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRmx1c2goKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsRnJhbWVi
dWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUs
IGxldmVsKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJv
bnRGYWNlKEdDR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwotICAgIDo6Z2xH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4
QXR0cmlidXRlU2l6ZSk7Ci0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXpl
KTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWlu
YXRpb24uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsK
LSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBp
bmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5k
YXRhKCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwg
U0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVu
Z3RoKSk7Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1l
LmRhdGEoKSwgbmFtZUxlbmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBw
aW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRl
eCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkp
OwotI2VuZGlmCi0KLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Ci0gICAgaW5mby50eXBl
ID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBH
Q0dMaW50IHN5bWJvbENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVT
eW1ib2xDb3VudChwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX0FUVFJJQlVURVMs
ICZzeW1ib2xDb3VudCk7Ci0gICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgfQotICAgIAotICAgIEFjdGl2ZVNoYWRlclN5bWJv
bENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAgICBHQ0dMdWludCByYXdJ
bmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5k
ZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5k
ZXhNYXBbaW5kZXhdIDogLTE7Ci0KLSAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9n
cmFtLCByYXdJbmRleCwgaW5mbyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOwotICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1T
aXplKTsKLQotICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4VW5pZm9ybVNpemUpOyAvLyBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCi0gICAg
R0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0g
dHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVu
aWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAg
aWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3RyaW5n
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9M
X1RZUEVfVU5JRk9STSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7Ci0gICAgCi0j
aWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxl
bmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSB1bmlm
b3JtICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0
ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotICAgIAot
ICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAg
IGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBHQ0dMaW50IHN5bWJv
bENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAu
ZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChw
cm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291bnQp
OwotICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHBy
b2dyYW0pOwotICAgIH0KLSAgICAKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJv
bENvdW50cyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgR0NHTHVpbnQgcmF3SW5kZXggPSAoaW5kZXgg
PCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCkpID8g
c3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhdIDogLTE7
Ci0gICAgCi0gICAgcmV0dXJuIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJhd0luZGV4
LCBpbmZvKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHNpemVpIG1heENvdW50LCBHQ0dM
c2l6ZWkqIGNvdW50LCBQbGF0Zm9ybUdMT2JqZWN0KiBzaGFkZXJzKQotewotICAgIGlmICghcHJv
Z3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50
LCBjb3VudCwgc2hhZGVycyk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIYXNoZWROYW1l
KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBuYW1lOwotICAgIHVpbnQ2NF90IG51bWJlciA9IG5hbWVIYXNoRm9yU2hhZGVyKG5h
bWUudXRmOCgpLmRhdGEoKSwgbmFtZS5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
IndlYmdsXyIsIGhleChudW1iZXIsIExvd2VyY2FzZSkpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFN0
cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNl
TWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9s
VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRv
JiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBh
dXRvIHN5bWJvbEVudHJ5ID0gc3ltYm9sTWFwLmZpbmQobmFtZSk7Ci0gICAgaWYgKHN5bWJvbEVu
dHJ5ID09IHN5bWJvbE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgIGF1dG8mIG1hcHBlZE5hbWUgPSBzeW1ib2xFbnRyeS0+dmFsdWUuZ2V0KCkubWFwcGVkTmFt
ZTsKLSAgICByZXR1cm4gU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5n
dGgoKSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9s
TmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1i
b2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0NHTHNpemVpIGNvdW50ID0gMDsK
LSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07Ci0gICAgZ2V0QXR0YWNoZWRT
aGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICBmb3IgKEdDR0xzaXpl
aSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7
Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUu
dmFsdWUoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0
ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KLSAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2Vk
U2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRl
ck1hcC5lbmQoKSkgewotICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVl
OwotICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1h
cHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAgICAg
ICBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVy
cy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHN5
bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5
IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAotICAg
ICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVy
IHByb2dyYW0uCi0gICAgICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICAg
ICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsK
LSAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hh
ZGVycy5nZXQoKSk7Ci0KLSAgICAgICAgYXV0byBnZW5lcmF0ZWROYW1lID0gZ2VuZXJhdGVIYXNo
ZWROYW1lKG5hbWUpOwotCi0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihu
dWxscHRyKTsKLQotICAgICAgICBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLnNldChnZW5l
cmF0ZWROYW1lLCBuYW1lKTsKLQotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkTmFtZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpvcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAg
PSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAgICAgIGlmIChuYW1lID09IHN5bWJv
bEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5hbWUuY19zdHIoKSkKLSAgICAgICAgICAgIHJldHVy
biBzeW1ib2xFbnRyeS5rZXk7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0K
LVN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBHQ0dMc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXJzWzJdOwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAm
Y291bnQsIHNoYWRlcnMpOwotICAgIAotICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5T
aGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlm
IChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7
Ci0gICAgfQotCi0gICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBz
aGFkZXJzIGFmdGVyIGxpbmtpbmcuCi0gICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1h
cC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5k
KCkpIHsKLSAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKLSAgICAg
ICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxp
bmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2lu
YWxOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgICAg
ICBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNo
YWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1l
LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTog
dGhleSBtYXkgYmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGls
ZWQsCi0gICAgICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFu
eSBzaGFkZXIgcHJvZ3JhbS4KLQotICAgICAgICBjb25zdCBhdXRvJiBjYWNoZWQgPSBtX3Bvc3Np
Ymx5VW51c2VkQXR0cmlidXRlTWFwLmZpbmQobmFtZSk7Ci0gICAgICAgIGlmIChjYWNoZWQgIT0g
bV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBj
YWNoZWQtPnZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXJzWzJdLCBzaXplX3QgY291bnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBmb3Ig
KHNpemVfdCBzeW1ib2xUeXBlID0gMDsgc3ltYm9sVHlwZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+
KFNIQURFUl9TWU1CT0xfVFlQRV9WQVJZSU5HKTsgKytzeW1ib2xUeXBlKSB7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgU2hhZGVyU291
cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcnNb
aV0pOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29u
c3QgU2hhZGVyU3ltYm9sTWFwJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChz
dGF0aWNfY2FzdDxlbnVtIEFOR0xFU2hhZGVyU3ltYm9sVHlwZT4oc3ltYm9sVHlwZSkpOwotICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewotICAg
ICAgICAgICAgICAgIGlmIChuYW1lID09IHN5bWJvbEVudHJ5LnZhbHVlLmdldCgpLm1hcHBlZE5h
bWUuY19zdHIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQot
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0p
Ci0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybiAtMTsKLQotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1i
b2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwotICAg
IExPRyhXZWJHTCwgIjo6Z2xHZXRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgp
KTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRp
cmVjdChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAtMTsKLQotCi0gICAgcmV0dXJuIDo6Z2xHZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQot
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7Ci0KLSAgICAvLyBTZXQgYW4gYXJiaXRy
YXJ5IGxpbWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgotICAgIC8v
IGEgcHJvYmxlbSBkcml2ZXIgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIG5ldmVyIGNsZWFy
IHRoZSBlcnJvci4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdvdWxkIGp1c3QgbG9vcCB1bnRpbCB3
ZSBnb3QgTk9fRVJST1IuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7
Ci0gICAgICAgIEdDR0xlbnVtIGVycm9yID0gZ2xHZXRFcnJvcigpOwotICAgICAgICBpZiAoZXJy
b3IgPT0gTk9fRVJST1IpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9zeW50aGV0aWNF
cnJvcnMuYWRkKGVycm9yKTsKLSAgICAgICAgbW92ZWRBbkVycm9yID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbW92ZWRBbkVycm9yOwotfQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RXJyb3IoKQotewotICAgIGlmICghbV9zeW50aGV0aWNFcnJvcnMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhl
IHN5bnRoZXRpYyBlcnJvciBsaXN0IGluIGNhc2UKLSAgICAgICAgLy8gdGhhdCBlcnJvciBpcyBh
bHJlYWR5IHRoZXJlLCBzaW5jZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgYm90aAotICAgICAg
ICAvLyBnbEdldEVycm9yIGFuZCBnZXRFcnJvciBpcyB0byBvbmx5IHJlcG9ydCBlYWNoIGVycm9y
IGNvZGUgb25jZS4KLSAgICAgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0g
ICAgICAgIHJldHVybiBtX3N5bnRoZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9P
UEVSQVRJT047Ci0KLSAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
cmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5n
KG5hbWUpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZmZXIpOwotfQotCi1HQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7
Ci0KLSAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1l
YnVmZmVyKQotewotICAgIGlmICghZnJhbWVidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNGcmFtZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Ci19
Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0K
LUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZl
ckVYVChyZW5kZXJidWZmZXIpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFzaGFk
ZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIHJldHVybiA6OmdsSXNTaGFk
ZXIoc2hhZGVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
VGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQot
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0
ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdD
R0xmbG9hdCB3aWR0aCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQot
ewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLQotICAgIEdDR0xzaXplaSBjb3VudCA9IDA7Ci0gICAgUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyB9OwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9n
cmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAgaWYgKGNvdW50ID09IDIpCi0gICAgICAg
IG1fbGlua2VkU2hhZGVyTWFwLnNldChwcm9ncmFtLCBzdGQ6Om1ha2VfcGFpcihzaGFkZXJzWzBd
LCBzaGFkZXJzWzFdKSk7Ci0KLSAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50IHBhcmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3Is
IEdDR0xmbG9hdCB1bml0cykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1w
ZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwg
aW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBTaGFkZXJTb3VyY2VFbnRy
eSBlbnRyeTsKLQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291
cmNlTWFwLnNldChzaGFkZXIsIFdURk1vdmUoZW50cnkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdD
R0x1aW50IG1hc2spCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0g
ZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFN0
ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykKLXsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3Rl
bmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNp
bE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6
cGFzcykKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKLXsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsU3RlbmNp
bE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0
ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMZmxvYXQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXpl
LCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xV
bmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikpOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlm
b3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtM2Yo
bG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4g
YXJyYXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDMpKTsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybTNm
dihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDMsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZs
b2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQotewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xV
bmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
OjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjApCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9u
LCBhcnJheS5idWZTaXplLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQg
djEpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUgMikp
OwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5idWZTaXplIC8gMiwgYXJyYXkuZGF0YSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQotewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xVbmlmb3Jt
M2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+
IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSAzKSk7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm0z
aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyAzLCBhcnJheS5kYXRhKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xp
bnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdDR0xpbnQgdjMpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZvcm00
aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xp
bnQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA0KSk7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVuaWZv
cm00aXYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA0LCBhcnJheS5kYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gYXJy
YXkpCi17Ci0gICAgQVNTRVJUKCEoYXJyYXkuYnVmU2l6ZSAlIDQpKTsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDQsIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQ+IGFycmF5KQotewotICAgIEFTU0VSVCghKGFycmF5LmJ1ZlNpemUgJSA5KSk7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFVu
aWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGFycmF5LmJ1ZlNpemUgLyA5LCB0cmFuc3Bvc2UsIGFy
cmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBhcnJheSkKLXsKLSAgICBBU1NFUlQoIShhcnJheS5idWZTaXplICUg
MTYpKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXkuYnVmU2l6ZSAvIDE2LCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVXNlUHJvZ3JhbShw
cm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9n
cmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0K
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQotewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdCwgMT4gYXJyYXkpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkuZGF0
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdD
R0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKLXsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0
cmliMmYoaW5kZXgsIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
LCAyPiBhcnJheSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQg
aW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCi17Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZl
cnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDM+IGFycmF5KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5
LmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0
ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2
MiwgR0NHTGZsb2F0IHYzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2Miwg
djMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgND4gYXJyYXkpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5k
ZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVmVydGV4QXJyYXkoKQotewotICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuY3JlYXRlVmVy
dGV4QXJyYXlPRVMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
VmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKLXsKLSAgICBnZXRFeHRlbnNpb25z
KCkuZGVsZXRlVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQot
ewotICAgIHJldHVybiBnZXRFeHRlbnNpb25zKCkuaXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9y
bUdMT2JqZWN0IGFycmF5KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5iaW5kVmVydGV4QXJyYXlP
RVMoYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCb29sZWFu
dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+IHZhbHVlKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRC
b29sZWFudihwbmFtZSwgdmFsdWUuZGF0YSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSkKLXsKLSAgICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICA6OmdsR2V0QnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NH
TFNwYW48R0NHTGZsb2F0PiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZS5kYXRh
KTsKLX0KLQotR0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjQo
R0NHTGVudW0gcG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdDR0xpbnQ2NCB2
YWx1ZSA9IDA7Ci0gICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBt
dXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5p
dGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KLSAgICAvLyA6
OmdsR2V0SW50ZWdlcjY0dihwbmFtZSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQot
R0NHTGludDY0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHQ0dMaW50NjQgdmFsdWUgPSAwOwotICAgIC8vIEZJWE1F
IDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0
byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250
ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCi0gICAgLy8gOjpnbEdldEludGVnZXI2NGlfdihwbmFt
ZSwgaW5kZXgsIHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAg
ICBHQ0dMaW50IHZhbHVlID0gMDsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQpCi0gICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVO
Q0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsK
LSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1pKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUpCi17
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
R0NHTGludCB2YWx1ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwg
JnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoQUNU
SVZFX0FUVFJJQlVURVMgPT0gcG5hbWUgfHwgQUNUSVZFX1VOSUZPUk1TID09IHBuYW1lKTsKLSAg
ICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3No
YWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQg
IT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgKnZhbHVl
ID0gcmVzdWx0LT52YWx1ZS5jb3VudEZvclR5cGUocG5hbWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuc2V0KHByb2dyYW0sIEFj
dGl2ZVNoYWRlclN5bWJvbENvdW50cygpKTsKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMm
IHN5bWJvbENvdW50cyA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3Jh
bSktPnZhbHVlOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIGFjdGl2ZSBhdHRyaWJ1dGVzLCBidWls
ZCBhIGZpbHRlcmVkIGNvdW50LCBhbmQgYSBtYXBwaW5nIG9mCi0gICAgLy8gb3VyIGludGVybmFs
IGF0dHJpYnV0ZXMgaW5kZXhlcyB0byB0aGUgcmVhbCB1bmZpbHRlcmVkIGluZGV4ZXMgaW5zaWRl
IE9wZW5HTC4KLSAgICBHQ0dMaW50IGF0dHJpYnV0ZUNvdW50ID0gMDsKLSAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEFDVElWRV9BVFRSSUJVVEVTLCAmYXR0cmlidXRlQ291bnQpOwotICAg
IGZvciAoR0NHTGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKLSAgICAgICAg
QWN0aXZlSW5mbyBpbmZvOwotICAgICAgICBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGks
IGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxB
dHRyaWJ1dGVJbmRleE1hcC5hcHBlbmQoaSk7Ci0gICAgfQotICAgIAotICAgIC8vIERvIHRoZSBz
YW1lIGZvciB1bmlmb3Jtcy4KLSAgICBHQ0dMaW50IHVuaWZvcm1Db3VudCA9IDA7Ci0gICAgOjpn
bEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfVU5JRk9STVMsICZ1bmlmb3JtQ291bnQpOwot
ICAgIGZvciAoR0NHTGludCBpID0gMDsgaSA8IHVuaWZvcm1Db3VudDsgKytpKSB7Ci0gICAgICAg
IEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwg
aSwgaW5mbyk7Ci0gICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJl
ZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLmFwcGVuZChpKTsKLSAgICB9Ci0gICAgCi0gICAgKnZh
bHVlID0gc3ltYm9sQ291bnRzLmNvdW50Rm9yVHlwZShwbmFtZSk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcnNbMl0sIEdDR0xzaXplaSBjb3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCi17Ci0gICAg
TE9HKFdlYkdMLCAiT3JpZ2luYWwgU2hhZGVySW5mb0xvZzpcbiVzIiwgbG9nLnV0ZjgoKS5kYXRh
KCkpOwotCi0gICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiByZWdFeHAoIndlYmdsX1sw
MTIzNDU2Nzg5YWJjZGVmQUJDREVGXSsiKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgcHJvY2Vzc2Vk
TG9nOwotICAgIAotICAgIC8vIEFOR0xFIGluc2VydHMgYSAiI2V4dGVuc2lvbiIgbGluZSBpbnRv
IHRoZSBzaGFkZXIgc291cmNlIHRoYXQKLSAgICAvLyBjYXVzZXMgYSB3YXJuaW5nIGluIHNvbWUg
Y29tcGlsZXJzLiBUaGVyZSBpcyBubyBwb2ludCBzaG93aW5nCi0gICAgLy8gdGhpcyB3YXJuaW5n
IHRvIHRoZSB1c2VyIHNpbmNlIHRoZXkgZGlkbid0IHdyaXRlIHRoZSBjb2RlIHRoYXQKLSAgICAv
LyBpcyBjYXVzaW5nIGl0LgotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGFuZ2xlV2FybmluZyB7ICJXQVJOSU5HOiAwOjE6IGV4dGVuc2lvbiAnR0xfQVJCX2dwdV9zaGFk
ZXI1JyBpcyBub3Qgc3VwcG9ydGVkXG4iX3MgfTsKLSAgICBpbnQgc3RhcnRGcm9tID0gbG9nLnN0
YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IGFuZ2xlV2FybmluZy5nZXQoKS5sZW5ndGgoKSA6IDA7
Ci0gICAgaW50IG1hdGNoZWRMZW5ndGggPSAwOwotCi0gICAgZG8gewotICAgICAgICBpbnQgc3Rh
cnQgPSByZWdFeHAubWF0Y2gobG9nLCBzdGFydEZyb20sICZtYXRjaGVkTGVuZ3RoKTsKLSAgICAg
ICAgaWYgKHN0YXJ0ID09IC0xKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcHJvY2Vz
c2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgc3RhcnQgLSBzdGFydEZyb20p
KTsKLSAgICAgICAgc3RhcnRGcm9tID0gc3RhcnQgKyBtYXRjaGVkTGVuZ3RoOwotCi0gICAgICAg
IGNvbnN0IFN0cmluZyYgbWFuZ2xlZFN5bWJvbCA9IGxvZy5zdWJzdHJpbmcoc3RhcnQsIG1hdGNo
ZWRMZW5ndGgpOwotICAgICAgICBjb25zdCBTdHJpbmcmIG1hcHBlZFN5bWJvbCA9IG1hcHBlZFN5
bWJvbE5hbWUoc2hhZGVycywgY291bnQsIG1hbmdsZWRTeW1ib2wpOwotICAgICAgICBMT0coV2Vi
R0wsICJEZW1hbmdsaW5nOiAlcyB0byAlcyIsIG1hbmdsZWRTeW1ib2wudXRmOCgpLmRhdGEoKSwg
bWFwcGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5k
KG1hcHBlZFN5bWJvbCk7Ci0gICAgfSB3aGlsZSAoc3RhcnRGcm9tIDwgc3RhdGljX2Nhc3Q8aW50
Pihsb2cubGVuZ3RoKCkpKTsKLQotICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmlu
ZyhzdGFydEZyb20sIGxvZy5sZW5ndGgoKSAtIHN0YXJ0RnJvbSkpOwotCi0gICAgTE9HKFdlYkdM
LCAiVW5tYW5nbGVkIFNoYWRlckluZm9Mb2c6XG4lcyIsIHByb2Nlc3NlZExvZy50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKTsKLX0K
LQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
R0xpbnQgbGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9f
TE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotICAgIFZlY3RvcjxHTGNoYXI+IGlu
Zm8obGVuZ3RoKTsKLSAgICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAm
c2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgR0NHTHNpemVpIGNvdW50OwotICAgIFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyc1syXTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwg
JmNvdW50LCBzaGFkZXJzKTsKLQotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRl
cnMsIGNvdW50LCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotR0NHTGludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6Omds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAg
ICByZXR1cm4gdmFsdWU7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlcmkoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW1lKQotewotICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotCi0gICAgY29uc3QgYXV0
byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIAotICAgIHN3
aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIERFTEVURV9TVEFUVVM6Ci0gICAgY2FzZSBTSEFERVJf
VFlQRToKLSAgICAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsICZ2YWx1ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgIGlmIChyZXN1
bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRp
Y19jYXN0PGludD4ocmVzdWx0LT52YWx1ZS5pc1ZhbGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJTkZPX0xPR19MRU5HVEg6Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZW5kKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVy
KS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdU
SDoKLSAgICAgICAgdmFsdWUgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5W
QUxJRF9FTlVNKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIGNv
bnN0IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgaWYgKCFl
bnRyeS5pc1ZhbGlkKQotICAgICAgICByZXR1cm4gZW50cnkubG9nOwotCi0gICAgR0xpbnQgbGVu
Z3RoID0gMDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgs
ICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAot
Ci0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7
Ci0gICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRh
dGEoKSk7Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9
OwotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZv
LmRhdGEoKSwgc2l6ZSkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291
cmNlOwotfQotCi1HQ0dMZmxvYXQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFt
ZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsKLSAgICBHQ0dMZmxvYXQg
dmFsdWUgPSAwLmY7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIHZhbHVlOwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCAmdmFs
dWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQot
ewotICAgIEdDR0xpbnQgdmFsdWUgPSAwOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCi17Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEdldFVuaWZv
cm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQotewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRVbmlmb3Jt
aXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTHVpbnQ+IHZhbHVlKQotewotICAgIFVOVVNFRF9Q
QVJBTShwcm9ncmFtKTsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBl
ZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOwot
ICAgIExPRyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0
dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0
YSgpKTsKLX0KLQotR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQotewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR0x2b2lk
KiBwb2ludGVyID0gMDsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBu
YW1lLCAmcG9pbnRlcik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xzaXplaXB0cj4ocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGludCB4b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4gcGl4ZWxzKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmICFVU0UoT1BFTkdMX0VTKQotICAgIGlmICh0eXBlID09IEhBTEZf
RkxPQVRfT0VTKQotICAgICAgICB0eXBlID0gR0xfSEFMRl9GTE9BVF9BUkI7Ci0jZW5kaWYKLQot
ICAgIGlmIChtX3VzaW5nQ29yZVByb2ZpbGUpICB7Ci0gICAgICAgIC8vIFRoZXJlIGFyZSBzb21l
IGZvcm1hdCB2YWx1ZXMgdXNlZCBpbiBXZWJHTCB0aGF0IGFyZSBkZXByZWNhdGVkIHdoZW4gdXNp
bmcgYSBjb3JlIHByb2ZpbGUsIHNvIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gYWRhcHQgdGhlbSwg
YXMgd2UgZG8gaW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoKS4KLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBBTFBIQToKLSAgICAgICAgICAgIC8v
IFdlIGFyZSB1c2luZyBHTF9SRUQgdG8gYmFjayBHTF9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3
ZWxsLgotICAgICAgICAgICAgZm9ybWF0ID0gUkVEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdM
X1JHIHRvIGJhY2sgR0xfTFVNSU5BTkNFX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCi0g
ICAgICAgICAgICBmb3JtYXQgPSBSRzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhN
RTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxp
bmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUu
Ci0gICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQotewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xDb21wcmVzc2VkVGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBpbWFnZVNpemUsIGRhdGEuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKLXsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29tcHJlc3NlZFRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIGRhdGEuZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLVBsYXRmb3JtR0xP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHTHVpbnQg
byA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIo
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsK
LSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2xDcmVhdGVTaGFk
ZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZF
UlRFWF9TSEFERVIpOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlblRleHR1cmVz
KDEsICZvKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwotICAgIHJldHVy
biBvOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBt
X3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91
bmREcmF3RkJPKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90
IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRl
ciBpdCBnZXRzIGRlbGV0ZWQuCi0gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwg
MCk7Ci0gICAgfQotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92
ZShwcm9ncmFtKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZl
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1
dG8mIGtleVZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0
ZXh0dXJlOwotICAgIH0pOwotICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4dHVyZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9y
KQotewotICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRo
ZXRpYyBlcnJvciBsaXN0IHRvCi0gICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywg
c28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKLSAgICAvLyBhbnkgZXJyb3JzIGZyb20g
Z2xFcnJvciBiZWZvcmUgdGhlIGVycm9yIHdlIGFyZSBzeW50aGVzaXppbmcuCi0gICAgbW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVy
cm9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9z
dCgpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkK
LSAgICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlY3ljbGVDb250ZXh0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250
ZXh0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4
dENoYW5nZWROb3RpZmljYXRpb24oKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRv
VmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
KQotewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBt
b2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQp
Ci17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVt
IG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQs
IEdDR0xzaXplaSBwcmltY291bnQpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50
c0luc3RhbmNlZEFOR0xFKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7Ci0g
ICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKLXsK
LSAgICBnZXRFeHRlbnNpb25zKCkudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZp
c29yKTsKLX0KLQotI2lmIEhBVkUoT1BFTkdMXzQpICYmIEVOQUJMRShXRUJHTDIpCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQgaW5k
ZXgpCi17Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgOjpnbFByaW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGNv
bnN0IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1
aW50IGxlbmd0aCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0oZGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzYWdlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Jj
T2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
ZHN0Qnl0ZU9mZnNldCwgY29uc3Qgdm9pZCogc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBH
Q0dMdWludCBsZW5ndGgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGRzdEJ5dGVPZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShzcmNEYXRhKTsKLSAgICBV
TlVTRURfUEFSQU0oc3JjT2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLX0KLQot
I2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dM
ZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRl
T2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKLX0KLSNl
bHNlCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dM
ZW51bSwgR0NHTGVudW0sIEdDR0xpbnRwdHIsIEdDR0xpbnRwdHIsIEdDR0xzaXplaXB0cikKLXsK
LX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJE
YXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xTcGFuPEdDR0x2b2lk
PiBkYXRhKQotewotI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdDR0x2b2lk
KiBwdHIgPSA6OmdsTWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGRhdGEuYnVmU2l6ZSwg
R3JhcGhpY3NDb250ZXh0R0w6Ok1BUF9SRUFEX0JJVCk7Ci0gICAgaWYgKCFwdHIpCi0gICAgICAg
IHJldHVybjsKLSAgICBtZW1jcHkoZGF0YS5kYXRhLCBwdHIsIGRhdGEuYnVmU2l6ZSk7Ci0gICAg
aWYgKCE6OmdsVW5tYXBCdWZmZXIodGFyZ2V0KSkKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRhdGEpOwotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTik7Ci0jZW5kaWYKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGlu
dCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NH
TGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZp
bHRlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc3JjWDApOwotICAgIFVOVVNFRF9QQVJBTShzcmNZ
MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gxKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTEpOwot
ICAgIFVOVVNFRF9QQVJBTShkc3RYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFkwKTsKLSAgICBV
TlVTRURfUEFSQU0oZHN0WDEpOwotICAgIFVOVVNFRF9QQVJBTShkc3RZMSk7Ci0gICAgVU5VU0VE
X1BBUkFNKG1hc2spOwotICAgIFVOVVNFRF9QQVJBTShmaWx0ZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCBsYXllcikKLXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAg
ICBVTlVTRURfUEFSQU0oYXR0YWNobWVudCk7Ci0gICAgVU5VU0VEX1BBUkFNKHRleHR1cmUpOwot
ICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxheWVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGF0dGFjaG1lbnRzKQotewotICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShhdHRhY2htZW50cyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZl
cihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBhdHRhY2htZW50cywg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
LXsKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oYXR0YWNobWVu
dHMpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFSQU0oeSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNyYyk7Ci19Ci0KLSNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5H
TF9FU18zKQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTFNwYW48R0NHTGludD4gZGF0YSkKLXsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xHZXRJ
bnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBkYXRhLmJ1ZlNp
emUsIGRhdGEuZGF0YSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVO
VVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAg
ICBVTlVTRURfUEFSQU0oYnVmU2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCi17Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6
OmdsVGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0
b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCkKLXsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICA6OmdsVGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotI2Vsc2UKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0sIEdDR0xlbnVtLCBH
Q0dMZW51bSwgR0NHTFNwYW48R0NHTGludD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dM
ZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NH
THNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSkKLXsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpv
ZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxl
dmVsKTsKLSAgICBVTlVTRURfUEFSQU0oeG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHlvZmZz
ZXQpOwotICAgIFVOVVNFRF9QQVJBTSh6b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oeCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGhlaWdodCk7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShu
YW1lKTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwKQotewotICAgIFVOVVNF
RF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHYwKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWlu
dCB2MCwgR0NHTHVpbnQgdjEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0odjApOwotICAgIFVOVVNFRF9QQVJBTSh2MSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQg
djAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOwotICAgIFVOVVNFRF9QQVJBTSh2MCk7Ci0gICAgVU5VU0VEX1BBUkFNKHYxKTsKLSAgICBV
TlVTRURfUEFSQU0odjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIsIEdDR0x1aW50IHYzKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKHYwKTsKLSAgICBVTlVTRURfUEFSQU0odjEpOwotICAgIFVOVVNFRF9QQVJB
TSh2Mik7Ci0gICAgVU5VU0VEX1BBUkFNKHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NH
THVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURf
UEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
dWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQotewot
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
bG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29u
c3QgR0NHTHVpbnQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9j
YXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwotICAgIFVOVVNFRF9QQVJBTShk
YXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4
MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+
IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
dHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIFVOVVNFRF9QQVJBTSh0cmFuc3Bvc2UpOwot
ICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQotewotICAgIFVOVVNFRF9QQVJB
TShsb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHRyYW5zcG9zZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0odHJhbnNwb3NlKTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWlu
dCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQotewot
ICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNF
RF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFSQU0oeik7Ci0gICAgVU5VU0VEX1BBUkFNKHcpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1
aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50LCA0PiB2YWx1ZXMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwg
R0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKLXsKLSAgICBV
TlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh4KTsKLSAgICBVTlVTRURfUEFS
QU0oeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHopOwotICAgIFVOVVNFRF9QQVJBTSh3KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50LCA0PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgs
IEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0
ciBvZmZzZXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0o
c2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShzdHJpZGUp
OwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwg
R0NHTHVpbnQgZW5kLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIg
b2Zmc2V0KQotewotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
cnQpOwotICAgIFVOVVNFRF9QQVJBTShlbmQpOwotICAgIFVOVVNFRF9QQVJBTShjb3VudCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMU3Bhbjxjb25zdCBH
Q0dMZW51bT4gYnVmcykKLXsKLSAgICBVTlVTRURfUEFSQU0oYnVmcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dM
aW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHZhbHVlcykKLXsKLSAgICBV
TlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAg
VU5VU0VEX1BBUkFNKHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdWludD4gdmFsdWVzKQotewotICAgIFVOVVNFRF9QQVJBTShidWZmZXIp
OwotICAgIFVOVVNFRF9QQVJBTShkcmF3YnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0
PiB2YWx1ZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7Ci0gICAgVU5VU0VEX1BBUkFN
KGRyYXdidWZmZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGlu
dCBkcmF3YnVmZmVyLCBHQ0dMZmxvYXQgZGVwdGgsIEdDR0xpbnQgc3RlbmNpbCkKLXsKLSAgICBV
TlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFSQU0oZHJhd2J1ZmZlcik7Ci0gICAg
VU5VU0VEX1BBUkFNKGRlcHRoKTsKLSAgICBVTlVTRURfUEFSQU0oc3RlbmNpbCk7Ci19Ci0KLVBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVlcnkp
OwotfQotCi1HQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0
Zm9ybUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVl
cnkoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQotewotICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKLXsKLSAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKLXsK
LSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRR
dWVyeU9iamVjdHVpKFBsYXRmb3JtR0xPYmplY3QgcXVlcnksIEdDR0xlbnVtIHBuYW1lKQotewot
ICAgIFVOVVNFRF9QQVJBTShxdWVyeSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlU2FtcGxlcigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQotewot
ICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLX0KLQotR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNhbXBsZXIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kU2FtcGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVuaXQpOwotICAgIFVOVVNF
RF9QQVJBTShzYW1wbGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Ft
cGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCBwYXJhbSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW0pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgcGFyYW0pCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNhbXBsZXIpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHBhcmFtKTsKLX0KLQotR0NHTGZsb2F0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1w
bGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQot
ewotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwot
ICAgIHJldHVybiAwLmY7Ci19Ci0KLUdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5h
bWUpCi0KLXsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHBu
YW1lKTsKLSAgICByZXR1cm4gMDsKLX0KLQotR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZlbmNlU3luYyhHQ0dMZW51bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKLXsK
LSAgICBVTlVTRURfUEFSQU0oY29uZGl0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1N5bmMoR0NHTHN5bmMgc3luYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVN5bmMoR0NHTHN5bmMgc3luYykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci19Ci0KLUdD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGllbnRXYWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0x1aW50NjQgdGltZW91dCkKLXsKLSAgICBVTlVT
RURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKLSAgICBVTlVTRURfUEFS
QU0odGltZW91dCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dM
aW50NjQgdGltZW91dCkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3luYyk7Ci0gICAgVU5VU0VEX1BB
UkFNKGZsYWdzKTsKLSAgICBVTlVTRURfUEFSQU0odGltZW91dCk7Ci19Ci0KLUdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN5bmNpKEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBu
YW1lKQotewotICAgIFVOVVNFRF9QQVJBTShzeW5jKTsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUp
OwotICAgIHJldHVybiAwOwotfQotCi1QbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBs
YXRmb3JtR0xPYmplY3QgaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGlkKTsKLX0KLQotR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZv
cm1HTE9iamVjdCBpZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVl
ZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGlkKQotewotICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpZCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0
aXZlTW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJpbWl0aXZlTW9kZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKLXsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywg
R0NHTGVudW0gYnVmZmVyTW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHZhcnlpbmdzKTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyTW9kZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZv
JikKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKGluZGV4
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVk
YmFjaygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5z
Zm9ybUZlZWRiYWNrKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVp
bnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NH
THNpemVpcHRyIHNpemUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci19Ci0KLVZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHVuaWZvcm1OYW1lcykKLXsKLSAg
ICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuaWZvcm1OYW1lcyk7
Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8R0NHTGludD4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lKQotewot
ICAgIFZlY3RvcjxHQ0dMaW50PiByZXN1bHQodW5pZm9ybUluZGljZXMuc2l6ZSgpLCAwKTsKLSNp
ZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQotICAgIEFTU0VSVChwcm9ncmFt
KTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMu
c2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCByZXN1bHQuZGF0YSgpKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1HQ0dMdWludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIHVuaWZvcm1CbG9ja05hbWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBy
b2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tOYW1lKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3Jt
QmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2Nr
SW5kZXgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1
bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrQmluZGluZykKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZ3JhbSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odW5pZm9ybUJsb2Nr
QmluZGluZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWxz
KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHgpOwotICAgIFVOVVNFRF9QQVJBTSh5KTsKLSAgICBVTlVTRURfUEFS
QU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIFVOVVNFRF9QQVJBTShm
b3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NraXYoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiBwYXJhbXMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHByb2dyYW0pOwotICAgIFVOVVNFRF9QQVJBTSh1bmlmb3JtQmxvY2tJbmRleCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSwgR0NHTGludCwgR0NH
TGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0g
LCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhT
dWJJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWks
IEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSwg
R0NHTGludCwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
bXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50
LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGludHB0cikK
LXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UzRChHQ0dMZW51
bSwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NH
TGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlM0QoR0NHTGVudW0sIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQs
IEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwg
R0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVu
dW0sIEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludHB0cikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xl
bnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMc2l6ZWks
IEdDR0xpbnRwdHIpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNp
emVpLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50cHRyKQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48
Y29uc3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsK
LSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRShHQ0dMZW51bSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xTcGFu
PGNvbnN0IEdDR0xzaXplaT4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkK
LXsKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVS
QVRJT04pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVt
ZW50c0FOR0xFKEdDR0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4sIEdDR0xzaXplaSkKLXsKLSAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdD
R0xlbnVtLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+LCBHQ0dMZW51bSwgR0NHTFNwYW48Y29u
c3QgR0NHTGludD4sIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4sIEdDR0xzaXplaSkKLXsKLSAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04p
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VT
YWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCB1bnBhY2tBbGlnbm1lbnQpCi17
Ci0gICAgQVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAy
IHx8IHVucGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKLSAgICBV
bmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOwotICAgIHVuc2lnbmVkIHNpemUgPSAwOwot
ICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgewotICAgICAgICBQaXhlbFN0b3JlUGFy
YW1zIHBhcmFtczsKLSAgICAgICAgcGFyYW1zLmFsaWdubWVudCA9IHVucGFja0FsaWdubWVudDsK
LSAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQs
IHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsIHBhcmFtcywgJnNpemUsIG51bGxwdHIsIG51bGxwdHIp
OwotICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgemVybyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25l
ZCBjaGFyPihzaXplKTsKLSAgICAgICAgaWYgKCF6ZXJvKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAs
IHNpemUpOwotICAgIH0KLSAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHpl
cm8uZ2V0KCksIHNpemUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKSAmJiAhVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcAppbmRleCBlNjZlMDBhZGIyODc1YWRmNjlhMTk3ZmNjNjky
MzE2ZGE2Zjk2ZTZlLi4yZjc3NDUyYTEzNjQyODgyM2Y2OTliYzI0MTM5YTVkMTgyZDZjMmEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcApAQCAt
MjgsOSArMjgsMTMgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKIAorI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCisjZWxzZQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgiCisjZW5kaWYKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJl
ZE1hbmFnZXIoKQpAQCAtNTYsNyArNjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlcjo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCgpCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6YWRk
Q29udGV4dChHcmFwaGljc0NvbnRleHRHTFR5cGUqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwogICAgIGlmICghY29udGV4dCkKQEAgLTY2LDcgKzcwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQKICAgICBtX2NvbnRleHRzLmFwcGVuZChjb250ZXh0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
cjo6cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTFR5cGUqIGNvbnRleHQpCiB7CiAgICAg
aWYgKCFtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKQogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKaW5kZXggMGVmODZkYzZk
ZTdmMjFkNWU4ZTkxMjBlOWEzMmIwYThiMWYxZjczMS4uZmI1YzI4Yzk4ZDE4ZDg5OTUzOGQ3OTZl
YmMyMTg4YTdmNGM1OTQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TE1hbmFnZXIuaApAQCAtMzYsMTUgKzM2LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29u
c3QgdW5zaWduZWQgTWF4Q29udGV4dHMgPSAxNjsKIAorI2lmIFVTRShBTkdMRSkKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU7CisjZWxzZQogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w7CisjZW5kaWYKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKICAg
ICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsK
IHB1YmxpYzoKKyNpZiBVU0UoQU5HTEUpCisgICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0R0xUeXBl
ID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCisgICAgdXNpbmcgR3JhcGhpY3NDb250
ZXh0R0xUeXBlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYKKwogICAgIHN0YXRp
YyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXImIHNoYXJlZE1hbmFnZXIoKTsKICAgICAK
LSAgICB2b2lkIGFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKLSAgICB2b2lk
IHJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lkIGFkZENv
bnRleHQoR3JhcGhpY3NDb250ZXh0R0xUeXBlKik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KEdy
YXBoaWNzQ29udGV4dEdMVHlwZSopOwogICAgIAogICAgIHZvaWQgcmVjeWNsZUNvbnRleHRJZk5l
Y2Vzc2FyeSgpOwogICAgIGJvb2wgaGFzVG9vTWFueUNvbnRleHRzKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0cy5zaXplKCkgPj0gTWF4Q29udGV4dHM7IH0KQEAgLTU5LDcgKzY5LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIoKSA9IGRl
ZmF1bHQ7CiAKLSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqPiBtX2NvbnRleHRz
OworICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRHTFR5cGUqPiBtX2NvbnRleHRzOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAppbmRl
eCAwNTc1NDQ0OGI5MDNlMTQ5OTNlZDMxYjBjYmQ2MWU4Njk0YTllZTk5Li45NzZlM2FiZTViYjNh
YzQwYWY4ZjIwYzllZTRlZThhMjU1M2IwYTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtODcsMTIgKzg3LDEwIEBAIFJlZlB0cjxHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
cjo6Y3JlYXRlKEdyCiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6On5HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIoKSA9IGRlZmF1bHQ7CiAKIEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyQmFzZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQogewogfQogCi0vLyBGSVhNRTogQmVsb3cgZnVu
Y3Rpb25hbGl0eSBzaG91bGQgYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgotCiBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
R0w+IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZWQgPSBmYWxzZTsKQEAgLTEyNSwzMTQgKzEyMyw3IEBAIFJlZlB0cjxHcmFwaGljc0NvbnRleHRH
TD4gY3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4
CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQot
ewotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0ZXMud2Vi
R0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7Ci0jZW5k
aWYKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBMYXllciA9
IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7Ci0jZW5k
aWYKLSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0g
ICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hh
bmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJh
d2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJl
bmRlciBpbnRvLgotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1l
dGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0g
ICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
Z2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOwotCi0gICAgLy8gQ3JlYXRlIGFuIEZC
Ty4KLSAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0g
ICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fY29tcG9zaXRvclRleHR1cmUpOwot
ICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKLQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0
dXJlKTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdl
dCwgMCk7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KLSAgICBB
U1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotICAg
IGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmREcmF3
RkJPID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICBn
bDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAg
ICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KLSAgICAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX3N0
YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9mYm87Ci0gICAgICAg
IGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAg
IGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQot
Ci0gICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0jZWxzZQotR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcykK
LXsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmlj
b3NpYTo6R0NHTExheWVyPigqdGhpcyk7Ci0jZWxzZQotICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtl
VW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOwotI2VuZGlmCi0K
LSAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAg
YXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdl
ZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVy
IGludG8uCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6
OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gRkJPLgot
ICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOwotCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUp
OwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1
cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIEFTU0VS
VChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7Ci0gICAgaWYg
KGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8g
PSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIDo6Z2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBp
ZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICA6
OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9
IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgotICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0KLSNpZiAhVVNFKE9QRU5H
TF9FUykKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwotCi0g
ICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7Ci0gICAgICAg
IG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMu
MiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBvdXB1
dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgotICAgICAgICAvLyBPcGVuR0wgdmVyc2lvbiAzLjIg
dXNlcyBHTFNMIHZlcnNpb24gMS41MC4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0
QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKLQotICAgICAgICAvLyBGcm9tIHZlcnNp
b24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQgYSBW
QU8gZm9yIHJlbmRlcmluZy4KLSAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRlZCBhbmQg
Ym91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJlTWFwcGVy
LCBXZWJHTCwgZXRjKS4gVGhpcyBpcwotICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRpb246IHRo
ZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdp
bGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCi0gICAgICAgIEdDR0xp
bnQgY3VycmVudFZBTyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlZFUlRF
WF9BUlJBWV9CSU5ESU5HKTsKLSAgICAgICAgaWYgKCFjdXJyZW50VkFPKSB7Ci0gICAgICAgICAg
ICBtX3ZhbyA9IGNyZWF0ZVZlcnRleEFycmF5KCk7Ci0gICAgICAgICAgICBiaW5kVmVydGV4QXJy
YXkobV92YW8pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRm9yIGxvd2Vy
IHZlcnNpb25zIHJlcXVlc3QgdGhlIGNvbXBhdGliaWxpdHkgb3V0cHV0IHRvIHRoZSBzaGFkZXIg
Y29tcGlsZXIuCi0gICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9HTFNM
X0NPTVBBVElCSUxJVFlfT1VUUFVUKTsKLQotICAgICAgICAvLyBHTF9QT0lOVF9TUFJJVEUgaXMg
bmVlZGVkIGluIGxvd2VyIHZlcnNpb25zLgotICAgICAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQ
UklURSk7Ci0gICAgfQotI2Vsc2UKLSAgICAvLyBBZGp1c3QgdGhlIHNoYWRlciBzcGVjaWZpY2F0
aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIEdMRVMzIChpLmUuIFdlYkdMMiBzdXBwb3J0KSB3YXMg
cmVxdWVzdGVkLgotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgbV9jb21waWxlciA9IEFOR0xFV2Vi
S2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCAoYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3Jh
cGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMikgPyBTSF9XRUJHTDJfU1BFQyA6IFNI
X1dFQkdMX1NQRUMpOwotI2Vsc2UKLSAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2Uo
U0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMX1NQRUMpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIC8v
IEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291
cmNlczsKLSAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLQot
ICAgIEFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX0FUVFJJQlMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1h
eFZhcnlpbmdWZWN0b3JzID0gZ2V0SW50ZWdlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFY
X1ZBUllJTkdfVkVDVE9SUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgIEFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRJbnRlZ2VyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyA9IGdldEludGVnZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMpOwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVu
R0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0gICAgR0NH
TGludCByYW5nZVsyXSB7IH07Ci0gICAgR0NHTGludCBwcmVjaXNpb24gPSAwOwotICAgIGdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01FTlRfU0hB
REVSLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNp
b24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVsw
XSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwotCi0gICAgbV9jb21waWxlci5zZXRSZXNvdXJj
ZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19
Ci0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0woKQotewotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKLSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmICht
X2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29t
cG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0
QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAg
IGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwot
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAg
ICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7Ci0gICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVGQk8pOwotICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpIHsKLSNpZiAhVVNFKEFOR0xFKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgICAgICBp
ZiAobV9kZXB0aEJ1ZmZlcikKLSAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
bV9kZXB0aEJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKG1fc3RlbmNpbEJ1ZmZlcikKLSAgICAgICAg
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgot
ICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbDo6RGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLSAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsK
LSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotICAgIGlmIChtX3ZhbykKLSAgICAgICAgZGVsZXRl
VmVydGV4QXJyYXkobV92YW8pOwotI2VuZGlmCi19Ci0jZWxzZQotR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAg
ICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxl
dGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIDo6Z2xEZWxldGVUZXh0dXJl
cygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0cmlidXRl
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMp
IHsKLSAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkgewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmICht
X2RlcHRoQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoQnVmZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIDo6Z2xEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotI2Vu
ZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxldGVWZXJ0
ZXhBcnJheShtX3Zhbyk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0jaWYgVVNF
KE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3Rh
dHVzKCkKLXsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBs
aWFudCgpIGNvbnN0Ci17Ci0jaWYgVVNFKEFOR0xFKQotICAgIHJldHVybiBtX2lzRm9yV2ViR0wy
OwotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAjaWYgVVNFKE5J
Q09TSUEpCiAgICAgcmV0dXJuICZtX25pY29zaWFMYXllci0+Y29udGVudExheWVyKCk7CkBAIC00
NDEsMzggKzEzMiw4IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiAh
VVNFKEFOR0xFKQotRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uJiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpIHsKLSNpZiBV
U0UoT1BFTkdMX0VTKQotICAgICAgICAvLyBnbEdldFN0cmluZ2kgaXMgbm90IGF2YWlsYWJsZSBv
biBHTEVTMi4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xP
cGVuR0xFUz4odGhpcywgIGZhbHNlKTsKLSNlbHNlCi0gICAgICAgIC8vIEZyb20gT3BlbkdMIDMu
MiBvbiB3ZSB1c2UgdGhlIENvcmUgcHJvZmlsZSwgYW5kIHRoZXJlIHdlIG11c3QgdXNlIGdsR2V0
U3RyaW5naS4KLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xP
cGVuR0w+KHRoaXMsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKTsKLSNl
bmRpZgotICAgIH0KLSAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKLX0KLSNlbmRpZgotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGlu
ZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50ID09IFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVyZSkKLSAgICAgICAgbV9mYWls
TmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cHJlcGFyZUZvckRpc3BsYXkoKQotewotfQotCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LVJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkKK1JlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBs
ZSgpCiB7CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpZiAoYXV0byBwaXhlbEJ1ZmZlciA9IHJl
YWRDb21wb3NpdGVkUmVzdWx0cygpKQpAQCAtNDgyLDExICsxNDMsNiBAQCBSZWZQdHI8TWVkaWFT
YW1wbGU+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9N
ZWRpYVNhbXBsZQogfQogI2VuZGlmCiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQotewotICAgIHJldHVy
biByZWFkUmVuZGVyaW5nUmVzdWx0cygpOwotfQotCiAjaWYgRU5BQkxFKFZJREVPKQogYm9vbCBH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlh
UGxheWVyJiBwbGF5ZXIsIFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0NHTGVudW0g
b3V0cHV0VGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgK
aW5kZXggZTQ2NjJiNjgzZWE0NWI2ZjE5NjZiMzE5NzMzOTMzMDNhYWY4NjA5NS4uZDFhYzBlYjdj
MGFkYTJmZjg4ZjE3OWRiOWNkNGVjMGEwNWU3NmNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaApAQCAtMjcsMTggKzI3LDM0IEBACiAKICNpZiBFTkFC
TEUoV0VCR0wpCiAKKyNpZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5oIgorI2Vsc2UKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
IHsKKyNpZiBVU0UoQU5HTEUpCit1c2luZyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJC
YXNlID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKKyNlbHNlCit1c2luZyBHcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXJCYXNlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CisjZW5kaWYK
KworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyIDog
cHVibGljIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2UgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyPiBjcmVhdGUoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIH5HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIoKTsKIAorICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlckJhc2Ugb3ZlcnJpZGVzLgorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCBmaW5hbDsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVyZUZyb21N
ZWRpYShNZWRpYVBsYXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGZp
bmFsOwogI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFT
YW1wbGU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkgZmluYWw7CisjZW5k
aWYKKwogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcihXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlckFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKaW5kZXggMDg1Mzlh
N2Q5Mjk4MTE0NWRjMDYwMDFiNTc0Y2E4YzlhNzFmODk1NS4uYTNjZTIyODc0N2ExN2Y5ZmQ5NGJl
NTRjMzQxMjRlNWU4ZDQyYzIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCkBAIC0zMSw2ICszMSw5IEBACiAKICNpbmNsdWRl
ICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgorI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAogI2lmIFVTRShOSUNPU0lBKQog
I2luY2x1ZGUgIk5pY29zaWFHQ0dMQU5HTEVMYXllci5oIgpAQCAtNDAsNyArNDMsMTA1IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnN0CitHcmFwaGlj
c0NvbnRleHRHTEFOR0xFOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRl
cykKK3sKKyNpZiBFTkFCTEUoV0VCR0wyKQorICAgIG1faXNGb3JXZWJHTDIgPSBhdHRyaWJ1dGVz
LndlYkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyOwor
I2VuZGlmCisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVl
PE5pY29zaWE6OkdDR0xBTkdMRUxheWVyPigqdGhpcyk7CisjZWxzZQorICAgIG1fdGV4bWFwTGF5
ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOwor
I2VuZGlmCisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNT
RVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKworICAgIHZhbGlkYXRlQXR0cmlidXRlcygp
OworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZl
IGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAgICBHTGVudW0gdGV4dHVyZVRhcmdldCA9
IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0
byByZW5kZXIgaW50by4KKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAg
Z2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fdGV4dHVyZSk7CisgICAgZ2w6OlRleFBh
cmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJ
TFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBH
TF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRl
cmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwor
ICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCAwKTsKKworICAgIC8vIENyZWF0ZSBh
biBGQk8uCisgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgIGdsOjpCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUp
OworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwg
R0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisKKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRl
VGV4dHVyZSk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1faW50ZXJtZWRp
YXRlVGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVY
VFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRleHR1
cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4
UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVU
YXJnZXQsIDApOworI2VuZGlmCisKKyAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisg
ICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsK
KyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkdlbkZyYW1lYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAg
ICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Cisg
ICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAg
ICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisgICAg
ICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAg
bV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5kUmVhZEZCTyA9IG1fZmJvOworICAg
ICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAg
ICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAg
IH0KKworICAgIGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOworfQorCitHcmFwaGljc0NvbnRl
eHRHTEFOR0xFOjp+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpCit7CisgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsK
KyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsOjpE
ZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0
dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisjZW5kaWYKKworICAgIGF1dG8gYXR0cmli
dXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxp
YXMpIHsKKyAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRl
cy5kZXB0aCkKKyAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5j
aWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpCisgICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgIH0KKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGdsOjpEZWxldGVUZXh0dXJlcygx
LCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyNlbmRpZgorfQorCitQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMRGlzcGxheSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybURpc3BsYXko
KSBjb25zdAogewogI2lmIFVTRShOSUNPU0lBKQogICAgIHJldHVybiBtX25pY29zaWFMYXllci0+
cGxhdGZvcm1EaXNwbGF5KCk7CkBAIC00OSw3ICsxNTAsNyBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMRGlzcGxheSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1EaXNwbGF5KCkg
Y29ucwogI2VuZGlmCiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKK1BsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0xDb25maWcgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1Db25maWco
KSBjb25zdAogewogI2lmIFVTRShOSUNPU0lBKQogICAgIHJldHVybiBtX25pY29zaWFMYXllci0+
cGxhdGZvcm1Db25maWcoKTsKQEAgLTU4LDcgKzE1OSwyOCBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUNvbmZpZygpIGNv
bnN0CiAjZW5kaWYKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURp
c3BsYXlCdWZmZXJCYWNraW5nKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bWFrZUNv
bnRleHRDdXJyZW50KCkKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lh
TGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOworI2Vsc2UKKyAgICByZXR1cm4gbV90ZXhtYXBM
YXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkKK3sKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpwcmVwYXJlRm9yRGlzcGxheSgpCit7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKICAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBjb25zdCBhdXRvIHNpemUg
PSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwpAQCAtODIsOCArMjA0LDEzIEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRm
b3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6
OnBsYXRmb3JtUmVsZWFzZVRocmVhZFJlc291cmNlcygpCit7Cit9CisKK3N0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRDb21wb3NpdGVkUmVzdWx0
cygpCiB7CisgICAgcmV0dXJuIHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKaW5kZXggZjQ0Yzdh
MDkzNGFhMGIyZTMyNGFiMzgzOGI4ODhkYmQxMDdiMGFjNy4uMTdmMjk0NDYyYzExNzE1YzNhY2M4
YmJjNmJhZmViNjg0NDc5ZjU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dM
UGxhdGZvcm1MYXllci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKK1RleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllcjo6VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyKEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUmIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKIHsK
ICAgICBhdXRvIHNoYXJpbmdDb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oCmluZGV4IGM3NGU3
NTU0MjFlMGMxNGQ2NzE3YmRmOWIwNjNhNDdkODg2NGYyY2QuLmUzZWVkNmJiOWUzNjY2MjY5Mzcz
NWMyY2NkMTBjZTFiN2U2ZDZlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQ
bGF0Zm9ybUxheWVyLmgKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEpCiAKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJv
dmlkZXIuaCIKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eTsKIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllciA6IHB1YmxpYyBQ
bGF0Zm9ybUxheWVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wm
KTsKKyAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xB
TkdMRSYpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcigpOwog
CiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGlj
OgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIG1fY29u
dGV4dDsKKyAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xFJiBtX2NvbnRleHQ7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gbV9nbENvbnRleHQ7CiAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKaW5kZXggMTIx
NTBiMWQ1MGU1YmM4OTM3NGVhYTgxMWUyMzJiM2NjNTBmMzE1MS4uM2I0Yjc1ODAyN2Y2OTY0ZTAw
OWViMmU1NzIwZDRhM2MxYmNjZWRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJE
LmNwcApAQCAtNDgsNyArNDgsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFz
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBj
aGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXpl
JiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKCFpbWFn
ZVBpeGVscyB8fCBpbWFnZVNpemUuaXNFbXB0eSgpIHx8IGNhbnZhc1NpemUuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
d2FrL1dlYkNvcmVUaHJlYWQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dl
YkNvcmVUaHJlYWQubW0KaW5kZXggOTU0NGI1MWMyNzhkZjU2OWVhNGFiMGJmZWY3ZWY3NDRhYzUy
YzczNS4uNmQ3NzA3ZDQwYzMyZjI4NDI5YzNkMzI0NTE1YTVjYzY5Nzc2MWJkYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQpAQCAtMzAs
NyArMzAsNyBAQAogCiAjaW1wb3J0ICJDb21tb25WTS5oIgogI2ltcG9ydCAiRmxvYXRpbmdQb2lu
dEVudmlyb25tZW50LmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2lt
cG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW1wb3J0ICJUaHJlYWRHbG9iYWxE
YXRhLmgiCkBAIC03NywxMyArNzcsMTMgQEAgdm9pZCBSZWxlYXNlV2ViVGhyZWFkR2xvYmFsU3Rh
dGUoKQogICAgIC8vIEluIHNpbmdsZS10aHJlYWRlZCBlbnZpcm9ubWVudHMgd2UgZG8gbm90IG5l
ZWQgdG8gdW5zZXQgdGhlIGNvbnRleHQsIGFzIHRoZXJlIHNob3VsZCBub3QgYmUgYWNjZXNzIGZy
b20KICAgICAvLyBtdWx0aXBsZSB0aHJlYWRzLgogICAgIEFTU0VSVChXZWJUaHJlYWRJc0VuYWJs
ZWQoKSk7Ci0gICAgdXNpbmcgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgPSBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3I7
CisgICAgdXNpbmcgUmVsZWFzZVRocmVhZFJlc291cmNlQmVoYXZpb3IgPSBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjsKICAgICAv
LyBGb3Igd2ViIHRocmVhZCwganVzdCByZWxlYXNlIHRoZSBjb250ZXh0IGFzIHdlIGtub3cgd2Ug
d2lsbCBzZWUgY2FsbHMgdG8gaXQgYWdhaW4uCiAgICAgLy8gRm9yIG5vbi13ZWIgdGhyZWFkcywg
ZS5nLiB0aGlyZC1wYXJ0eSBjbGllbnQgdGhyZWFkcywgd2UgZG9uJ3Qga25vdyBpZiB3ZSBldmVy
IHNlZSBhbm90aGVyIGNhbGwgZnJvbSB0aGUKICAgICAvLyB0aHJlYWQsIHNvIHdlIGFsc28gcmVs
ZWFzZSB0aGUgdGhyZWFkIHJlc291cmNlcy4KICAgICBSZWxlYXNlVGhyZWFkUmVzb3VyY2VCZWhh
dmlvciByZWxlYXNlQmVoYXZpb3IgPQogICAgICAgICBXZWJUaHJlYWRJc0N1cnJlbnQoKSA/IFJl
bGVhc2VUaHJlYWRSZXNvdXJjZUJlaGF2aW9yOjpSZWxlYXNlQ3VycmVudENvbnRleHQgOiBSZWxl
YXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6UmVsZWFzZVRocmVhZFJlc291cmNlczsKLSAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFzZVRocmVhZFJlc291cmNlcyhy
ZWxlYXNlQmVoYXZpb3IpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJl
bGVhc2VUaHJlYWRSZXNvdXJjZXMocmVsZWFzZUJlaGF2aW9yKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5jcHAKaW5kZXggYWM5NTk1MjBhMmUzZGZhZDlmY2Q4MmIzOTJmMTBhOWE1YTYw
NDg0MC4uODRiMmU2ODQ1ZDA3NDljZGFhMWU3OGI4NTMwZDhmOGVhNWEwZTA1ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0wuY3BwCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxX
ZWJDb3IKICAgICAgICAgICAgIC8vIEhlcmUgd2UgZG8gbm90IHRyeSB0byBwbGF5IGJhY2sgcGVu
ZGluZyBjb21tYW5kcyBmb3IgaW1hZ2VCdWZmZXIuIEN1cnJlbnRseSB0aGlzIGNhbGwgaXMgb25s
eSBtYWRlIGZvciBlbXB0eQogICAgICAgICAgICAgLy8gaW1hZ2UgYnVmZmVycyBhbmQgdGhlcmUn
cyBubyBnb29kIHdheSB0byBhZGQgZGlzcGxheSBsaXN0cy4KICAgICAgICAgICAgIGlmIChwaXhl
bEJ1ZmZlcikKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRU
b0NhbnZhcyhjb250ZXh0QXR0cmlidXRlcywgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1
ZmZlci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgICAgICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMs
IFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdl
QnVmZmVyLT5jb250ZXh0KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGlt
YWdlQnVmZmVyLT5jb250ZXh0KCkuY2xlYXJSZWN0KHsgSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIt
PmJhY2tlbmRTaXplKCkgfSk7CiAgICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5ICJmbHVzaCIg
aW1wbGVtZW50YXRpb24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBvdmVybG9hZHMgb3JkZXJp
bmcgYW5kIGVmZmVjdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1Jl
cXVlc3QuY3BwCmluZGV4IDVhNmNlNjVlNzQ0N2QyNGUxZTc3MzYwZjJkOGNmZTY0ZWE4OGIzMmEu
LjBkYTdiOTVkMTRlOWFkZmNkZDM2NjkzOTkzM2Q4MDBmMDBiZjhmYjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291
cmNlc1JlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9T
Y29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwCkBAIC0zMCw3ICszMCw3IEBA
CiAKICNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oIgogI2luY2x1ZGUgIlN0cmVh
bUNvbm5lY3Rpb25Xb3JrUXVldWUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dEdMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmg+CiAjaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogCkBAIC01Niw3
ICs1Niw3IEBAIHZvaWQgU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OjpmcmVl
V2ViR0xSZW5kZXJpbmdSZXNvdXJjZXMoKQogICAgIGlmIChzX3JlcXVlc3RzKQogICAgICAgICBy
ZXR1cm47CiAgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNw
YXRjaChbXSB7Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxl
YXNlVGhyZWFkUmVzb3VyY2VzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpSZWxl
YXNlVGhyZWFkUmVzb3VyY2VCZWhhdmlvcjo6VGVybWluYXRlQW5kUmVsZWFzZVRocmVhZFJlc291
cmNlcyk7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlbGVhc2VU
aHJlYWRSZXNvdXJjZXMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6UmVsZWFzZVRo
cmVhZFJlc291cmNlQmVoYXZpb3I6OlRlcm1pbmF0ZUFuZFJlbGVhc2VUaHJlYWRSZXNvdXJjZXMp
OwogICAgIH0pOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>